//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 com.jme3.ai.agents.Agent; import com.jme3.ai.agents.behaviors.npc.SimpleMainBehavior; import com.jme3.ai.agents.behaviors.npc.steering.SeekBehavior; import com.jme3.math.ColorRGBA; import com.jme3.math.Vector3f; import steeringDemos.BasicDemo; import steeringDemos.control.CustomSteerControl; /** * Seek Demo * * @author Jesús Martín Berlanga * @version 1.0 */ public class SeekDemo extends BasicDemo { private Agent target; private SeekBehavior targetMove; private Vector3f[] locations = new Vector3f[]{ new Vector3f(7, 0, 0), new Vector3f(0, 7, 0), new Vector3f(0, 0, 7) }; private int currentFocus = -1; public static void main(String[] args) { SeekDemo app = new SeekDemo(); app.start(); } @Override public void simpleInitApp() { this.steerControl = new CustomSteerControl(9, 1); this.steerControl.setCameraSettings(getCamera()); this.steerControl.setFlyCameraSettings(getFlyByCamera()); //defining rootNode for brainsAppState processing brainsAppState.setApp(this); brainsAppState.setGameControl(new CustomSteerControl(5f)); target = this.createBoid("Target", this.targetColor, 0.11f); for (Vector3f loc : this.locations) { this.createSphereHelper("Sphere " + loc.toString(), ColorRGBA.Yellow, 0.05f, loc); } brainsAppState.addAgent(target); //Add the target to the brainsAppState brainsAppState.getGameControl().spawn(target, Vector3f.ZERO); this.setStats( target, this.targetMoveSpeed, this.targetRotationSpeed, this.targetMass, this.targetMaxForce); SimpleMainBehavior targetMainBehavior = new SimpleMainBehavior(target); this.targetMove = new SeekBehavior(target, this.locations[0]); this.currentFocus = 0; targetMainBehavior.addBehavior(this.targetMove); target.setMainBehavior(targetMainBehavior); brainsAppState.start(); } @Override public void simpleUpdate(float tpf) { brainsAppState.update(tpf); if (this.target.distanceFromPosition(this.locations[this.currentFocus]) < 0.01f) { this.currentFocus++; if (this.currentFocus > this.locations.length - 1) { this.currentFocus = 0; } this.targetMove.setSeekingPosition(this.locations[this.currentFocus]); } } }