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.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
com.watabou.utils.Bundle.addAlias(
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.Painter;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.EntranceRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.ExitRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.entrance.EntranceRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.exit.ExitRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.ImpShopRoom;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
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.ShopRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.SpecialRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.EntranceRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.ExitRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.entrance.EntranceRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.exit.ExitRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.StandardRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.traps.BlazingTrap;
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" )) );
for (Room r : rooms) {
r.onLevelLoad( this );
if (r instanceof EntranceRoom ){
if (r.isEntrance()){
roomEntrance = r;
} else if (r instanceof ExitRoom ){
} else if (r.isExit()){
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.secret.SecretRoom;
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.watabou.utils.Random;
@@ -98,9 +96,9 @@ public abstract class RegularBuilder extends Builder {
singleConnections.clear();
multiConnections.clear();
for (Room r : rooms){
if (r instanceof EntranceRoom){
if (r.isEntrance()){
entrance = r;
} else if (r instanceof ExitRoom) {
} else if (r.isExit()) {
exit = r;
} else if (r instanceof ShopRoom && r.maxConnections(Room.ALL) == 1){
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.connection.ConnectionRoom;
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.traps.Trap;
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 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())
|| (Dungeon.depth == 2 && !Document.ADVENTURERS_GUIDE.isPageFound(Document.GUIDE_SEARCHING))) {
d.type = Room.Door.Type.HIDDEN;
@@ -282,6 +282,14 @@ public abstract class Room extends Rect implements Graph.Node, Bundlable {
}
connected.clear();
}
public boolean isEntrance(){
return false;
}
public boolean isExit(){
return false;
}
// **** Painter Logic ****
@@ -34,7 +34,6 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
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.tiles.CustomTilemap;
import com.watabou.noosa.Image;
@@ -100,21 +99,21 @@ public class MassGraveRoom extends SpecialRoom {
@Override
public boolean canConnect(Room r) {
if (r instanceof EntranceRoom){
if (r.isEntrance()){
return false;
}
//must have at least 3 rooms between it and the entrance room
for (Room r1 : r.connected.keySet()) {
if (r1 instanceof EntranceRoom){
if (r1.isEntrance()){
return false;
}
for (Room r2 : r1.connected.keySet()) {
if (r2 instanceof EntranceRoom){
if (r2.isEntrance()){
return false;
}
for (Room r3 : r2.connected.keySet()) {
if (r3 instanceof EntranceRoom){
if (r3.isEntrance()){
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.rooms.Room;
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.tiles.CustomTilemap;
import com.watabou.noosa.Image;
@@ -41,7 +41,7 @@ import com.watabou.utils.Random;
import java.util.ArrayList;
public class MineEntrance extends EntranceRoom {
public class MineEntrance extends StandardRoom {
@Override
public int minWidth() {
@@ -54,10 +54,8 @@ public class MineEntrance extends EntranceRoom {
}
@Override
public boolean canMerge(Level l, Point p, int mergeTerrain) {
//StandardRoom.canMerge
int cell = l.pointToCell(pointInside(p, 1));
return (Terrain.flags[l.map[cell]] & Terrain.SOLID) == 0;
public boolean isEntrance() {
return true;
}
@Override
@@ -26,7 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.levels.features.LevelTransition;
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
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 {
@@ -27,7 +27,7 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.levels.features.LevelTransition;
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
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.watabou.noosa.Image;
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.painters.Painter;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.EntranceRoom;
import com.shatteredpixel.shatteredpixeldungeon.tiles.CustomTilemap;
import com.watabou.noosa.Tilemap;
import com.watabou.utils.Point;
@@ -61,8 +60,8 @@ public class DemonSpawnerRoom extends SpecialRoom {
@Override
public boolean connect(Room room) {
//cannot connect to entrance, otherwise works normally
if (room instanceof EntranceRoom) return false;
else return super.connect(room);
if (room.isExit()) return false;
else return super.connect(room);
}
@Override
@@ -19,7 +19,7 @@
* 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.SPDSettings;
@@ -31,6 +31,7 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.levels.features.LevelTransition;
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.StandardRoom;
import com.watabou.utils.Point;
import com.watabou.utils.Random;
@@ -46,6 +47,11 @@ public class EntranceRoom extends StandardRoom {
return Math.max(super.minHeight(), 5);
}
@Override
public boolean isEntrance() {
return true;
}
@Override
public boolean canMerge(Level l, Point p, int mergeTerrain) {
return false;
@@ -117,8 +123,8 @@ public class EntranceRoom extends StandardRoom {
@Override
public boolean connect(Room room) {
//cannot connect to exit, otherwise works normally
if (room instanceof ExitRoom) return false;
else return super.connect(room);
if (room.isExit()) return false;
else return super.connect(room);
}
}
@@ -19,13 +19,14 @@
* 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.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.levels.features.LevelTransition;
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.StandardRoom;
import com.watabou.utils.Point;
public class ExitRoom extends StandardRoom {
@@ -62,7 +63,7 @@ public class ExitRoom extends StandardRoom {
@Override
public boolean connect(Room room) {
//cannot connect to entrance, otherwise works normally
if (room instanceof EntranceRoom) return false;
else return super.connect(room);
if (room.isEntrance()) return false;
else return super.connect(room);
}
}