From aa66004a4aeee6a81cf7c22eb9c097053c179130 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Fri, 19 May 2017 03:04:17 -0400 Subject: [PATCH] v0.6.0: implemented CaveRoom --- .../levels/painters/CavesPainter.java | 7 ++- .../levels/rooms/standard/CaveRoom.java | 62 +++++++++++++++++++ 2 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/CaveRoom.java diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/painters/CavesPainter.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/painters/CavesPainter.java index c80bd8fa1..51f60bdef 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/painters/CavesPainter.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/painters/CavesPainter.java @@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.Level; 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.standard.CaveRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.EmptyRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.StandardRoom; import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTileSheet; @@ -43,7 +44,7 @@ public class CavesPainter extends RegularPainter { int[] map = level.map; for (Room room : rooms) { - if (!(room instanceof EmptyRoom)) { + if (!(room instanceof EmptyRoom || room instanceof CaveRoom)) { continue; } @@ -122,9 +123,9 @@ public class CavesPainter extends RegularPainter { } for (Room r : rooms) { - if (r instanceof StandardRoom) { + if (r instanceof EmptyRoom) { for (Room n : r.neigbours) { - if (n instanceof StandardRoom && !r.connected.containsKey( n )) { + if (n instanceof EmptyRoom && !r.connected.containsKey( n )) { Rect i = r.intersect( n ); if (i.left == i.right && i.bottom - i.top >= 5) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/CaveRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/CaveRoom.java new file mode 100644 index 000000000..766565e5d --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/CaveRoom.java @@ -0,0 +1,62 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * Shattered Pixel Dungeon + * Copyright (C) 2014-2017 Evan Debenham + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ + +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; + +public class CaveRoom extends PatchRoom { + + @Override + public float[] sizeCatProbs() { + return new float[]{6, 3, 1}; + } + + @Override + public void paint(Level level) { + Painter.fill( level, this, Terrain.WALL ); + Painter.fill( level, this, 1 , Terrain.EMPTY ); + for (Door door : connected.values()) { + door.set( Door.Type.REGULAR ); + } + + //fill scales from ~25% at 4x4, to ~55% at 18x18 + // normal ~25% to ~35% + // large ~35% to ~45% + // giant ~45% to ~55% + float fill = 0.25f + (width()*height())/1024f; + + setupPatch(level, fill, 4, true); + cleanDiagonalEdges(); + + for (int i = top + 1; i < bottom; i++) { + for (int j = left + 1; j < right; j++) { + if (patch[xyToPatchCoords(j, i)]) { + int cell = i * level.width() + j; + level.map[cell] = Terrain.WALL; + } + } + } + } + +}