/* author: Louis Hugues - created on 21 janv. 2005 */
package simbad.sim;
import java.util.ArrayList;
/**
*
*/
public class Plan {
Agent agent;
ArrayList<Movement> actions;
int state, count;
private class Transition {
int nextState, steps;
Transition(int steps, int nextState) {
this.nextState = nextState;
this.steps = steps;
}
void doStep() { }
}
private class Movement extends Transition {
double rvel, tvel;
Movement(double t, double r, int steps, int nextState) {
super(steps, nextState);
tvel = t;
rvel = r;
}
void doStep() {
agent.setTranslationalVelocity(tvel);
agent.setRotationalVelocity(rvel);
}
}
public Plan(Agent agent) {
this.agent = agent;
actions = new ArrayList<Movement>();
state = 0;
count = 0;
}
public void reset() {
state = 0;
Transition t = (Transition) actions.get(state);
count = t.steps;
}
public void turn(double angle, double duration) {
float fps=20; //TODO
actions.add(new Movement(0,angle/duration,(int)(duration*fps), actions.size()+1));
}
public void forward(double distance, double duration) {
float fps=20; //TODO
actions.add(new Movement(distance/duration,0,(int)(duration*fps), actions.size()+1));
}
public void loop() {
((Transition) actions.get(actions.size()-1)).nextState = 0;
}
public void doStep() {
if ((state>=actions.size())|| (count <=0)) return;
Transition t = (Transition) actions.get(state);
t.doStep();
count--;
if (count == 0) {
state = t.nextState;
count = t.steps;
}
}
}