package org.codecranachan.asteroidpush.content.behaviors;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import org.codecranachan.asteroidpush.base.input.Controller;
import org.codecranachan.asteroidpush.base.simulation.DynamicJoint;
import org.codecranachan.asteroidpush.base.simulation.DynamicJointFactory;
import org.codecranachan.asteroidpush.base.simulation.PrismaticJointData;
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 PrismaticConstraintBehavior implements Behavior {
PrismaticJointData data;
List<RigidBody> bodies;
DynamicJoint joint;
public PrismaticConstraintBehavior(PrismaticJointData data) {
this.data = data;
bodies = new ArrayList<RigidBody>(2);
bodies.add(null);
bodies.add(null);
}
public Collection<Command> update(int frame) {
return new LinkedList<Command>();
}
public void onDetach(RigidBody body, int index) {
assert index == 0 || index == 1;
bodies.set(index, null);
if (joint != null) {
joint.destroy();
joint = null;
}
}
public void onAttach(RigidBody body, int index) {
assert index == 0 || index == 1;
assert body != null;
bodies.set(index, body);
if (bodies.get(0) != null && bodies.get(1) != null && bodies.get(0) != bodies.get(1)) {
DynamicJointFactory factory = body.getJointFactory();
joint = factory.createPrismaticJoint(bodies.get(0),
bodies.get(1),
data);
}
}
public Collection<Representation> getRepresentations() {
return new LinkedList<Representation>();
}
public void setController(Controller controller, int index) {
// This behavior is not controllable
}
}