v2.4.0: refactored entrance and exit rooms to be more extensible

This commit is contained in:
Evan Debenham
2024-04-17 12:45:14 -04:00
parent 898f756a07
commit 769c459aa7
13 changed files with 49 additions and 34 deletions
@@ -64,6 +64,13 @@ public class ShatteredPixelDungeon extends Game {
com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.AquaBrew.class, com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.AquaBrew.class,
"com.shatteredpixel.shatteredpixeldungeon.items.spells.AquaBlast" ); "com.shatteredpixel.shatteredpixeldungeon.items.spells.AquaBlast" );
com.watabou.utils.Bundle.addAlias(
com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.entrance.EntranceRoom.class,
"com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.EntranceRoom.class" );
com.watabou.utils.Bundle.addAlias(
com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.exit.ExitRoom.class,
"com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.ExitRoom.class" );
//pre-v2.3.0 //pre-v2.3.0
com.watabou.utils.Bundle.addAlias( com.watabou.utils.Bundle.addAlias(
com.shatteredpixel.shatteredpixeldungeon.items.bombs.Bomb.ConjuredBomb.class, com.shatteredpixel.shatteredpixeldungeon.items.bombs.Bomb.ConjuredBomb.class,
@@ -33,8 +33,8 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.builders.LineBuilder;
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.CityPainter; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.CityPainter;
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.EntranceRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.entrance.EntranceRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.ExitRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.exit.ExitRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.ImpShopRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.ImpShopRoom;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.watabou.noosa.Group; import com.watabou.noosa.Group;
@@ -61,8 +61,8 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.MagicalFire
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.PitRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.PitRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.ShopRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.ShopRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.SpecialRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.SpecialRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.EntranceRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.entrance.EntranceRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.ExitRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.exit.ExitRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.StandardRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.StandardRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.traps.BlazingTrap; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.BlazingTrap;
import com.shatteredpixel.shatteredpixeldungeon.levels.traps.BurningTrap; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.BurningTrap;
@@ -766,9 +766,9 @@ public abstract class RegularLevel extends Level {
rooms = new ArrayList<>( (Collection<Room>) ((Collection<?>) bundle.getCollection( "rooms" )) ); rooms = new ArrayList<>( (Collection<Room>) ((Collection<?>) bundle.getCollection( "rooms" )) );
for (Room r : rooms) { for (Room r : rooms) {
r.onLevelLoad( this ); r.onLevelLoad( this );
if (r instanceof EntranceRoom ){ if (r.isEntrance()){
roomEntrance = r; roomEntrance = r;
} else if (r instanceof ExitRoom ){ } else if (r.isExit()){
roomExit = r; roomExit = r;
} }
} }
@@ -26,8 +26,6 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.connection.Connecti
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.connection.MazeConnectionRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.connection.MazeConnectionRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.secret.SecretRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.secret.SecretRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.ShopRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.ShopRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.EntranceRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.ExitRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.StandardRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.StandardRoom;
import com.watabou.utils.Random; import com.watabou.utils.Random;
@@ -98,9 +96,9 @@ public abstract class RegularBuilder extends Builder {
singleConnections.clear(); singleConnections.clear();
multiConnections.clear(); multiConnections.clear();
for (Room r : rooms){ for (Room r : rooms){
if (r instanceof EntranceRoom){ if (r.isEntrance()){
entrance = r; entrance = r;
} else if (r instanceof ExitRoom) { } else if (r.isExit()) {
exit = r; exit = r;
} else if (r instanceof ShopRoom && r.maxConnections(Room.ALL) == 1){ } else if (r instanceof ShopRoom && r.maxConnections(Room.ALL) == 1){
shop = r; shop = r;
@@ -31,7 +31,6 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.connection.ConnectionRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.connection.ConnectionRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.SpecialRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.SpecialRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.EntranceRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.StandardRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.StandardRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.traps.Trap; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.Trap;
import com.watabou.noosa.Game; import com.watabou.noosa.Game;
@@ -260,7 +259,7 @@ public abstract class RegularPainter extends Painter {
//entrance doors on floor 1 are hidden during tutorial //entrance doors on floor 1 are hidden during tutorial
//entrance doors on floor 2 are hidden if the player hasn't picked up 2nd guidebook page //entrance doors on floor 2 are hidden if the player hasn't picked up 2nd guidebook page
if (r instanceof EntranceRoom || n instanceof EntranceRoom){ if (r.isEntrance() || n.isEntrance()){
if ((Dungeon.depth == 1 && SPDSettings.intro()) if ((Dungeon.depth == 1 && SPDSettings.intro())
|| (Dungeon.depth == 2 && !Document.ADVENTURERS_GUIDE.isPageFound(Document.GUIDE_SEARCHING))) { || (Dungeon.depth == 2 && !Document.ADVENTURERS_GUIDE.isPageFound(Document.GUIDE_SEARCHING))) {
d.type = Room.Door.Type.HIDDEN; d.type = Room.Door.Type.HIDDEN;
@@ -283,6 +283,14 @@ public abstract class Room extends Rect implements Graph.Node, Bundlable {
connected.clear(); connected.clear();
} }
public boolean isEntrance(){
return false;
}
public boolean isExit(){
return false;
}
// **** Painter Logic **** // **** Painter Logic ****
public abstract void paint(Level level); public abstract void paint(Level level);
@@ -34,7 +34,6 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.SpecialRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.SpecialRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.EntranceRoom;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.tiles.CustomTilemap; import com.shatteredpixel.shatteredpixeldungeon.tiles.CustomTilemap;
import com.watabou.noosa.Image; import com.watabou.noosa.Image;
@@ -100,21 +99,21 @@ public class MassGraveRoom extends SpecialRoom {
@Override @Override
public boolean canConnect(Room r) { public boolean canConnect(Room r) {
if (r instanceof EntranceRoom){ if (r.isEntrance()){
return false; return false;
} }
//must have at least 3 rooms between it and the entrance room //must have at least 3 rooms between it and the entrance room
for (Room r1 : r.connected.keySet()) { for (Room r1 : r.connected.keySet()) {
if (r1 instanceof EntranceRoom){ if (r1.isEntrance()){
return false; return false;
} }
for (Room r2 : r1.connected.keySet()) { for (Room r2 : r1.connected.keySet()) {
if (r2 instanceof EntranceRoom){ if (r2.isEntrance()){
return false; return false;
} }
for (Room r3 : r2.connected.keySet()) { for (Room r3 : r2.connected.keySet()) {
if (r3 instanceof EntranceRoom){ if (r3.isEntrance()){
return false; return false;
} }
} }
@@ -30,7 +30,7 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.features.LevelTransition;
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.secret.SecretRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.secret.SecretRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.EntranceRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.StandardRoom;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.tiles.CustomTilemap; import com.shatteredpixel.shatteredpixeldungeon.tiles.CustomTilemap;
import com.watabou.noosa.Image; import com.watabou.noosa.Image;
@@ -41,7 +41,7 @@ import com.watabou.utils.Random;
import java.util.ArrayList; import java.util.ArrayList;
public class MineEntrance extends EntranceRoom { public class MineEntrance extends StandardRoom {
@Override @Override
public int minWidth() { public int minWidth() {
@@ -54,10 +54,8 @@ public class MineEntrance extends EntranceRoom {
} }
@Override @Override
public boolean canMerge(Level l, Point p, int mergeTerrain) { public boolean isEntrance() {
//StandardRoom.canMerge return true;
int cell = l.pointToCell(pointInside(p, 1));
return (Terrain.flags[l.map[cell]] & Terrain.SOLID) == 0;
} }
@Override @Override
@@ -26,7 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.levels.features.LevelTransition; import com.shatteredpixel.shatteredpixeldungeon.levels.features.LevelTransition;
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.EntranceRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.entrance.EntranceRoom;
public class SewerBossEntranceRoom extends EntranceRoom { public class SewerBossEntranceRoom extends EntranceRoom {
@@ -27,7 +27,7 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.levels.features.LevelTransition; import com.shatteredpixel.shatteredpixeldungeon.levels.features.LevelTransition;
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.ExitRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.exit.ExitRoom;
import com.shatteredpixel.shatteredpixeldungeon.tiles.CustomTilemap; import com.shatteredpixel.shatteredpixeldungeon.tiles.CustomTilemap;
import com.watabou.noosa.Image; import com.watabou.noosa.Image;
import com.watabou.noosa.Tilemap; import com.watabou.noosa.Tilemap;
@@ -29,7 +29,6 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.EntranceRoom;
import com.shatteredpixel.shatteredpixeldungeon.tiles.CustomTilemap; import com.shatteredpixel.shatteredpixeldungeon.tiles.CustomTilemap;
import com.watabou.noosa.Tilemap; import com.watabou.noosa.Tilemap;
import com.watabou.utils.Point; import com.watabou.utils.Point;
@@ -61,8 +60,8 @@ public class DemonSpawnerRoom extends SpecialRoom {
@Override @Override
public boolean connect(Room room) { public boolean connect(Room room) {
//cannot connect to entrance, otherwise works normally //cannot connect to entrance, otherwise works normally
if (room instanceof EntranceRoom) return false; if (room.isExit()) return false;
else return super.connect(room); else return super.connect(room);
} }
@Override @Override
@@ -19,7 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/> * along with this program. If not, see <http://www.gnu.org/licenses/>
*/ */
package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard; package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.entrance;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.SPDSettings; import com.shatteredpixel.shatteredpixeldungeon.SPDSettings;
@@ -31,6 +31,7 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.levels.features.LevelTransition; import com.shatteredpixel.shatteredpixeldungeon.levels.features.LevelTransition;
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.StandardRoom;
import com.watabou.utils.Point; import com.watabou.utils.Point;
import com.watabou.utils.Random; import com.watabou.utils.Random;
@@ -46,6 +47,11 @@ public class EntranceRoom extends StandardRoom {
return Math.max(super.minHeight(), 5); return Math.max(super.minHeight(), 5);
} }
@Override
public boolean isEntrance() {
return true;
}
@Override @Override
public boolean canMerge(Level l, Point p, int mergeTerrain) { public boolean canMerge(Level l, Point p, int mergeTerrain) {
return false; return false;
@@ -117,8 +123,8 @@ public class EntranceRoom extends StandardRoom {
@Override @Override
public boolean connect(Room room) { public boolean connect(Room room) {
//cannot connect to exit, otherwise works normally //cannot connect to exit, otherwise works normally
if (room instanceof ExitRoom) return false; if (room.isExit()) return false;
else return super.connect(room); else return super.connect(room);
} }
} }
@@ -19,13 +19,14 @@
* along with this program. If not, see <http://www.gnu.org/licenses/> * along with this program. If not, see <http://www.gnu.org/licenses/>
*/ */
package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard; package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.exit;
import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.levels.features.LevelTransition; import com.shatteredpixel.shatteredpixeldungeon.levels.features.LevelTransition;
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.StandardRoom;
import com.watabou.utils.Point; import com.watabou.utils.Point;
public class ExitRoom extends StandardRoom { public class ExitRoom extends StandardRoom {
@@ -62,7 +63,7 @@ public class ExitRoom extends StandardRoom {
@Override @Override
public boolean connect(Room room) { public boolean connect(Room room) {
//cannot connect to entrance, otherwise works normally //cannot connect to entrance, otherwise works normally
if (room instanceof EntranceRoom) return false; if (room.isEntrance()) return false;
else return super.connect(room); else return super.connect(room);
} }
} }