package net.scapeemulator.game.model.player.skills.construction.hotspot; import java.util.ArrayList; import java.util.List; import net.scapeemulator.game.model.object.GroundObjectList.GroundObject; import net.scapeemulator.game.model.player.skills.Skill; import net.scapeemulator.game.model.player.skills.construction.Construction; import net.scapeemulator.game.model.player.skills.construction.House.BuildingSession; import net.scapeemulator.game.model.player.skills.construction.furniture.Furniture; import net.scapeemulator.game.model.player.skills.construction.furniture.FurnitureInterface; import net.scapeemulator.game.model.player.skills.construction.room.RoomPlaced; import net.scapeemulator.game.util.math.MutableInt; /** * @author David Insley */ public class HotspotGroup extends BuildableHotspot { private final HotspotGroupType type; private final List<FurnitureHotspot> hotspots; private final MutableInt furnitureIndex; public HotspotGroup(RoomPlaced room, HotspotGroupType type) { super(room, null); this.type = type; hotspots = new ArrayList<>(); furnitureIndex = new MutableInt(-1); } public void addHotspot(FurnitureHotspot hotspot) { hotspots.add(hotspot); } @Override public boolean matchesObject(GroundObject object) { for (FurnitureHotspot hotspot : hotspots) { if (hotspot.matchesObject(object)) { return true; } } return false; } @Override public void handleBuildInterface(BuildingSession session, int itemIndex) { session.getBuilder().getInterfaceSet().closeWindow(); FurnitureInterface inter = type.getSubType().getInterface(); int furnIdx = inter.getFurnitureIndex(itemIndex); Furniture furniture = type.getSubType().getFurniture(furnIdx); if (furniture != null) { if (furniture.getRequirements().hasRequirementsDisplayOne(session.getBuilder())) { furnitureIndex.set(furnIdx); furniture.getRequirements().fulfillAll(session.getBuilder()); session.getBuilder().playAnimation(Construction.BUILD_ANIM); session.getBuilder().getSkillSet().addExperience(Skill.CONSTRUCTION, furniture.getXp()); } else { furnitureIndex.set(-1); } } else { furnitureIndex.set(-1); } session.delayReveal(this); } @Override public void handleBuildOption(BuildingSession session) { if (furnitureIndex.value() != -1) { session.initFurnitureRemove(this); } else { type.getSubType().showFurnitureInterface(session.getBuilder()); session.setFurniturePlaceholder(this); } } @Override public void finishRemove(BuildingSession session) { session.getBuilder().playAnimation(Construction.REMOVE_ANIM); furnitureIndex.set(-1); for (FurnitureHotspot hotspot : hotspots) { hotspot.object.setId(hotspot.type.getHotspotId()); } } @Override public int value() { return furnitureIndex.value(); } @Override public void setValue(int value) { furnitureIndex.set(value); } @Override public void buildingMode(boolean building) { for (FurnitureHotspot hotspot : hotspots) { if (furnitureIndex.value() == -1) { if (!building) { hotspot.object.hide(); } else { hotspot.object.setId(hotspot.type.getHotspotId()); hotspot.object.reveal(); } } else { hotspot.object.setId(hotspot.type.getFurniture(furnitureIndex.value()).getObjectId(room)); hotspot.object.reveal(); } } } }