package net.mostlyoriginal.game.system.agent;
import com.artemis.Aspect;
import com.artemis.ComponentMapper;
import com.artemis.Entity;
import com.artemis.annotations.Wire;
import com.artemis.managers.TagManager;
import com.artemis.systems.EntityProcessingSystem;
import net.mostlyoriginal.api.component.basic.Bounds;
import net.mostlyoriginal.api.component.basic.Pos;
import net.mostlyoriginal.api.component.graphics.Anim;
import net.mostlyoriginal.api.system.physics.CollisionSystem;
import net.mostlyoriginal.game.component.agent.Clickable;
import net.mostlyoriginal.game.component.agent.Focusable;
/**
* Radiobutton selection of a single entity.
*
* @author Daan van Yperen
*/
@Wire
public class FocusableSystem extends EntityProcessingSystem {
ComponentMapper<Anim> am;
ComponentMapper<Clickable> cm;
ComponentMapper<Pos> pm;
CollisionSystem collisionSystem;
TagManager tagManager;
private Entity indicator;
public FocusableSystem() {
super(Aspect.getAspectForAll(Focusable.class, Clickable.class, Bounds.class, Pos.class));
}
@Override
protected void begin() {
indicator = tagManager.getEntity("indicator");
if ( !tagManager.isRegistered("focus")) {
am.get(indicator).visible = false;
}
}
@Override
protected void process(Entity e) {
Clickable clickable = cm.get(e);
if (clickable.clicked) {
// only render when main anim is visible.
if ( am.has(e) && !am.get(e).visible ) return;
tagManager.register("focus", e);
// move indicator to selected entity and make visible.
Pos ePos = pm.get(e);
Pos indicatorPos = pm.get(indicator);
indicatorPos.x = ePos.x-2;
indicatorPos.y = ePos.y-10;
am.get(indicator).visible = true;
}
}
}