//Copyright (c) 2014, Jesús Martín Berlanga. All rights reserved. Distributed under the BSD licence. Read "com/jme3/ai/license.txt". package steeringDemos; import steeringDemos.control.CustomSteerControl; import com.jme3.ai.agents.Agent; import com.jme3.ai.agents.util.control.Game; import com.jme3.app.SimpleApplication; import com.jme3.material.Material; import com.jme3.material.RenderState; import com.jme3.math.ColorRGBA; import com.jme3.math.Vector3f; import com.jme3.renderer.queue.RenderQueue; import com.jme3.scene.Geometry; import com.jme3.scene.Spatial; import com.jme3.scene.shape.Box; import com.jme3.scene.shape.Sphere; /** * Provides the basic structure for all the demos * * @author Jesús Martín Berlanga */ public abstract class BasicDemo extends SimpleApplication { protected CustomSteerControl steerControl; protected Game game = Game.getInstance(); //creating game private static final String BOID_MODEL_NAME = "Models/boid.j3o"; private static final float BOID_MODEL_SIZE = 0.1f; private static final String BOID_MATERIAL_NAME = "Common/MatDefs/Misc/Unshaded.j3md"; protected ColorRGBA targetColor = ColorRGBA.Red; protected float targetMoveSpeed = 1f; protected float targetRotationSpeed = 30; protected float targetMass = 50; protected float targetMaxForce = 20; protected ColorRGBA neighboursColor = ColorRGBA.Blue; protected float neighboursMoveSpeed = 0.96f; protected float neighboursRotationSpeed = 30; protected float neighboursMass = 50; protected float neighboursMaxForce = 20; protected int numberNeighbours; //Create an agent with a name and a color protected Agent createBoid(String name, ColorRGBA color, float size) { Spatial boidSpatial = assetManager.loadModel(BasicDemo.BOID_MODEL_NAME); boidSpatial.setLocalScale(BasicDemo.BOID_MODEL_SIZE); //Resize Material mat = new Material(assetManager, BasicDemo.BOID_MATERIAL_NAME); mat.setColor("Color", color); boidSpatial.setMaterial(mat); return new Agent(name, boidSpatial, size); } //Create a sphere protected Agent createSphere(String name, ColorRGBA color, float size) { Sphere sphere = new Sphere(13, 12, size); Geometry sphereG = new Geometry("Sphere Geometry", sphere); Spatial spatial = sphereG; Material mat = new Material(assetManager, BasicDemo.BOID_MATERIAL_NAME); mat.setColor("Color", color); spatial.setMaterial(mat); return new Agent(name, spatial, size); } protected void createSphereHelper(String name, ColorRGBA color, float size, Vector3f loc) { Sphere sphere = new Sphere(13, 12, size); Geometry sphereG = new Geometry("Sphere Geometry", sphere); Spatial spatial = sphereG; Material mat = new Material(assetManager, BasicDemo.BOID_MATERIAL_NAME); mat.setColor("Color", color); spatial.setMaterial(mat); sphereG.setLocalTranslation(loc); rootNode.attachChild(sphereG); } protected void addBoxHelper(Vector3f center, float x, float y, float z) { Box box = new Box(center, x, y, z); Geometry geom = new Geometry("A shape", box); // wrap shape into geometry Geometry geomWire = new Geometry("A shape", box); Material matTranslucid = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); matTranslucid.setColor("Color", new ColorRGBA(0,1,0,0.17f)); matTranslucid.getAdditionalRenderState().setBlendMode(RenderState.BlendMode.Alpha); geom.setQueueBucket(RenderQueue.Bucket.Translucent); geom.setMaterial(matTranslucid); Material wireMat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); wireMat.setColor("Color", new ColorRGBA(0,1,0,0.25f)); geomWire.setMaterial(wireMat); wireMat.getAdditionalRenderState().setWireframe(true); rootNode.attachChild(geom); rootNode.attachChild(geomWire); } //Setup the stats for an agent protected void setStats(Agent myAgent, float moveSpeed, float rotationSpeed, float mass, float maxForce) { myAgent.setMoveSpeed(moveSpeed); myAgent.setRotationSpeed(rotationSpeed); myAgent.setMass(mass); myAgent.setMaxForce(maxForce); } }