v2.4.0: improved merging behavior for hallway rooms

This commit is contained in:
Evan Debenham
2024-04-17 16:47:08 -04:00
parent cc80f8a391
commit 792f681c88
14 changed files with 31 additions and 19 deletions
@@ -310,12 +310,12 @@ public abstract class RegularPainter extends Painter {
merge.top = merge.bottom = start != null ? start.y : intersect.center().y; merge.top = merge.bottom = start != null ? start.y : intersect.center().y;
Point p = new Point(merge.left, merge.top); Point p = new Point(merge.left, merge.top);
while(merge.top > intersect.top && n.canMerge(l, p, mergeTerrain) && r.canMerge(l, p, mergeTerrain)) { while(merge.top > intersect.top && n.canMerge(l, r, p, mergeTerrain) && r.canMerge(l, n, p, mergeTerrain)) {
merge.top--; merge.top--;
p.y--; p.y--;
} }
p.y = merge.bottom; p.y = merge.bottom;
while(merge.bottom < intersect.bottom && n.canMerge(l, p, mergeTerrain) && r.canMerge(l, p, mergeTerrain)) { while(merge.bottom < intersect.bottom && n.canMerge(l, r, p, mergeTerrain) && r.canMerge(l, n, p, mergeTerrain)) {
merge.bottom++; merge.bottom++;
p.y++; p.y++;
} }
@@ -334,12 +334,12 @@ public abstract class RegularPainter extends Painter {
merge.top = merge.bottom = intersect.top; merge.top = merge.bottom = intersect.top;
Point p = new Point(merge.left, merge.top); Point p = new Point(merge.left, merge.top);
while(merge.left > intersect.left && n.canMerge(l, p, mergeTerrain) && r.canMerge(l, p, mergeTerrain)) { while(merge.left > intersect.left && n.canMerge(l, r, p, mergeTerrain) && r.canMerge(l, n, p, mergeTerrain)) {
merge.left--; merge.left--;
p.x--; p.x--;
} }
p.x = merge.right; p.x = merge.right;
while(merge.right < intersect.right && n.canMerge(l, p, mergeTerrain) && r.canMerge(l, p, mergeTerrain)) { while(merge.right < intersect.right && n.canMerge(l, r, p, mergeTerrain) && r.canMerge(l, n, p, mergeTerrain)) {
merge.right++; merge.right++;
p.x++; p.x++;
} }
@@ -239,7 +239,7 @@ public abstract class Room extends Rect implements Graph.Node, Bundlable {
return false; return false;
} }
public boolean canMerge(Level l, Point p, int mergeTerrain){ public boolean canMerge(Level l, Room other, Point p, int mergeTerrain){
return false; return false;
} }
@@ -55,7 +55,7 @@ public class BridgeRoom extends TunnelRoom {
} }
@Override @Override
public boolean canMerge(Level l, Point p, int mergeTerrain) { public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) {
return mergeTerrain == Terrain.CHASM; return mergeTerrain == Terrain.CHASM;
} }
} }
@@ -52,7 +52,7 @@ public class RingBridgeRoom extends RingTunnelRoom {
} }
@Override @Override
public boolean canMerge(Level l, Point p, int mergeTerrain) { public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) {
return mergeTerrain == Terrain.CHASM; return mergeTerrain == Terrain.CHASM;
} }
} }
@@ -55,7 +55,7 @@ public class WalkwayRoom extends PerimeterRoom {
} }
@Override @Override
public boolean canMerge(Level l, Point p, int mergeTerrain) { public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) {
return mergeTerrain == Terrain.CHASM; return mergeTerrain == Terrain.CHASM;
} }
} }
@@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.sewerboss;
import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.StandardRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.StandardRoom;
import com.shatteredpixel.shatteredpixeldungeon.tiles.CustomTilemap; import com.shatteredpixel.shatteredpixeldungeon.tiles.CustomTilemap;
import com.watabou.noosa.Image; import com.watabou.noosa.Image;
@@ -38,7 +39,7 @@ public abstract class GooBossRoom extends StandardRoom {
} }
@Override @Override
public boolean canMerge(Level l, Point p, int mergeTerrain) { public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) {
return false; return false;
} }
@@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard;
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.painters.Painter; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
import com.shatteredpixel.shatteredpixeldungeon.levels.traps.BurningTrap; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.BurningTrap;
import com.watabou.utils.Point; import com.watabou.utils.Point;
import com.watabou.utils.Random; import com.watabou.utils.Random;
@@ -36,7 +37,7 @@ public class BurnedRoom extends PatchRoom {
} }
@Override @Override
public boolean canMerge(Level l, Point p, int mergeTerrain) { public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) {
int cell = l.pointToCell(pointInside(p, 1)); int cell = l.pointToCell(pointInside(p, 1));
return l.map[cell] == Terrain.EMPTY; return l.map[cell] == Terrain.EMPTY;
} }
@@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard;
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.painters.Painter; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
import com.watabou.utils.PathFinder; import com.watabou.utils.PathFinder;
import com.watabou.utils.Point; import com.watabou.utils.Point;
import com.watabou.utils.PointF; import com.watabou.utils.PointF;
@@ -49,7 +50,7 @@ public class CavesFissureRoom extends StandardRoom {
} }
@Override @Override
public boolean canMerge(Level l, Point p, int mergeTerrain) { public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) {
if (mergeTerrain == Terrain.CHASM) { if (mergeTerrain == Terrain.CHASM) {
return true; return true;
} else { } else {
@@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard;
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.painters.Painter; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
import com.watabou.utils.GameMath; import com.watabou.utils.GameMath;
import com.watabou.utils.Point; import com.watabou.utils.Point;
import com.watabou.utils.PointF; import com.watabou.utils.PointF;
@@ -43,8 +44,14 @@ public class HallwayRoom extends StandardRoom {
} }
@Override @Override
public boolean canMerge(Level l, Point p, int mergeTerrain) { public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) {
return false; return other instanceof HallwayRoom && super.canMerge(l, other, p, mergeTerrain);
}
@Override
public void merge(Level l, Room other, Rect merge, int mergeTerrain) {
super.merge(l, other, merge, mergeTerrain);
Painter.set(l, connected.get(other), Terrain.EMPTY_SP);
} }
//FIXME lots of copy-pasta from tunnel rooms here //FIXME lots of copy-pasta from tunnel rooms here
@@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard;
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.painters.Painter; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
import com.shatteredpixel.shatteredpixeldungeon.levels.traps.ExplosiveTrap; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.ExplosiveTrap;
import com.watabou.utils.PathFinder; import com.watabou.utils.PathFinder;
import com.watabou.utils.Point; import com.watabou.utils.Point;
@@ -37,7 +38,7 @@ public class MinefieldRoom extends StandardRoom {
} }
@Override @Override
public boolean canMerge(Level l, Point p, int mergeTerrain) { public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) {
int cell = l.pointToCell(pointInside(p, 1)); int cell = l.pointToCell(pointInside(p, 1));
return l.map[cell] == Terrain.EMPTY; return l.map[cell] == Terrain.EMPTY;
} }
@@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard;
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.painters.Painter; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
import com.watabou.utils.Point; import com.watabou.utils.Point;
public class RuinsRoom extends PatchRoom { public class RuinsRoom extends PatchRoom {
@@ -34,7 +35,7 @@ public class RuinsRoom extends PatchRoom {
} }
@Override @Override
public boolean canMerge(Level l, Point p, int mergeTerrain) { public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) {
return true; return true;
} }
@@ -52,7 +52,7 @@ public class SewerPipeRoom extends StandardRoom {
} }
@Override @Override
public boolean canMerge(Level l, Point p, int mergeTerrain) { public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) {
return false; return false;
} }
@@ -112,7 +112,7 @@ public abstract class StandardRoom extends Room {
} }
@Override @Override
public boolean canMerge(Level l, Point p, int mergeTerrain) { public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) {
int cell = l.pointToCell(pointInside(p, 1)); int cell = l.pointToCell(pointInside(p, 1));
return (Terrain.flags[l.map[cell]] & Terrain.SOLID) == 0; return (Terrain.flags[l.map[cell]] & Terrain.SOLID) == 0;
} }
@@ -53,11 +53,11 @@ public class EntranceRoom extends StandardRoom {
} }
@Override @Override
public boolean canMerge(Level l, Point p, int mergeTerrain) { public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) {
if (Dungeon.depth <= 2) { if (Dungeon.depth <= 2) {
return false; return false;
} else { } else {
return super.canMerge(l, p, mergeTerrain); return super.canMerge(l, other, p, mergeTerrain);
} }
} }