package com.cookbook.ashley;
import com.badlogic.ashley.core.ComponentMapper;
import com.badlogic.ashley.core.Entity;
import com.badlogic.ashley.core.Family;
import com.badlogic.ashley.systems.IteratingSystem;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Buttons;
import com.badlogic.gdx.graphics.Camera;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.math.Vector3;
public class UserControlledSystem extends IteratingSystem {
private ComponentMapper<MovementComponent> mm = ComponentMapper.getFor(MovementComponent.class);
private ComponentMapper<TransformComponent> tm = ComponentMapper.getFor(TransformComponent.class);
private Vector2 src;
private Vector3 dest;
private Camera camera;
public UserControlledSystem(Camera camera) {
super(Family.all(TransformComponent.class, MovementComponent.class, UserControlledComponent.class).get());
src = new Vector2();
dest = new Vector3();
this.camera = camera;
}
@Override
public void processEntity(Entity entity, float deltaTime) {
MovementComponent movement = mm.get(entity);
TransformComponent transform = tm.get(entity);
if(Gdx.input.isButtonPressed(Buttons.LEFT)) {
camera.unproject(dest.set(Gdx.input.getX(), Gdx.input.getY(),0));
src.set(transform.pos);
dest.sub(src.x, src.y, 0).nor();
movement.velocity.set(dest.x, dest.y).scl(3f);
}
else
movement.velocity.setZero();
}
}