v0.3.1a: made trap spawning more consistent
This commit is contained in:
parent
81341c93d0
commit
1c2312520d
|
@ -43,8 +43,10 @@ import com.watabou.utils.Rect;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public abstract class RegularLevel extends Level {
|
public abstract class RegularLevel extends Level {
|
||||||
|
@ -333,25 +335,36 @@ public abstract class RegularLevel extends Level {
|
||||||
float[] trapChances = trapChances();
|
float[] trapChances = trapChances();
|
||||||
Class<?>[] trapClasses = trapClasses();
|
Class<?>[] trapClasses = trapClasses();
|
||||||
|
|
||||||
for (int i=0; i < nTraps; i++) {
|
LinkedList<Integer> validCells = new LinkedList<Integer>();
|
||||||
|
|
||||||
|
for (int i = 0; i < LENGTH; i ++) {
|
||||||
|
if (map[i] == Terrain.EMPTY){
|
||||||
|
validCells.add(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//no more than one trap every 5 valid tiles.
|
||||||
|
nTraps = Math.min(nTraps, validCells.size()/5);
|
||||||
|
|
||||||
|
Collections.shuffle(validCells);
|
||||||
|
|
||||||
|
for (int i = 0; i < nTraps; i++) {
|
||||||
|
|
||||||
int trapPos = Random.Int( LENGTH );
|
int trapPos = validCells.removeFirst();
|
||||||
|
|
||||||
if (map[trapPos] == Terrain.EMPTY) {
|
try {
|
||||||
try {
|
Trap trap = ((Trap)trapClasses[Random.chances( trapChances )].newInstance()).hide();
|
||||||
Trap trap = ((Trap)trapClasses[Random.chances( trapChances )].newInstance()).hide();
|
setTrap( trap, trapPos );
|
||||||
setTrap( trap, trapPos );
|
//some traps will not be hidden
|
||||||
//some traps will not be hidden
|
map[trapPos] = trap.visible ? Terrain.TRAP : Terrain.SECRET_TRAP;
|
||||||
map[trapPos] = trap.visible ? Terrain.TRAP : Terrain.SECRET_TRAP;
|
} catch (Exception e) {
|
||||||
} catch (Exception e) {
|
throw new RuntimeException(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int nTraps() {
|
protected int nTraps() {
|
||||||
return Random.NormalIntRange( 1, rooms.size() + Dungeon.depth );
|
return Random.NormalIntRange( 1, 4+(Dungeon.depth/2) );
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Class<?>[] trapClasses(){
|
protected Class<?>[] trapClasses(){
|
||||||
|
|
Loading…
Reference in New Issue
Block a user