package net.alcuria.umbracraft.engine.scripts;
import java.util.Set;
import net.alcuria.umbracraft.Game;
import net.alcuria.umbracraft.annotations.IgnorePopulate;
import net.alcuria.umbracraft.annotations.Tooltip;
import net.alcuria.umbracraft.editor.Editor;
import net.alcuria.umbracraft.engine.entities.Entity;
import net.alcuria.umbracraft.engine.events.MapChangedEvent;
import net.alcuria.umbracraft.engine.events.TintScreenEvent;
import net.alcuria.umbracraft.listeners.Listener;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.ObjectMap;
/** A {@link ScriptCommand} to teleport a user to another area
* @author Andrew Keturi */
public class TeleportScriptCommand extends ScriptCommand {
@Tooltip("The name of the area we want to teleport to")
public String area = "";
@IgnorePopulate
private final float FADE_TIME = 0.5f;
@Tooltip("The node within the area we want to teleport to")
public String node = "";
@Tooltip("The x coordinate")
public int x;
@Tooltip("The y coordinate")
public int y;
public TeleportScriptCommand() {
}
public TeleportScriptCommand(final String area, final String node) {
this.area = area;
this.node = node;
}
@Override
public ScriptCommand copy() {
TeleportScriptCommand cmd = new TeleportScriptCommand(area, node);
cmd.x = x;
cmd.y = y;
return cmd;
}
@Override
public Set<String> getFilter() {
return null;
}
@Override
public String getName() {
return String.format("Teleport: %s - %s (%d, %d)", area, node, x, y);
}
@Override
public ObjectMap<String, Array<String>> getSuggestions() {
return new ObjectMap<String, Array<String>>() {
{
put("area", Editor.db().areas().keys());
if (Editor.db().area(area) != null) {
put("node", Editor.db().area(area).getNodeNames());
}
}
};
}
@Override
public void onCompleted() {
}
@Override
public void onStarted(Entity entity) {
Game.view().pan(0, 0);
Game.publisher().publish(new TintScreenEvent(1, FADE_TIME, new Listener() {
@Override
public void invoke() {
Game.publisher().publish(new MapChangedEvent(area, node, x, y));
Game.publisher().publish(new TintScreenEvent(0, FADE_TIME, new Listener() {
@Override
public void invoke() {
complete();
}
}));
}
}));
}
@Override
public void update() {
}
}