v2.4.0: improved merging behavior for hallway rooms
This commit is contained in:
@@ -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++;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user