//Copyright (c) 2014, Jesús Martín Berlanga. All rights reserved.
//Distributed under the BSD licence. Read "com/jme3/ai/license.txt".
package steeringDemos.control;
import com.jme3.ai.agents.Agent;
import com.jme3.ai.agents.util.GameEntity;
import com.jme3.ai.agents.util.control.MonkeyBrainsAppState;
import com.jme3.ai.agents.util.control.GameControl;
import com.jme3.input.FlyByCamera;
import com.jme3.math.FastMath;
import com.jme3.math.Vector3f;
import com.jme3.renderer.Camera;
/**
* Custom steer control.
*
* @author Jesús Martín Berlanga
* @version 1.3.1
*/
public class CustomSteerControl implements GameControl {
private float cameraMoveSpeed;
private float aleatoryFactorX, aleatoryFactorY, aleatoryFactorZ;
private MonkeyBrainsAppState brainsAppState = MonkeyBrainsAppState.getInstance();
/**
* There is no input mapping by default.
*/
public void setInputManagerMapping() {
//Void
}
public void setCameraSettings(Camera cam) {
cam.setLocation(new Vector3f(0, 20, 0));
cam.lookAt(Vector3f.ZERO, Vector3f.UNIT_X);
}
public void setFlyCameraSettings(FlyByCamera flyCam) {
flyCam.setMoveSpeed(this.cameraMoveSpeed);
}
public CustomSteerControl(float cameraMoveSpeed) {
this.cameraMoveSpeed = cameraMoveSpeed;
this.aleatoryFactorX = 10f;
this.aleatoryFactorY = 10f;
this.aleatoryFactorZ = 10f;
}
public CustomSteerControl(float cameraMoveSpeed, float aleatoryFactor) {
this.cameraMoveSpeed = cameraMoveSpeed;
this.aleatoryFactorX = aleatoryFactor;
this.aleatoryFactorY = aleatoryFactor;
this.aleatoryFactorZ = aleatoryFactor;
}
public CustomSteerControl(float cameraMoveSpeed, float aleatoryFactorX, float aleatoryFactorY, float aleatoryFactorZ) {
this.cameraMoveSpeed = cameraMoveSpeed;
this.aleatoryFactorX = aleatoryFactorX;
this.aleatoryFactorY = aleatoryFactorY;
this.aleatoryFactorZ = aleatoryFactorZ;
}
/**
* @see GameControl#finish()
*
* @return Always return false.
*/
public boolean finish() {
return false;
}
/**
* @see GameControl#win(com.jme3.ai.agents.Agent)
*
* @param agent
* @return Always return false.
*/
public boolean win(Agent agent) {
return false;
}
/**
* There is no restart.
*
* @see GameControl#restart()
*/
public void restart() {
//Void
}
/**
* Method for creating objects in given area.
*
* PRE: The area must be void or a point.
*
*
* @param gameEntity entity that should be created
* @param area Null for random location and a point for a stablished
* location.
*
* @see GameControl#spawn(com.jme3.ai.agents.util.GameEntity,
* com.jme3.math.Vector3f[])
*/
public void spawn(GameEntity gameEntity, Vector3f... area) {
if (area == null) {
//Random location
gameEntity.setLocalTranslation(
((float) ((FastMath.nextRandomFloat() * 2) - 1)) * this.aleatoryFactorX,
((float) ((FastMath.nextRandomFloat() * 2) - 1)) * this.aleatoryFactorY,
((float) ((FastMath.nextRandomFloat() * 2) - 1)) * this.aleatoryFactorZ);
} else if (area.length == 1) {
//Spawn in a point
gameEntity.setLocalTranslation(area[0]);
}
if (gameEntity instanceof Agent) {
brainsAppState.addAgent((Agent) gameEntity);
} else {
brainsAppState.addGameEntity(gameEntity);
}
}
}