package net.mostlyoriginal.ns2d.system.active;
import com.artemis.Aspect;
import com.artemis.ComponentMapper;
import com.artemis.Entity;
import com.artemis.annotations.Wire;
import com.artemis.systems.EntityProcessingSystem;
import com.badlogic.gdx.math.Vector2;
import net.mostlyoriginal.ns2d.component.Aim;
import net.mostlyoriginal.ns2d.component.Anim;
import net.mostlyoriginal.ns2d.component.Pos;
import net.mostlyoriginal.ns2d.util.EntityUtil;
/**
* Aim (by rotation) at a target.
*
* @author Daan van Yperen
*/
@Wire
public class AimSystem extends EntityProcessingSystem {
private ComponentMapper<Aim> am;
private ComponentMapper<Anim> nm;
public AimSystem() {
super(Aspect.getAspectForAll(Aim.class, Pos.class, Anim.class));
}
Vector2 vTmp = new Vector2();
@Override
protected void process(Entity e) {
final Aim aim = am.get(e);
if ( aim.at != null )
{
if ( aim.at.isActive() )
{
aimAt(e, aim.at);
} else {
aim.at = null;
}
}
}
public void aimAt(Entity e, Entity at) {
nm.get(e).rotation = EntityUtil.angle(e, at);
}
}