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

View File

@@ -310,12 +310,12 @@ public abstract class RegularPainter extends Painter {
merge.top = merge.bottom = start != null ? start.y : intersect.center().y;
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--;
p.y--;
}
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++;
p.y++;
}
@@ -334,12 +334,12 @@ public abstract class RegularPainter extends Painter {
merge.top = merge.bottom = intersect.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--;
p.x--;
}
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++;
p.x++;
}

View File

@@ -239,7 +239,7 @@ public abstract class Room extends Rect implements Graph.Node, Bundlable {
return false;
}
public boolean canMerge(Level l, Point p, int mergeTerrain){
public boolean canMerge(Level l, Room other, Point p, int mergeTerrain){
return false;
}

View File

@@ -55,7 +55,7 @@ public class BridgeRoom extends TunnelRoom {
}
@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;
}
}

View File

@@ -52,7 +52,7 @@ public class RingBridgeRoom extends RingTunnelRoom {
}
@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;
}
}

View File

@@ -55,7 +55,7 @@ public class WalkwayRoom extends PerimeterRoom {
}
@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;
}
}

View File

@@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.sewerboss;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
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.tiles.CustomTilemap;
import com.watabou.noosa.Image;
@@ -38,7 +39,7 @@ public abstract class GooBossRoom extends StandardRoom {
}
@Override
public boolean canMerge(Level l, Point p, int mergeTerrain) {
public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) {
return false;
}

View File

@@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard;
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.traps.BurningTrap;
import com.watabou.utils.Point;
import com.watabou.utils.Random;
@@ -36,7 +37,7 @@ public class BurnedRoom extends PatchRoom {
}
@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));
return l.map[cell] == Terrain.EMPTY;
}

View File

@@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard;
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.watabou.utils.PathFinder;
import com.watabou.utils.Point;
import com.watabou.utils.PointF;
@@ -49,7 +50,7 @@ public class CavesFissureRoom extends StandardRoom {
}
@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) {
return true;
} else {

View File

@@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard;
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.watabou.utils.GameMath;
import com.watabou.utils.Point;
import com.watabou.utils.PointF;
@@ -43,8 +44,14 @@ public class HallwayRoom extends StandardRoom {
}
@Override
public boolean canMerge(Level l, Point p, int mergeTerrain) {
return false;
public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) {
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

View File

@@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard;
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.traps.ExplosiveTrap;
import com.watabou.utils.PathFinder;
import com.watabou.utils.Point;
@@ -37,7 +38,7 @@ public class MinefieldRoom extends StandardRoom {
}
@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));
return l.map[cell] == Terrain.EMPTY;
}

View File

@@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard;
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.watabou.utils.Point;
public class RuinsRoom extends PatchRoom {
@@ -34,7 +35,7 @@ public class RuinsRoom extends PatchRoom {
}
@Override
public boolean canMerge(Level l, Point p, int mergeTerrain) {
public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) {
return true;
}

View File

@@ -52,7 +52,7 @@ public class SewerPipeRoom extends StandardRoom {
}
@Override
public boolean canMerge(Level l, Point p, int mergeTerrain) {
public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) {
return false;
}

View File

@@ -112,7 +112,7 @@ public abstract class StandardRoom extends Room {
}
@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));
return (Terrain.flags[l.map[cell]] & Terrain.SOLID) == 0;
}

View File

@@ -53,11 +53,11 @@ public class EntranceRoom extends StandardRoom {
}
@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) {
return false;
} else {
return super.canMerge(l, p, mergeTerrain);
return super.canMerge(l, other, p, mergeTerrain);
}
}