//Copyright (c) 2014, Jesús Martín Berlanga. All rights reserved.
//Distributed under the BSD licence. Read "com/jme3/ai/license.txt".
package steeringDemos.demos;
import steeringDemos.control.CustomSteerControl;
import steeringDemos.BasicDemo;
import com.jme3.ai.agents.Agent;
import com.jme3.ai.agents.behaviors.npc.SimpleMainBehavior;
import com.jme3.ai.agents.behaviors.npc.steering.ArriveBehavior;
import com.jme3.ai.agents.behaviors.npc.steering.BalancedCompoundSteeringBehavior;
import com.jme3.math.ColorRGBA;
import com.jme3.math.Vector3f;
/**
* Demo for ArriveBehavior
*
* @author Jesús Martín Berlanga
* @version 2.0.0
*/
public class ArriveDemo extends BasicDemo {
private Agent[] agents = new Agent[3];
private Agent target;
private ArriveBehavior[] arrive;
public static void main(String[] args) {
ArriveDemo app = new ArriveDemo();
app.start();
}
@Override
public void simpleInitApp() {
this.steerControl = new CustomSteerControl(7, 50);
this.steerControl.setCameraSettings(getCamera());
this.steerControl.setFlyCameraSettings(getFlyByCamera());
brainsAppState.setApp(this);
brainsAppState.setGameControl(this.steerControl);
this.target = this.createSphere("target", ColorRGBA.Red, 0.25f);
brainsAppState.addAgent(target);
brainsAppState.getGameControl().spawn(target, new Vector3f());
for (int i = 0; i < this.agents.length; i++) {
agents[i] = this.createBoid("boid " + i, this.neighboursColor, 0.1f);
brainsAppState.addAgent(agents[i]); //Add the neighbours to the brainsAppState
this.setStats(agents[i], this.neighboursMoveSpeed,
this.neighboursRotationSpeed, this.neighboursMass,
this.neighboursMaxForce);
}
brainsAppState.getGameControl().spawn(agents[0], new Vector3f(-10, 0, 0));
brainsAppState.getGameControl().spawn(agents[1], new Vector3f(8, 0, 0));
brainsAppState.getGameControl().spawn(agents[2], new Vector3f(0, 50, 2));
arrive = new ArriveBehavior[3];
SimpleMainBehavior main0 = new SimpleMainBehavior(agents[0]);
SimpleMainBehavior main1 = new SimpleMainBehavior(agents[1]);
SimpleMainBehavior main2 = new SimpleMainBehavior(agents[2]);
arrive[0] = new ArriveBehavior(agents[0], target);
arrive[1] = new ArriveBehavior(agents[1], target);
arrive[2] = new ArriveBehavior(agents[2], target);
BalancedCompoundSteeringBehavior steer1 = new BalancedCompoundSteeringBehavior(agents[1]);
steer1.addSteerBehavior(arrive[1]);
main0.addBehavior(arrive[0]);
main1.addBehavior(steer1);
main2.addBehavior(arrive[2]);
agents[0].setMainBehavior(main0);
agents[1].setMainBehavior(main1);
agents[2].setMainBehavior(main2);
SimpleMainBehavior targetMain = new SimpleMainBehavior(target);
target.setMainBehavior(targetMain);
brainsAppState.start();
}
@Override
public void simpleUpdate(float tpf) {
brainsAppState.update(tpf);
for (int i = 0; i < this.arrive.length; i++) {
if (this.agents[i].distanceRelativeToGameEntity(target) <= 0.001f + target.getRadius()) {
Vector3f resetPosition = null;
switch (i) {
case 0:
resetPosition = new Vector3f(-10, 0, 0);
break;
case 1:
resetPosition = new Vector3f(8, 0, 0);
break;
case 2:
resetPosition = new Vector3f(0, 50, 2);
break;
}
this.agents[i].setLocalTranslation(resetPosition);
}
}
}
}