package net.alcuria.umbracraft.engine.scripts; import java.util.Set; import net.alcuria.umbracraft.Game; import net.alcuria.umbracraft.definitions.ListDefinition; import net.alcuria.umbracraft.definitions.entity.EntityDefinition; import net.alcuria.umbracraft.editor.Editor; import net.alcuria.umbracraft.engine.entities.Entity; import net.alcuria.umbracraft.engine.events.CameraTargetEvent; import net.alcuria.umbracraft.util.StringUtils; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.ObjectMap; /** A {@link ScriptCommand} to target the camera to a particular entity. * @author Andrew Keturi */ public class CameraTargetScriptCommand extends ScriptCommand { public String name = ""; public float x, y; public CameraTargetScriptCommand() { } @Override public CameraTargetScriptCommand copy() { CameraTargetScriptCommand command = new CameraTargetScriptCommand(); command.name = name; command.x = x; command.y = y; return command; } @Override public Set<String> getFilter() { return null; } @Override public String getName() { return String.format("Camera Operations: %s, %f, %f", name, x, y); } @Override public ObjectMap<String, Array<String>> getSuggestions() { return new ObjectMap<String, Array<String>>() { { put("name", new Array<String>() { { final ListDefinition<EntityDefinition> entities = Editor.db().entities(); for (String key : entities.keys()) { add(entities.get(key).getName()); } } }); } }; } @Override public void onCompleted() { } @Override public void onStarted(Entity entity) { if (StringUtils.isNotEmpty(name)) { Entity target = Game.entities().find(name); if (target != null) { Game.view().pan(0, 0); Game.publisher().publish(new CameraTargetEvent(target)); } else { Game.log("Entity not found: " + name + ". Cannot target."); } } else { Game.view().pan(x, y); } complete(); } @Override public void update() { } }