package net.scapeemulator.game.model.player.skills.construction.hotspot;
import java.util.List;
import net.scapeemulator.game.model.object.GroundObjectList.GroundObject;
import net.scapeemulator.game.model.player.Item;
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;
/**
* Represents a basic (no special attributes) single hotspot in a house.
*
* @author David Insley
*/
public class FurnitureHotspot extends BuildableHotspot {
protected final FurnitureHotspotType type;
protected final MutableInt furnitureIndex;
public FurnitureHotspot(RoomPlaced room, FurnitureHotspotType type, GroundObject object) {
super(room, object);
this.type = type;
this.furnitureIndex = new MutableInt(-1);
}
@Override
public void handleBuildInterface(BuildingSession session, int itemIndex) {
session.getBuilder().getInterfaceSet().closeWindow();
FurnitureInterface inter = type.getInterface();
int furnIdx = inter.getFurnitureIndex(itemIndex);
Furniture furniture = type.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);
}
public MutableInt getFurnIndex() {
return furnitureIndex;
}
public FurnitureHotspotType getType() {
return type;
}
@Override
public void handleBuildOption(BuildingSession session) {
if (furnitureIndex.value() != -1) {
session.initFurnitureRemove(this);
} else {
type.showFurnitureInterface(session.getBuilder());
session.setFurniturePlaceholder(this);
}
}
@Override
public void finishRemove(BuildingSession session) {
Furniture furniture = type.getFurniture(furnitureIndex.value());
List<Item> returnedItems = furniture.getReturnedItems();
if (returnedItems != null) {
if (session.getBuilder().getInventory().freeSlots() < returnedItems.size()) {
session.getBuilder().sendMessage("You do not have enough free inventory space to remove that.");
return;
}
for (Item item : returnedItems) {
session.getBuilder().getInventory().add(item);
}
}
session.getBuilder().playAnimation(Construction.REMOVE_ANIM);
furnitureIndex.set(-1);
object.setId(type.getHotspotId());
}
@Override
public void buildingMode(boolean building) {
if (furnitureIndex.value() == -1) {
if (!building) {
object.hide();
} else {
object.setId(type.getHotspotId());
object.reveal();
}
} else {
object.setId(type.getFurniture(furnitureIndex.value()).getObjectId(room));
object.reveal();
}
}
@Override
public void setValue(int value) {
furnitureIndex.set(value);
}
@Override
public int value() {
return furnitureIndex.value();
}
}