package net.scapeemulator.game.model.player.skills.construction.room; import java.util.List; import net.scapeemulator.game.model.Position; import net.scapeemulator.game.model.World; import net.scapeemulator.game.model.object.GroundObjectList.GroundObject; import net.scapeemulator.game.model.object.ObjectGroup; import net.scapeemulator.game.model.player.skills.construction.hotspot.FurnitureHotspotType; /** * @author David Insley */ public enum RoomType { /* @formatter:off */ NONE(0, -1, -1, -1, false, -1, ValidBuild.NONE), GRASS(1, 0, 1864, 5056, false, -1, ValidBuild.NONE), PARLOUR(2, 1, 1856, 5112, 160, ValidBuild.ANY), GARDEN(3, 1, 1856, 5064, false, 161, ValidBuild.GROUND_ONLY), KITCHEN(4, 5, 1872, 5112, 162, ValidBuild.ANY), DINING_ROOM(5, 10, 1888, 5112, 163, ValidBuild.ANY), WORKSHOP(6, 15, 1856, 5096, 164, ValidBuild.ANY), BEDROOM(7, 20, 1904, 5112, 165, ValidBuild.ANY), SKILL_HALL(8, 25, 1864, 5104, 166, ValidBuild.ANY), SKILL_HALL_DOWN(29, 25, 1880, 5104, -1, ValidBuild.ANY), GAMES_ROOM(10, 30, 1896, 5088, 167, ValidBuild.ANY), COMBAT_ROOM(11, 32, 1880, 5088, 168, ValidBuild.ANY), QUEST_HALL(12, 35, 1896, 5104, 169, ValidBuild.ANY), QUEST_HALL_DOWN(28, 35, 1912, 5104, -1, ValidBuild.ANY), STUDY(13, 40, 1888, 5096, 170, ValidBuild.ANY), COSTUME_ROOM(14, 42, 1904, 5064, 171, ValidBuild.ANY), CHAPEL(15, 45, 1872, 5096, 172, ValidBuild.ANY), PORTAL_CHAMBER(16, 50, 1864, 5088, 173, ValidBuild.ANY), FORMAL_GARDEN(17, 55, 1872, 5064, false, 174, ValidBuild.GROUND_ONLY), THRONE_ROOM(18, 60, 1904, 5096, 175, ValidBuild.GROUND_ONLY), DUNGEON_CLEAR(19, 0, 1880, 5056, -1, ValidBuild.DUNGEON_ONLY), OUBLIETTE(20, 65, 1904, 5080, 176, ValidBuild.DUNGEON_ONLY), DUNGEON_CORRIDOR(21, 70, 1888, 5080, 177, ValidBuild.DUNGEON_ONLY), DUNGEON_JUNCTION(22, 70, 1856, 5080, 178, ValidBuild.DUNGEON_ONLY), DUNGEON_STAIRS(23, 70, 1872, 5080, 179, ValidBuild.DUNGEON_ONLY), TREASURE_ROOM(24, 75, 1912, 5088, 180, ValidBuild.DUNGEON_ONLY), ROOF(25, 0, 1864, 5072, -1, ValidBuild.NONE), ROOF_TRI(26, 0, 1880, 5072, -1, ValidBuild.NONE), ROOF_QUAD(27, 0, 1896, 5072, -1, ValidBuild.NONE); /* @formatter:on */ private enum ValidBuild { NONE, DUNGEON_ONLY, ANY, GROUND_ONLY } private final int id; private final int srcX; private final int srcY; private final boolean solid; private final int interfaceId; private final ValidBuild validBuild; private final GroundObject[][][] hotspots; private RoomType(int id, int level, int srcX, int srcY, int interfaceId, ValidBuild validBuild) { this(id, level, srcX, srcY, true, interfaceId, validBuild); } private RoomType(int id, int level, int srcX, int srcY, boolean solid, int interfaceId, ValidBuild validBuild) { this.id = id; this.srcX = srcX; this.srcY = srcY; this.solid = solid; this.interfaceId = interfaceId; this.validBuild = validBuild; hotspots = new GroundObject[Room.ROOM_SIZE][Room.ROOM_SIZE][ObjectGroup.values().length]; for (int roomX = 0; roomX < Room.ROOM_SIZE; roomX++) { for (int roomY = 0; roomY < Room.ROOM_SIZE; roomY++) { List<GroundObject> objs = World.getWorld().getGroundObjects().getAll(new Position(srcX + roomX, srcY + roomY, 0)); if (objs != null) { for (GroundObject obj : objs) { int group = obj.getType().getObjectGroup().getId(); FurnitureHotspotType type = FurnitureHotspotType.forObjectId(obj.getId()); if (type != null) { hotspots[roomX][roomY][group] = obj; } } } } } } public static RoomType forId(int id) { for (RoomType type : values()) { if (type.id == id) { return type; } } return null; } public static RoomType forInterfaceId(int interfaceId) { if (interfaceId < 160 || interfaceId > 180) { return null; } for (RoomType type : values()) { if (type.interfaceId == interfaceId) { return type; } } return null; } public int getId() { return id; } public int getX() { return srcX; } public int getY() { return srcY; } public boolean isSolid() { return solid; } public boolean validBuild(int height) { switch (validBuild) { case ANY: return height <= 2; case DUNGEON_ONLY: return height == 0; case GROUND_ONLY: return height == 1; default: return false; } } public GroundObject[] getHotspotObjs(int x, int y) { return hotspots[x][y]; } }