v0.5.0b: implemented a second layer of custom tiles for walls

This commit is contained in:
Evan Debenham 2017-02-16 19:01:58 -05:00
parent 20e3297e74
commit 7fa102e78d
4 changed files with 65 additions and 2 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@ -145,6 +145,7 @@ public abstract class Level implements Bundlable {
public SparseArray<Plant> plants; public SparseArray<Plant> plants;
public SparseArray<Trap> traps; public SparseArray<Trap> traps;
public HashSet<CustomTiledVisual> customTiles; public HashSet<CustomTiledVisual> customTiles;
public HashSet<CustomTiledVisual> customWalls;
protected ArrayList<Item> itemsToSpawn = new ArrayList<>(); protected ArrayList<Item> itemsToSpawn = new ArrayList<>();
@ -168,6 +169,7 @@ public abstract class Level implements Bundlable {
private static final String PLANTS = "plants"; private static final String PLANTS = "plants";
private static final String TRAPS = "traps"; private static final String TRAPS = "traps";
private static final String CUSTOM_TILES= "customTiles"; private static final String CUSTOM_TILES= "customTiles";
private static final String CUSTOM_WALLS= "customWalls";
private static final String MOBS = "mobs"; private static final String MOBS = "mobs";
private static final String BLOBS = "blobs"; private static final String BLOBS = "blobs";
private static final String FEELING = "feeling"; private static final String FEELING = "feeling";
@ -269,6 +271,7 @@ public abstract class Level implements Bundlable {
plants = new SparseArray<>(); plants = new SparseArray<>();
traps = new SparseArray<>(); traps = new SparseArray<>();
customTiles = new HashSet<>(); customTiles = new HashSet<>();
customWalls = new HashSet<>();
} while (!build()); } while (!build());
decorate(); decorate();
@ -319,6 +322,7 @@ public abstract class Level implements Bundlable {
plants = new SparseArray<>(); plants = new SparseArray<>();
traps = new SparseArray<>(); traps = new SparseArray<>();
customTiles = new HashSet<>(); customTiles = new HashSet<>();
customWalls = new HashSet<>();
map = bundle.getIntArray( MAP ); map = bundle.getIntArray( MAP );
@ -392,6 +396,12 @@ public abstract class Level implements Bundlable {
} }
} }
collection = bundle.getCollection( CUSTOM_WALLS );
for (Bundlable p : collection) {
CustomTiledVisual vis = (CustomTiledVisual)p;
customWalls.add(vis);
}
collection = bundle.getCollection( MOBS ); collection = bundle.getCollection( MOBS );
for (Bundlable m : collection) { for (Bundlable m : collection) {
Mob mob = (Mob)m; Mob mob = (Mob)m;
@ -429,6 +439,7 @@ public abstract class Level implements Bundlable {
bundle.put( PLANTS, plants.values() ); bundle.put( PLANTS, plants.values() );
bundle.put( TRAPS, traps.values() ); bundle.put( TRAPS, traps.values() );
bundle.put( CUSTOM_TILES, customTiles ); bundle.put( CUSTOM_TILES, customTiles );
bundle.put( CUSTOM_WALLS, customWalls );
bundle.put( MOBS, mobs ); bundle.put( MOBS, mobs );
bundle.put( BLOBS, blobs.values() ); bundle.put( BLOBS, blobs.values() );
bundle.put( FEELING, feeling ); bundle.put( FEELING, feeling );

View File

@ -345,6 +345,11 @@ public class PrisonBossLevel extends Level {
customTiles.add(vis); customTiles.add(vis);
((GameScene)ShatteredPixelDungeon.scene()).addCustomTile(vis); ((GameScene)ShatteredPixelDungeon.scene()).addCustomTile(vis);
vis = new exitVisualWalls();
vis.pos(11, 8);
customWalls.add(vis);
((GameScene)ShatteredPixelDungeon.scene()).addCustomWall(vis);
Dungeon.hero.interrupt(); Dungeon.hero.interrupt();
Dungeon.hero.pos = 5+27*32; Dungeon.hero.pos = 5+27*32;
Dungeon.hero.sprite.interruptMotion(); Dungeon.hero.sprite.interruptMotion();
@ -543,7 +548,6 @@ public class PrisonBossLevel extends Level {
1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
}; };
public exitVisual() { public exitVisual() {
@ -553,7 +557,7 @@ public class PrisonBossLevel extends Level {
@Override @Override
public CustomTiledVisual create() { public CustomTiledVisual create() {
tileW = 12; tileW = 12;
tileH = 15; tileH = 14;
mapSimpleImage(0, 0); mapSimpleImage(0, 0);
return super.create(); return super.create();
} }
@ -570,4 +574,40 @@ public class PrisonBossLevel extends Level {
return render[pos] != 0; return render[pos] != 0;
} }
} }
public static class exitVisualWalls extends CustomTiledVisual {
private static short[] render = new short[]{
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
public exitVisualWalls() {
super(Assets.PRISON_EXIT);
}
@Override
public CustomTiledVisual create() {
tileW = 12;
tileH = 14;
mapSimpleImage(4, 0);
return super.create();
}
@Override
protected boolean needsRender(int pos) {
return render[pos] != 0;
}
}
} }

View File

@ -133,6 +133,7 @@ public class GameScene extends PixelScene {
private Group terrain; private Group terrain;
private Group customTiles; private Group customTiles;
private Group levelVisuals; private Group levelVisuals;
private Group customWalls;
private Group ripples; private Group ripples;
private Group plants; private Group plants;
private Group traps; private Group traps;
@ -238,6 +239,13 @@ public class GameScene extends PixelScene {
walls = new DungeonWallsTilemap(); walls = new DungeonWallsTilemap();
add(walls); add(walls);
customWalls = new Group();
add(customWalls);
for( CustomTiledVisual visual : Dungeon.level.customWalls){
addCustomWall(visual);
}
wallBlocking = new WallBlockingTilemap(); wallBlocking = new WallBlockingTilemap();
add (wallBlocking); add (wallBlocking);
@ -539,6 +547,10 @@ public class GameScene extends PixelScene {
customTiles.add( visual.create() ); customTiles.add( visual.create() );
} }
public void addCustomWall( CustomTiledVisual visual){
customWalls.add( visual.create() );
}
private void addHeapSprite( Heap heap ) { private void addHeapSprite( Heap heap ) {
ItemSprite sprite = heap.sprite = (ItemSprite)heaps.recycle( ItemSprite.class ); ItemSprite sprite = heap.sprite = (ItemSprite)heaps.recycle( ItemSprite.class );
sprite.revive(); sprite.revive();