package org.codecranachan.asteroidpush.content.behaviors;
import java.util.Collection;
import java.util.LinkedList;
import org.codecranachan.asteroidpush.base.input.ControlItem;
import org.codecranachan.asteroidpush.base.input.Controller;
import org.codecranachan.asteroidpush.base.simulation.InteractionHandler;
import org.codecranachan.asteroidpush.base.simulation.RigidBody;
import org.codecranachan.asteroidpush.base.simulation.command.Command;
import org.codecranachan.asteroidpush.base.visuals.Representation;
import org.codecranachan.asteroidpush.base.workshop.actor.Behavior;
public class TorqueFeederBehavior implements Behavior, InteractionHandler {
private float torque;
private RigidBody currentBody;
private Controller controller;
public TorqueFeederBehavior(float torque) {
this.torque = torque;
this.currentBody = null;
}
public Collection<Command> update(int frame) {
if (controller != null && currentBody != null) {
float factor = controlMagnitude(frame);
currentBody.applyTorque(factor * torque);
}
return new LinkedList<Command>();
}
private float controlMagnitude(int frame) {
return controller.getControl(ControlItem.ROTATE_COUNTERCLOCKWISE, frame)
- controller.getControl(ControlItem.ROTATE_CLOCKWISE, frame);
}
public void onDetach(RigidBody body, int index) {
assert index == 0;
assert body == currentBody;
currentBody = null;
}
public void onAttach(RigidBody body, int index) {
assert index == 0;
assert currentBody == null;
currentBody = body;
}
public Collection<Representation> getRepresentations() {
Collection<Representation> reps = new LinkedList<Representation>();
return reps;
}
public void setController(Controller controller, int index) {
assert index == 0;
this.controller = controller;
}
}