From e2a57a0e31abfe0acee4ca0a6aa6f055b3353cd3 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Fri, 6 Nov 2015 18:45:41 -0500 Subject: [PATCH] v0.3.2a: refactored how level-generated visuals work, more flexible and resolves bugs --- .../levels/CavesBossLevel.java | 10 ++++--- .../levels/CavesLevel.java | 12 ++++----- .../levels/CityBossLevel.java | 8 +++--- .../levels/CityLevel.java | 15 ++++++----- .../levels/HallsBossLevel.java | 8 +++--- .../levels/HallsLevel.java | 14 +++++----- .../levels/LastLevel.java | 9 ++++--- .../levels/LastShopLevel.java | 11 ++++---- .../shatteredpixeldungeon/levels/Level.java | 12 ++++++--- .../levels/PrisonBossLevel.java | 26 +++++-------------- .../levels/PrisonLevel.java | 15 +++++++---- .../levels/SewerBossLevel.java | 11 ++++---- .../levels/SewerLevel.java | 13 +++++----- .../scenes/GameScene.java | 8 +++--- 14 files changed, 90 insertions(+), 82 deletions(-) diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/levels/CavesBossLevel.java b/src/com/shatteredpixel/shatteredpixeldungeon/levels/CavesBossLevel.java index 033da9dd7..7b013ff85 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/levels/CavesBossLevel.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/levels/CavesBossLevel.java @@ -23,7 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.ToxicTrap; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.Trap; import com.watabou.noosa.Camera; -import com.watabou.noosa.Scene; +import com.watabou.noosa.Group; import com.watabou.noosa.audio.Sample; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Bones; @@ -305,9 +305,11 @@ public class CavesBossLevel extends Level { return super.tileDesc( tile ); } } - + @Override - public void addVisuals( Scene scene ) { - CavesLevel.addVisuals( this, scene ); + public Group addVisuals() { + super.addVisuals(); + CavesLevel.addCavesVisuals(this, visuals); + return visuals; } } diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/levels/CavesLevel.java b/src/com/shatteredpixel/shatteredpixeldungeon/levels/CavesLevel.java index 1561caca4..17431061f 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/levels/CavesLevel.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/levels/CavesLevel.java @@ -23,7 +23,6 @@ package com.shatteredpixel.shatteredpixeldungeon.levels; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.*; import com.watabou.noosa.Game; import com.watabou.noosa.Group; -import com.watabou.noosa.Scene; import com.watabou.noosa.particles.PixelParticle; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; @@ -236,15 +235,16 @@ public class CavesLevel extends RegularLevel { } @Override - public void addVisuals( Scene scene ) { - super.addVisuals( scene ); - addVisuals( this, scene ); + public Group addVisuals() { + super.addVisuals(); + addCavesVisuals( this, visuals ); + return visuals; } - public static void addVisuals( Level level, Scene scene ) { + public static void addCavesVisuals( Level level, Group group ) { for (int i=0; i < LENGTH; i++) { if (level.map[i] == Terrain.WALL_DECO) { - scene.add( new Vein( i ) ); + group.add( new Vein( i ) ); } } } diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/levels/CityBossLevel.java b/src/com/shatteredpixel/shatteredpixeldungeon/levels/CityBossLevel.java index a27a74776..8453638e3 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/levels/CityBossLevel.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/levels/CityBossLevel.java @@ -20,7 +20,7 @@ */ package com.shatteredpixel.shatteredpixeldungeon.levels; -import com.watabou.noosa.Scene; +import com.watabou.noosa.Group; import com.watabou.noosa.tweeners.AlphaTweener; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Bones; @@ -264,7 +264,9 @@ public class CityBossLevel extends Level { } @Override - public void addVisuals( Scene scene ) { - CityLevel.addVisuals( this, scene ); + public Group addVisuals( ) { + super.addVisuals(); + CityLevel.addCityVisuals(this, visuals); + return visuals; } } diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/levels/CityLevel.java b/src/com/shatteredpixel/shatteredpixeldungeon/levels/CityLevel.java index aefe6868c..f042c11ac 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/levels/CityLevel.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/levels/CityLevel.java @@ -21,7 +21,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.*; -import com.watabou.noosa.Scene; +import com.watabou.noosa.Group; import com.watabou.noosa.particles.Emitter; import com.watabou.noosa.particles.PixelParticle; import com.shatteredpixel.shatteredpixeldungeon.Assets; @@ -142,15 +142,16 @@ public class CityLevel extends RegularLevel { } @Override - public void addVisuals( Scene scene ) { - super.addVisuals( scene ); - addVisuals( this, scene ); + public Group addVisuals() { + super.addVisuals(); + addCityVisuals( this, visuals ); + return visuals; } - - public static void addVisuals( Level level, Scene scene ) { + + public static void addCityVisuals( Level level, Group group ) { for (int i=0; i < LENGTH; i++) { if (level.map[i] == Terrain.WALL_DECO) { - scene.add( new Smoke( i ) ); + group.add( new Smoke( i ) ); } } } diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/levels/HallsBossLevel.java b/src/com/shatteredpixel/shatteredpixeldungeon/levels/HallsBossLevel.java index 091bf2321..d7c53c96c 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/levels/HallsBossLevel.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/levels/HallsBossLevel.java @@ -20,7 +20,7 @@ */ package com.shatteredpixel.shatteredpixeldungeon.levels; -import com.watabou.noosa.Scene; +import com.watabou.noosa.Group; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Bones; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; @@ -255,7 +255,9 @@ public class HallsBossLevel extends Level { } @Override - public void addVisuals( Scene scene ) { - HallsLevel.addVisuals( this, scene ); + public Group addVisuals () { + super.addVisuals(); + HallsLevel.addHallsVisuals( this, visuals ); + return visuals; } } diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/levels/HallsLevel.java b/src/com/shatteredpixel/shatteredpixeldungeon/levels/HallsLevel.java index afbc3e5e2..94e7742af 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/levels/HallsLevel.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/levels/HallsLevel.java @@ -27,7 +27,6 @@ import android.opengl.GLES20; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.*; import com.watabou.noosa.Game; import com.watabou.noosa.Group; -import com.watabou.noosa.Scene; import com.watabou.noosa.particles.PixelParticle; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; @@ -150,15 +149,16 @@ public class HallsLevel extends RegularLevel { } @Override - public void addVisuals( Scene scene ) { - super.addVisuals( scene ); - addVisuals( this, scene ); + public Group addVisuals() { + super.addVisuals(); + addHallsVisuals( this, visuals ); + return visuals; } - public static void addVisuals( Level level, Scene scene ) { + public static void addHallsVisuals( Level level, Group group ) { for (int i=0; i < LENGTH; i++) { - if (level.map[i] == 63) { - scene.add( new Stream( i ) ); + if (level.map[i] == Terrain.WATER) { + group.add( new Stream( i ) ); } } } diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/levels/LastLevel.java b/src/com/shatteredpixel/shatteredpixeldungeon/levels/LastLevel.java index 08129a3a7..2e513ae5a 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/levels/LastLevel.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/levels/LastLevel.java @@ -23,7 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels; import java.util.Arrays; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; -import com.watabou.noosa.Scene; +import com.watabou.noosa.Group; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.items.Amulet; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; @@ -169,9 +169,10 @@ public class LastLevel extends Level { } @Override - public void addVisuals( Scene scene ) { - super.addVisuals( scene ); - HallsLevel.addVisuals( this, scene ); + public Group addVisuals () { + super.addVisuals(); + HallsLevel.addHallsVisuals(this, visuals); + return visuals; } @Override diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/levels/LastShopLevel.java b/src/com/shatteredpixel/shatteredpixeldungeon/levels/LastShopLevel.java index e16099b1b..9565ea846 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/levels/LastShopLevel.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/levels/LastShopLevel.java @@ -27,7 +27,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Imp; import com.shatteredpixel.shatteredpixeldungeon.items.Heap; import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.levels.Room.Type; -import com.watabou.noosa.Scene; +import com.watabou.noosa.Group; import com.watabou.utils.Graph; import com.watabou.utils.Random; @@ -217,10 +217,11 @@ public class LastShopLevel extends RegularLevel { protected boolean[] grass() { return Patch.generate( 0.30f, 3 ); } - + @Override - public void addVisuals( Scene scene ) { - super.addVisuals( scene ); - CityLevel.addVisuals( this, scene ); + public Group addVisuals( ) { + super.addVisuals(); + CityLevel.addCityVisuals(this, visuals); + return visuals; } } diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java b/src/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java index 2228bffe8..5e5dadcec 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java @@ -75,7 +75,7 @@ import com.shatteredpixel.shatteredpixeldungeon.ui.CustomTileVisual; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.watabou.noosa.Game; -import com.watabou.noosa.Scene; +import com.watabou.noosa.Group; import com.watabou.noosa.audio.Sample; import com.watabou.utils.Bundlable; import com.watabou.utils.Bundle; @@ -162,6 +162,8 @@ public abstract class Level implements Bundlable { public HashSet customTiles; protected ArrayList itemsToSpawn = new ArrayList<>(); + + protected Group visuals = new Group(); public int color1 = 0x004400; public int color2 = 0x88CC44; @@ -485,15 +487,17 @@ public abstract class Level implements Bundlable { } } - public void addVisuals( Scene scene ) { + public Group addVisuals() { + visuals.clear(); for (int i=0; i < LENGTH; i++) { if (pit[i]) { - scene.add( new WindParticle.Wind( i ) ); + visuals.add( new WindParticle.Wind( i ) ); if (i >= WIDTH && water[i-WIDTH]) { - scene.add( new FlowParticle.Flow( i - WIDTH ) ); + visuals.add( new FlowParticle.Flow( i - WIDTH ) ); } } } + return visuals; } public int nMobs() { diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/levels/PrisonBossLevel.java b/src/com/shatteredpixel/shatteredpixeldungeon/levels/PrisonBossLevel.java index 673fb5e4b..ba43d376f 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/levels/PrisonBossLevel.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/levels/PrisonBossLevel.java @@ -35,7 +35,7 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.traps.Trap; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.ui.CustomTileVisual; import com.shatteredpixel.shatteredpixeldungeon.ui.HealthIndicator; -import com.watabou.noosa.Scene; +import com.watabou.noosa.Group; import com.watabou.noosa.audio.Sample; import com.watabou.utils.Bundlable; import com.watabou.utils.Bundle; @@ -63,9 +63,6 @@ public class PrisonBossLevel extends Level { //keep track of that need to be removed as the level is changed. We dump 'em back into the level at the end. private ArrayList storedItems = new ArrayList<>(); - - //we keep track of torches so we can kill them as needed when layouts change. - private ArrayList torches = new ArrayList<>(); @Override public String tilesTex() { @@ -242,7 +239,7 @@ public class PrisonBossLevel extends Level { exit = i; visited = mapped = new boolean[LENGTH]; - addVisuals(ShatteredPixelDungeon.scene()); + addVisuals(); //this also resets existing visuals resetTraps(); Dungeon.observe(); @@ -342,21 +339,10 @@ public class PrisonBossLevel extends Level { } @Override - public void addVisuals( Scene scene ) { - super.addVisuals(scene); - //kill old torches before adding new ones - for (PrisonLevel.Torch t : torches.toArray(new PrisonLevel.Torch[torches.size()])){ - t.kill(); - torches.remove(t); - } - - for (int i=0; i < LENGTH; i++) { - if (map[i] == Terrain.WALL_DECO) { - PrisonLevel.Torch t = new PrisonLevel.Torch( i ); - torches.add(t); - scene.add( t ); - } - } + public Group addVisuals() { + super.addVisuals(); + PrisonLevel.addPrisonVisuals(this, visuals); + return visuals; } private static final int W = Terrain.WALL; diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/levels/PrisonLevel.java b/src/com/shatteredpixel/shatteredpixeldungeon/levels/PrisonLevel.java index 9350ef50e..37cb52bf4 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/levels/PrisonLevel.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/levels/PrisonLevel.java @@ -21,7 +21,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.*; -import com.watabou.noosa.Scene; +import com.watabou.noosa.Group; import com.watabou.noosa.particles.Emitter; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; @@ -156,11 +156,16 @@ public class PrisonLevel extends RegularLevel { } @Override - public void addVisuals( Scene scene ) { - super.addVisuals(scene); + public Group addVisuals() { + super.addVisuals(); + addPrisonVisuals(this, visuals); + return visuals; + } + + public static void addPrisonVisuals(Level level, Group group){ for (int i=0; i < LENGTH; i++) { - if (map[i] == Terrain.WALL_DECO) { - scene.add( new Torch( i ) ); + if (level.map[i] == Terrain.WALL_DECO) { + group.add( new Torch( i ) ); } } } diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/levels/SewerBossLevel.java b/src/com/shatteredpixel/shatteredpixeldungeon/levels/SewerBossLevel.java index 26071e7fb..d63bfeeba 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/levels/SewerBossLevel.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/levels/SewerBossLevel.java @@ -30,7 +30,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Heap; import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.levels.Room.Type; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; -import com.watabou.noosa.Scene; +import com.watabou.noosa.Group; import com.watabou.utils.Bundle; import com.watabou.utils.Graph; import com.watabou.utils.Random; @@ -203,11 +203,12 @@ public class SewerBossLevel extends RegularLevel { } @Override - public void addVisuals( Scene scene ) { - SewerLevel.addVisuals( this, scene ); + public Group addVisuals() { + super.addVisuals(); + SewerLevel.addSewerVisuals(this, visuals); + return visuals; } - - + @Override protected void createMobs() { Mob mob = Bestiary.mob( Dungeon.depth ); diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/levels/SewerLevel.java b/src/com/shatteredpixel/shatteredpixeldungeon/levels/SewerLevel.java index c5ca77789..b4fa26136 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/levels/SewerLevel.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/levels/SewerLevel.java @@ -22,7 +22,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.*; import com.watabou.noosa.Game; -import com.watabou.noosa.Scene; +import com.watabou.noosa.Group; import com.watabou.noosa.particles.Emitter; import com.watabou.noosa.particles.PixelParticle; import com.shatteredpixel.shatteredpixeldungeon.Assets; @@ -139,15 +139,16 @@ public class SewerLevel extends RegularLevel { } @Override - public void addVisuals( Scene scene ) { - super.addVisuals( scene ); - addVisuals( this, scene ); + public Group addVisuals() { + super.addVisuals(); + addSewerVisuals(this, visuals); + return visuals; } - public static void addVisuals( Level level, Scene scene ) { + public static void addSewerVisuals( Level level, Group group ) { for (int i=0; i < LENGTH; i++) { if (level.map[i] == Terrain.WALL_DECO) { - scene.add( new Sink( i ) ); + group.add( new Sink( i ) ); } } } diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java b/src/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java index 2f2467408..12645000d 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java @@ -118,6 +118,7 @@ public class GameScene extends PixelScene { private Group terrain; private Group customTiles; + private Group levelVisuals; private Group ripples; private Group plants; private Group traps; @@ -167,12 +168,13 @@ public class GameScene extends PixelScene { customTiles = new Group(); terrain.add(customTiles); - - Dungeon.level.addVisuals(this); for( CustomTileVisual visual : Dungeon.level.customTiles){ addCustomTile(visual.create()); } + + levelVisuals = Dungeon.level.addVisuals(); + add(levelVisuals); traps = new Group(); add(traps); @@ -549,7 +551,7 @@ public class GameScene extends PixelScene { } // ------------------------------------------------------- - + public static void add( Plant plant ) { if (scene != null) { scene.addPlantSprite( plant );