package net.scapeemulator.game.model;
import net.scapeemulator.game.dispatcher.object.ObjectDispatcher;
import net.scapeemulator.game.dispatcher.object.ObjectHandler;
import net.scapeemulator.game.model.object.GroundObjectList.GroundObject;
import net.scapeemulator.game.model.player.Player;
import net.scapeemulator.game.model.player.action.ReachObjectAction;
import net.scapeemulator.game.util.HandlerContext;
/**
* @author David Insley
*/
public class Ladders {
private enum LadderType {
ANY_POS_DOWN(38222),
ANY_POS_UP(38221);
// 2113 = mining guild down (tele to 3019, 9739)
// 30941 = mining guild up , 2112 = door
private final int[] ids;
private LadderType(int ... ids) {
this.ids = ids;
}
static LadderType forId(int objectId) {
for (LadderType type : values()) {
for (int id : type.ids) {
if (id == objectId) {
return type;
}
}
}
return null;
}
}
public static void init() {
ObjectDispatcher.getInstance().bind(new LadderHandler());
}
private static class LadderHandler extends ObjectHandler {
public LadderHandler() {
super(Option.ONE);
}
@Override
public void handle(Player player, GroundObject object, String optionName, HandlerContext context) {
LadderType type = LadderType.forId(object.getId());
if (type != null) {
context.stop();
player.startAction(new UseLadderAction(player, type, object));
}
}
}
private static class UseLadderAction extends ReachObjectAction {
private final LadderType type;
public UseLadderAction(Player player, LadderType type, GroundObject object) {
super(1, true, player, object, 1, false);
this.type = type;
}
@Override
public void executeAction() {
switch (type) {
case ANY_POS_DOWN:
mob.teleport(mob.getPosition().copy(0, 0, -1));
stop();
break;
case ANY_POS_UP:
mob.teleport(mob.getPosition().copy(0, 0, 1));
stop();
break;
}
}
}
}