Work on goblin enemy
This commit is contained in:
parent
c2380b0bdc
commit
841add17c6
@ -12,8 +12,8 @@
|
|||||||
"graphicsPerformanceEnableVSync" : false,
|
"graphicsPerformanceEnableVSync" : false,
|
||||||
"graphicsPerformanceDrawShadows" : true,
|
"graphicsPerformanceDrawShadows" : true,
|
||||||
|
|
||||||
"graphicsDebugDrawCollisionSpheres" : true,
|
"graphicsDebugDrawCollisionSpheres" : false,
|
||||||
"graphicsDebugDrawPhysicsObjects" : true,
|
"graphicsDebugDrawPhysicsObjects" : false,
|
||||||
"graphicsDebugDrawMovementVectors" : false,
|
"graphicsDebugDrawMovementVectors" : false,
|
||||||
"graphicsDebugDrawNavmesh" : false
|
"graphicsDebugDrawNavmesh" : false
|
||||||
|
|
||||||
|
|||||||
@ -90,7 +90,22 @@
|
|||||||
{
|
{
|
||||||
"type" : "GROUND",
|
"type" : "GROUND",
|
||||||
"acceleration" : 16.0,
|
"acceleration" : 16.0,
|
||||||
"maxVelocity" : 3.0
|
"maxVelocity" : 3.0,
|
||||||
|
"animationStartup" : {
|
||||||
|
"name" : "Armature|WalkStart",
|
||||||
|
"length" : 1,
|
||||||
|
"loops" : false
|
||||||
|
},
|
||||||
|
"animationLoop" : {
|
||||||
|
"name" : "Armature|Walk",
|
||||||
|
"length" : 1,
|
||||||
|
"loops" : false
|
||||||
|
},
|
||||||
|
"animationWindDown" : {
|
||||||
|
"name" : "Armature|WalkStart",
|
||||||
|
"length" : 1,
|
||||||
|
"loops" : false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"collidable" : {
|
"collidable" : {
|
||||||
@ -214,8 +229,23 @@
|
|||||||
"movementSystems" : [
|
"movementSystems" : [
|
||||||
{
|
{
|
||||||
"type" : "GROUND",
|
"type" : "GROUND",
|
||||||
"acceleration" : 0.001,
|
"acceleration" : 13.0,
|
||||||
"maxVelocity" : 0.025
|
"maxVelocity" : 2.8,
|
||||||
|
"animationStartup" : {
|
||||||
|
"name" : "Walk",
|
||||||
|
"length" : 1,
|
||||||
|
"loops" : false
|
||||||
|
},
|
||||||
|
"animationLoop" : {
|
||||||
|
"name" : "Walk",
|
||||||
|
"length" : 1,
|
||||||
|
"loops" : false
|
||||||
|
},
|
||||||
|
"animationWindDown" : {
|
||||||
|
"name" : "Armature|WalkForwardStart",
|
||||||
|
"length" : 1,
|
||||||
|
"loops" : false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"collidable" : {
|
"collidable" : {
|
||||||
|
|||||||
Binary file not shown.
@ -15,6 +15,8 @@ import org.lwjgl.openal.ALC;
|
|||||||
//import org.lwjgl.openal.*;
|
//import org.lwjgl.openal.*;
|
||||||
import org.lwjgl.openal.ALC10;
|
import org.lwjgl.openal.ALC10;
|
||||||
import org.lwjgl.openal.ALCCapabilities;
|
import org.lwjgl.openal.ALCCapabilities;
|
||||||
|
import static org.lwjgl.openal.ALC10.alcDestroyContext;
|
||||||
|
import static org.lwjgl.openal.ALC10.alcCloseDevice;
|
||||||
import static org.lwjgl.system.MemoryUtil.NULL;
|
import static org.lwjgl.system.MemoryUtil.NULL;
|
||||||
|
|
||||||
public class AudioEngine {
|
public class AudioEngine {
|
||||||
@ -70,8 +72,8 @@ public class AudioEngine {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void shutdown(){
|
public void shutdown(){
|
||||||
ALC10.alcDestroyContext(context);
|
alcDestroyContext(context);
|
||||||
ALC10.alcCloseDevice(device);
|
alcCloseDevice(device);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -241,7 +241,7 @@ public class ControlHandler {
|
|||||||
*/
|
*/
|
||||||
if(controls.containsKey(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD)){
|
if(controls.containsKey(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD)){
|
||||||
if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD).isIsKey() && glfwGetKey(Globals.window, controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD).getKeyValue()) == GLFW_PRESS){
|
if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD).isIsKey() && glfwGetKey(Globals.window, controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD).getKeyValue()) == GLFW_PRESS){
|
||||||
Vector3f newFacingVector = new Vector3f(-cameraEyeVector.x,0,-cameraEyeVector.z).normalize();
|
Vector3d newFacingVector = new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).normalize();
|
||||||
CreatureUtils.setMovementVector(Globals.playerCharacter, newFacingVector);
|
CreatureUtils.setMovementVector(Globals.playerCharacter, newFacingVector);
|
||||||
// System.out.println("Movement vector: " + newFacingVector);
|
// System.out.println("Movement vector: " + newFacingVector);
|
||||||
if(movementTree.getState()==MovementTreeState.IDLE || movementTree.getState()==MovementTreeState.SLOWDOWN){
|
if(movementTree.getState()==MovementTreeState.IDLE || movementTree.getState()==MovementTreeState.SLOWDOWN){
|
||||||
@ -270,7 +270,7 @@ public class ControlHandler {
|
|||||||
*/
|
*/
|
||||||
if(controls.containsKey(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD)){
|
if(controls.containsKey(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD)){
|
||||||
if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD).isIsKey() && glfwGetKey(Globals.window, controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD).getKeyValue()) == GLFW_PRESS){
|
if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD).isIsKey() && glfwGetKey(Globals.window, controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD).getKeyValue()) == GLFW_PRESS){
|
||||||
CreatureUtils.setMovementVector(Globals.playerCharacter, new Vector3f(cameraEyeVector.x,0,cameraEyeVector.z).normalize());
|
CreatureUtils.setMovementVector(Globals.playerCharacter, new Vector3d(cameraEyeVector.x,0,cameraEyeVector.z).normalize());
|
||||||
if(movementTree.getState()==MovementTreeState.IDLE || movementTree.getState()==MovementTreeState.SLOWDOWN){
|
if(movementTree.getState()==MovementTreeState.IDLE || movementTree.getState()==MovementTreeState.SLOWDOWN){
|
||||||
movementTree.start();
|
movementTree.start();
|
||||||
}
|
}
|
||||||
@ -297,7 +297,7 @@ public class ControlHandler {
|
|||||||
*/
|
*/
|
||||||
if(controls.containsKey(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT)){
|
if(controls.containsKey(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT)){
|
||||||
if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT).isIsKey() && glfwGetKey(Globals.window, controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT).getKeyValue()) == GLFW_PRESS){
|
if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT).isIsKey() && glfwGetKey(Globals.window, controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT).getKeyValue()) == GLFW_PRESS){
|
||||||
CreatureUtils.setMovementVector(Globals.playerCharacter, new Vector3f(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY((float)(90 * Math.PI / 180)).normalize());
|
CreatureUtils.setMovementVector(Globals.playerCharacter, new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY((float)(90 * Math.PI / 180)).normalize());
|
||||||
if(movementTree.getState()==MovementTreeState.IDLE || movementTree.getState()==MovementTreeState.SLOWDOWN){
|
if(movementTree.getState()==MovementTreeState.IDLE || movementTree.getState()==MovementTreeState.SLOWDOWN){
|
||||||
movementTree.start();
|
movementTree.start();
|
||||||
}
|
}
|
||||||
@ -324,7 +324,7 @@ public class ControlHandler {
|
|||||||
*/
|
*/
|
||||||
if(controls.containsKey(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT)){
|
if(controls.containsKey(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT)){
|
||||||
if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT).isIsKey() && glfwGetKey(Globals.window, controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT).getKeyValue()) == GLFW_PRESS){
|
if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT).isIsKey() && glfwGetKey(Globals.window, controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT).getKeyValue()) == GLFW_PRESS){
|
||||||
CreatureUtils.setMovementVector(Globals.playerCharacter, new Vector3f(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY((float)(-90 * Math.PI / 180)).normalize());
|
CreatureUtils.setMovementVector(Globals.playerCharacter, new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY((float)(-90 * Math.PI / 180)).normalize());
|
||||||
if(movementTree.getState()==MovementTreeState.IDLE || movementTree.getState()==MovementTreeState.SLOWDOWN){
|
if(movementTree.getState()==MovementTreeState.IDLE || movementTree.getState()==MovementTreeState.SLOWDOWN){
|
||||||
movementTree.start();
|
movementTree.start();
|
||||||
}
|
}
|
||||||
@ -388,7 +388,7 @@ public class ControlHandler {
|
|||||||
if(controls.get(DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU).isState() == true){
|
if(controls.get(DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU).isState() == true){
|
||||||
//make menu dialog visible
|
//make menu dialog visible
|
||||||
//change control scheme to in game main menu scheme
|
//change control scheme to in game main menu scheme
|
||||||
System.out.println("Press main menu");
|
// System.out.println("Press main menu");
|
||||||
Globals.currentMenu = MenuUtils.createInGameMainMenu();
|
Globals.currentMenu = MenuUtils.createInGameMainMenu();
|
||||||
MenuUtils.makeMenuDrawable(Globals.currentMenu);
|
MenuUtils.makeMenuDrawable(Globals.currentMenu);
|
||||||
Globals.controlHandler.setHandlerState(ControlsState.IN_GAME_MAIN_MENU);
|
Globals.controlHandler.setHandlerState(ControlsState.IN_GAME_MAIN_MENU);
|
||||||
|
|||||||
@ -46,6 +46,7 @@ import electrosphere.game.client.targeting.crosshair.Crosshair;
|
|||||||
import electrosphere.game.server.pathfinding.NavMeshPathfinder;
|
import electrosphere.game.server.pathfinding.NavMeshPathfinder;
|
||||||
import electrosphere.game.server.pathfinding.navmesh.NavCube;
|
import electrosphere.game.server.pathfinding.navmesh.NavCube;
|
||||||
import electrosphere.game.server.pathfinding.navmesh.NavMesh;
|
import electrosphere.game.server.pathfinding.navmesh.NavMesh;
|
||||||
|
import electrosphere.game.server.unit.UnitUtils;
|
||||||
import electrosphere.renderer.ui.Widget;
|
import electrosphere.renderer.ui.Widget;
|
||||||
import electrosphere.renderer.ui.WidgetUtils;
|
import electrosphere.renderer.ui.WidgetUtils;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
@ -622,6 +623,8 @@ public class LoadingThread extends Thread {
|
|||||||
// //attach ai to evil goblin
|
// //attach ai to evil goblin
|
||||||
// MindlessAttacker.attachToCreature(goblin);
|
// MindlessAttacker.attachToCreature(goblin);
|
||||||
|
|
||||||
|
// UnitUtils.spawnTextGoblin(10, 0, 10);
|
||||||
|
|
||||||
// StructureUtils.spawnBasicStructure("building1", new Vector3f(5,2.4f,5), new Quaternionf());
|
// StructureUtils.spawnBasicStructure("building1", new Vector3f(5,2.4f,5), new Quaternionf());
|
||||||
|
|
||||||
// Entity bow = ItemUtils.spawnBasicItem("Bow");
|
// Entity bow = ItemUtils.spawnBasicItem("Bow");
|
||||||
|
|||||||
@ -78,7 +78,7 @@ public class AttackTree {
|
|||||||
float velocity = CreatureUtils.getVelocity(parent);
|
float velocity = CreatureUtils.getVelocity(parent);
|
||||||
Actor entityActor = EntityUtils.getActor(parent);
|
Actor entityActor = EntityUtils.getActor(parent);
|
||||||
Vector3d position = EntityUtils.getPosition(parent);
|
Vector3d position = EntityUtils.getPosition(parent);
|
||||||
Vector3f movementVector = CreatureUtils.getMovementVector(parent);
|
Vector3d movementVector = CreatureUtils.getMovementVector(parent);
|
||||||
|
|
||||||
//parse attached network messages
|
//parse attached network messages
|
||||||
for(EntityMessage message : networkMessageQueue){
|
for(EntityMessage message : networkMessageQueue){
|
||||||
@ -113,7 +113,7 @@ public class AttackTree {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
EntityUtils.getPosition(parent).set(message.getpositionX(),message.getpositionY(),message.getpositionZ());
|
EntityUtils.getPosition(parent).set(message.getpositionX(),message.getpositionY(),message.getpositionZ());
|
||||||
CreatureUtils.setMovementVector(parent, new Vector3f(message.getrotationX(),message.getrotationY(),message.getrotationZ()));
|
CreatureUtils.setMovementVector(parent, new Vector3d(message.getrotationX(),message.getrotationY(),message.getrotationZ()));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,6 +11,7 @@ import electrosphere.net.parser.net.message.EntityMessage;
|
|||||||
import electrosphere.renderer.Actor;
|
import electrosphere.renderer.Actor;
|
||||||
import electrosphere.renderer.anim.Animation;
|
import electrosphere.renderer.anim.Animation;
|
||||||
import java.util.concurrent.CopyOnWriteArrayList;
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
|
import org.joml.Vector3d;
|
||||||
import org.joml.Vector3f;
|
import org.joml.Vector3f;
|
||||||
|
|
||||||
public class IdleTree {
|
public class IdleTree {
|
||||||
@ -83,7 +84,7 @@ public class IdleTree {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
EntityUtils.getPosition(parent).set(message.getpositionX(),message.getpositionY(),message.getpositionZ());
|
EntityUtils.getPosition(parent).set(message.getpositionX(),message.getpositionY(),message.getpositionZ());
|
||||||
CreatureUtils.setMovementVector(parent, new Vector3f(message.getrotationX(),message.getrotationY(),message.getrotationZ()));
|
CreatureUtils.setMovementVector(parent, new Vector3d(message.getrotationX(),message.getrotationY(),message.getrotationZ()));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,9 @@
|
|||||||
|
package electrosphere.entity.state.equip;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author amaterasu
|
||||||
|
*/
|
||||||
|
public class EquipState {
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
package electrosphere.entity.state.equip;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author amaterasu
|
||||||
|
*/
|
||||||
|
public class EquipTree {
|
||||||
|
|
||||||
|
}
|
||||||
@ -43,6 +43,10 @@ public class GroundMovementTree {
|
|||||||
static final double STATE_DIFFERENCE_SOFT_UPDATE_THRESHOLD = 0.2;
|
static final double STATE_DIFFERENCE_SOFT_UPDATE_THRESHOLD = 0.2;
|
||||||
static final double SOFT_UPDATE_MULTIPLIER = 0.1;
|
static final double SOFT_UPDATE_MULTIPLIER = 0.1;
|
||||||
|
|
||||||
|
String animationStartUp = Animation.ANIMATION_MOVEMENT_STARTUP;
|
||||||
|
String animationMain = Animation.ANIMATION_MOVEMENT_MOVE;
|
||||||
|
String animationSlowDown = Animation.ANIMATION_MOVEMENT_MOVE;
|
||||||
|
|
||||||
MovementTreeState state;
|
MovementTreeState state;
|
||||||
|
|
||||||
Entity parent;
|
Entity parent;
|
||||||
@ -84,9 +88,9 @@ public class GroundMovementTree {
|
|||||||
Actor entityActor = EntityUtils.getActor(parent);
|
Actor entityActor = EntityUtils.getActor(parent);
|
||||||
// Model entityModel = Globals.assetManager.fetchModel(EntityUtils.getEntityModelPath(parent));
|
// Model entityModel = Globals.assetManager.fetchModel(EntityUtils.getEntityModelPath(parent));
|
||||||
Vector3d position = EntityUtils.getPosition(parent);
|
Vector3d position = EntityUtils.getPosition(parent);
|
||||||
Vector3f movementVector = CreatureUtils.getMovementVector(parent);
|
Vector3d movementVector = CreatureUtils.getMovementVector(parent);
|
||||||
// float movementYaw = CameraEntityUtils.getCameraYaw(Globals.playerCamera);
|
// float movementYaw = CameraEntityUtils.getCameraYaw(Globals.playerCamera);
|
||||||
Quaternionf movementQuaternion = new Quaternionf().rotationTo(new Vector3f(0,0,1), movementVector).normalize();
|
Quaternionf movementQuaternion = new Quaternionf().rotationTo(new Vector3f(0,0,1), new Vector3f((float)movementVector.x,(float)movementVector.y,(float)movementVector.z)).normalize();
|
||||||
Quaternionf rotation = EntityUtils.getRotation(parent);
|
Quaternionf rotation = EntityUtils.getRotation(parent);
|
||||||
Vector3d newPosition;
|
Vector3d newPosition;
|
||||||
|
|
||||||
@ -145,7 +149,7 @@ public class GroundMovementTree {
|
|||||||
} else if(position.distance(message.getpositionX(),message.getpositionY(),message.getpositionZ()) > STATE_DIFFERENCE_SOFT_UPDATE_THRESHOLD){
|
} else if(position.distance(message.getpositionX(),message.getpositionY(),message.getpositionZ()) > STATE_DIFFERENCE_SOFT_UPDATE_THRESHOLD){
|
||||||
EntityUtils.getPosition(parent).add(new Vector3d(message.getpositionX(),message.getpositionY(),message.getpositionZ()).mul(SOFT_UPDATE_MULTIPLIER));
|
EntityUtils.getPosition(parent).add(new Vector3d(message.getpositionX(),message.getpositionY(),message.getpositionZ()).mul(SOFT_UPDATE_MULTIPLIER));
|
||||||
}
|
}
|
||||||
CreatureUtils.setMovementVector(parent, new Vector3f(message.getrotationX(),message.getrotationY(),message.getrotationZ()));
|
CreatureUtils.setMovementVector(parent, new Vector3d(message.getrotationX(),message.getrotationY(),message.getrotationZ()));
|
||||||
// EntityUtils.getEntityRotation(parent).set(message.getrotationX(), message.getrotationY(), message.getrotationZ(), message.getrotationW()).normalize();
|
// EntityUtils.getEntityRotation(parent).set(message.getrotationX(), message.getrotationY(), message.getrotationZ(), message.getrotationW()).normalize();
|
||||||
// velocity = message.getvelocity();
|
// velocity = message.getvelocity();
|
||||||
break;
|
break;
|
||||||
@ -161,8 +165,8 @@ public class GroundMovementTree {
|
|||||||
velocity = velocity + acceleration * Main.deltaTime;
|
velocity = velocity + acceleration * Main.deltaTime;
|
||||||
CreatureUtils.setVelocity(parent, velocity);
|
CreatureUtils.setVelocity(parent, velocity);
|
||||||
if(entityActor != null){
|
if(entityActor != null){
|
||||||
if(!entityActor.isPlayingAnimation() || !entityActor.getCurrentAnimation().equals(Animation.ANIMATION_MOVEMENT_STARTUP)){
|
if(!entityActor.isPlayingAnimation() || !entityActor.getCurrentAnimation().equals(animationStartUp)){
|
||||||
entityActor.playAnimation(Animation.ANIMATION_MOVEMENT_STARTUP);
|
entityActor.playAnimation(animationStartUp);
|
||||||
entityActor.incrementAnimationTime(0.01);
|
entityActor.incrementAnimationTime(0.01);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -238,8 +242,8 @@ public class GroundMovementTree {
|
|||||||
//check if can restart animation
|
//check if can restart animation
|
||||||
//if yes, restart animation
|
//if yes, restart animation
|
||||||
if(entityActor != null){
|
if(entityActor != null){
|
||||||
if(!entityActor.isPlayingAnimation() || !entityActor.getCurrentAnimation().equals(Animation.ANIMATION_MOVEMENT_MOVE)){
|
if(!entityActor.isPlayingAnimation() || !entityActor.getCurrentAnimation().equals(animationMain)){
|
||||||
entityActor.playAnimation(Animation.ANIMATION_MOVEMENT_MOVE);
|
entityActor.playAnimation(animationMain);
|
||||||
entityActor.incrementAnimationTime(0.01);
|
entityActor.incrementAnimationTime(0.01);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -310,8 +314,8 @@ public class GroundMovementTree {
|
|||||||
velocity = velocity - acceleration * Main.deltaTime;
|
velocity = velocity - acceleration * Main.deltaTime;
|
||||||
CreatureUtils.setVelocity(parent, velocity);
|
CreatureUtils.setVelocity(parent, velocity);
|
||||||
if(entityActor != null){
|
if(entityActor != null){
|
||||||
if(!entityActor.isPlayingAnimation() || !entityActor.getCurrentAnimation().equals(Animation.ANIMATION_MOVEMENT_STARTUP)){
|
if(!entityActor.isPlayingAnimation() || !entityActor.getCurrentAnimation().equals(animationSlowDown)){
|
||||||
entityActor.playAnimation(Animation.ANIMATION_MOVEMENT_STARTUP);
|
entityActor.playAnimation(animationSlowDown);
|
||||||
entityActor.incrementAnimationTime(0.01);
|
entityActor.incrementAnimationTime(0.01);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -321,7 +325,7 @@ public class GroundMovementTree {
|
|||||||
state = MovementTreeState.IDLE;
|
state = MovementTreeState.IDLE;
|
||||||
}
|
}
|
||||||
// body.applyCentralForce(PhysicsUtils.jomlToVecmathVector3f(new Vector3f(movementVector).mul(-1.0f).normalize().mul(velocity)));
|
// body.applyCentralForce(PhysicsUtils.jomlToVecmathVector3f(new Vector3f(movementVector).mul(-1.0f).normalize().mul(velocity)));
|
||||||
EntityUtils.getRotation(parent).rotationTo(new Vector3f(0,0,1), movementVector);
|
EntityUtils.getRotation(parent).rotationTo(new Vector3f(0,0,1), new Vector3f((float)movementVector.x,(float)movementVector.y,(float)movementVector.z));
|
||||||
//move the entity
|
//move the entity
|
||||||
// newPosition = new Vector3d(position).add(new Vector3d(movementVector).mul(velocity).mul(Main.deltaTime));
|
// newPosition = new Vector3d(position).add(new Vector3d(movementVector).mul(velocity).mul(Main.deltaTime));
|
||||||
// if(!Globals.collisionEngine.checkCanOccupyPosition(Globals.commonWorldData, parent, newPosition)){
|
// if(!Globals.collisionEngine.checkCanOccupyPosition(Globals.commonWorldData, parent, newPosition)){
|
||||||
@ -329,7 +333,7 @@ public class GroundMovementTree {
|
|||||||
// }
|
// }
|
||||||
collidable.addImpulse(new Impulse(new Vector3d(movementVector), velocity * Main.deltaTime, "movement"));
|
collidable.addImpulse(new Impulse(new Vector3d(movementVector), velocity * Main.deltaTime, "movement"));
|
||||||
// position.set(newPosition);
|
// position.set(newPosition);
|
||||||
rotation.rotationTo(new Vector3f(0,0,1), movementVector);
|
rotation.rotationTo(new Vector3f(0,0,1), new Vector3f((float)movementVector.x,(float)movementVector.y,(float)movementVector.z));
|
||||||
|
|
||||||
activateGravityTree();
|
activateGravityTree();
|
||||||
|
|
||||||
@ -410,4 +414,16 @@ public class GroundMovementTree {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setAnimationStartUp(String animationStartUp) {
|
||||||
|
this.animationStartUp = animationStartUp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAnimationMain(String animationMain) {
|
||||||
|
this.animationMain = animationMain;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAnimationSlowDown(String animationSlowDown) {
|
||||||
|
this.animationSlowDown = animationSlowDown;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -53,8 +53,8 @@ public class AttachUtils {
|
|||||||
//set rotation
|
//set rotation
|
||||||
// Quaternionf rotation = parentActor.getBoneRotation(targetBone);
|
// Quaternionf rotation = parentActor.getBoneRotation(targetBone);
|
||||||
// EntityUtils.getRotation(currentEntity).set(rotation).normalize();
|
// EntityUtils.getRotation(currentEntity).set(rotation).normalize();
|
||||||
Vector3f facingAngle = CreatureUtils.getMovementVector(parent);
|
Vector3d facingAngle = CreatureUtils.getMovementVector(parent);
|
||||||
EntityUtils.getRotation(currentEntity).rotationTo(new Vector3f(0,0,1), facingAngle).mul(parentActor.getBoneRotation(targetBone)).normalize();
|
EntityUtils.getRotation(currentEntity).rotationTo(new Vector3f(0,0,1), new Vector3f((float)facingAngle.x,(float)facingAngle.y,(float)facingAngle.z)).mul(parentActor.getBoneRotation(targetBone)).normalize();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -94,7 +94,17 @@ public class CreatureUtils {
|
|||||||
for(MovementSystem movementSystem : rawType.getMovementSystems()){
|
for(MovementSystem movementSystem : rawType.getMovementSystems()){
|
||||||
switch(movementSystem.getType()){
|
switch(movementSystem.getType()){
|
||||||
case "GROUND":
|
case "GROUND":
|
||||||
rVal.putData(EntityDataStrings.DATA_STRING_MOVEMENT_BT, new GroundMovementTree(rVal,CollisionObjUtils.getCollidable(rVal)));
|
GroundMovementTree moveTree = new GroundMovementTree(rVal,CollisionObjUtils.getCollidable(rVal));
|
||||||
|
if(movementSystem.getAnimationStartup() != null){
|
||||||
|
moveTree.setAnimationStartUp(movementSystem.getAnimationStartup().getName());
|
||||||
|
}
|
||||||
|
if(movementSystem.getAnimationLoop() != null){
|
||||||
|
moveTree.setAnimationMain(movementSystem.getAnimationLoop().getName());
|
||||||
|
}
|
||||||
|
if(movementSystem.getAnimationWindDown()!= null){
|
||||||
|
moveTree.setAnimationSlowDown(movementSystem.getAnimationWindDown().getName());
|
||||||
|
}
|
||||||
|
rVal.putData(EntityDataStrings.DATA_STRING_MOVEMENT_BT, moveTree);
|
||||||
rVal.putData(EntityDataStrings.DATA_STRING_MOVEMENT_VECTOR, new Vector3f(0,0,0));
|
rVal.putData(EntityDataStrings.DATA_STRING_MOVEMENT_VECTOR, new Vector3f(0,0,0));
|
||||||
rVal.putData(EntityDataStrings.DATA_STRING_MAX_NATURAL_VELOCITY, movementSystem.getMaxVelocity());
|
rVal.putData(EntityDataStrings.DATA_STRING_MAX_NATURAL_VELOCITY, movementSystem.getMaxVelocity());
|
||||||
rVal.putData(EntityDataStrings.DATA_STRING_ACCELERATION, movementSystem.getAcceleration());
|
rVal.putData(EntityDataStrings.DATA_STRING_ACCELERATION, movementSystem.getAcceleration());
|
||||||
@ -146,7 +156,7 @@ public class CreatureUtils {
|
|||||||
Globals.entityManager.registerCreatureEntity(rVal);
|
Globals.entityManager.registerCreatureEntity(rVal);
|
||||||
rVal.putData(EntityDataStrings.DATA_STRING_CREATURE_IS_CREATURE, true);
|
rVal.putData(EntityDataStrings.DATA_STRING_CREATURE_IS_CREATURE, true);
|
||||||
rVal.putData(EntityDataStrings.DATA_STRING_CREATURE_TYPE, type);
|
rVal.putData(EntityDataStrings.DATA_STRING_CREATURE_TYPE, type);
|
||||||
rVal.putData(EntityDataStrings.DATA_STRING_MOVEMENT_VECTOR, new Vector3f(0,0,1));
|
rVal.putData(EntityDataStrings.DATA_STRING_MOVEMENT_VECTOR, new Vector3d(0,0,1));
|
||||||
rVal.putData(EntityDataStrings.DRAW_CAST_SHADOW, true);
|
rVal.putData(EntityDataStrings.DRAW_CAST_SHADOW, true);
|
||||||
return rVal;
|
return rVal;
|
||||||
}
|
}
|
||||||
@ -163,12 +173,12 @@ public class CreatureUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setMovementVector(Entity e, Vector3f vector){
|
public static void setMovementVector(Entity e, Vector3d vector){
|
||||||
e.putData(EntityDataStrings.DATA_STRING_MOVEMENT_VECTOR, vector);
|
e.putData(EntityDataStrings.DATA_STRING_MOVEMENT_VECTOR, vector);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Vector3f getMovementVector(Entity e){
|
public static Vector3d getMovementVector(Entity e){
|
||||||
return (Vector3f)e.getData(EntityDataStrings.DATA_STRING_MOVEMENT_VECTOR);
|
return (Vector3d)e.getData(EntityDataStrings.DATA_STRING_MOVEMENT_VECTOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static float getAcceleration(Entity e){
|
public static float getAcceleration(Entity e){
|
||||||
|
|||||||
@ -0,0 +1,25 @@
|
|||||||
|
package electrosphere.game.data.creature.type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author amaterasu
|
||||||
|
*/
|
||||||
|
public class Animation {
|
||||||
|
|
||||||
|
String name;
|
||||||
|
int length;
|
||||||
|
boolean loops;
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getLength() {
|
||||||
|
return length;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isLoops() {
|
||||||
|
return loops;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -4,6 +4,9 @@ public class MovementSystem {
|
|||||||
String type;
|
String type;
|
||||||
float acceleration;
|
float acceleration;
|
||||||
float maxVelocity;
|
float maxVelocity;
|
||||||
|
Animation animationStartup;
|
||||||
|
Animation animationLoop;
|
||||||
|
Animation animationWindDown;
|
||||||
|
|
||||||
public String getType() {
|
public String getType() {
|
||||||
return type;
|
return type;
|
||||||
@ -17,5 +20,17 @@ public class MovementSystem {
|
|||||||
return maxVelocity;
|
return maxVelocity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Animation getAnimationStartup() {
|
||||||
|
return animationStartup;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Animation getAnimationLoop() {
|
||||||
|
return animationLoop;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Animation getAnimationWindDown() {
|
||||||
|
return animationWindDown;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,162 @@
|
|||||||
|
package electrosphere.game.server.ai.creature;
|
||||||
|
|
||||||
|
import electrosphere.entity.Entity;
|
||||||
|
import electrosphere.entity.EntityUtils;
|
||||||
|
import electrosphere.entity.state.movement.GroundMovementTree;
|
||||||
|
import electrosphere.entity.types.creature.CreatureUtils;
|
||||||
|
import electrosphere.game.server.ai.AI;
|
||||||
|
import electrosphere.main.Globals;
|
||||||
|
import java.util.Random;
|
||||||
|
import org.joml.Vector3d;
|
||||||
|
import org.joml.Vector3f;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author amaterasu
|
||||||
|
*/
|
||||||
|
public class MillAbout extends AI {
|
||||||
|
|
||||||
|
Entity character;
|
||||||
|
|
||||||
|
// float aggroRange = 10.0f;
|
||||||
|
// float attackRange = 1.0f;
|
||||||
|
//
|
||||||
|
// int attackCooldownMax = 250;
|
||||||
|
// int attackCooldown = 0;
|
||||||
|
|
||||||
|
boolean millAbout = true;
|
||||||
|
int millMoveTimer = 0;
|
||||||
|
int millMoveTimerTimeout = 100;
|
||||||
|
int MILL_MOVE_TIMEOUT_LOWER = 1500;
|
||||||
|
int MILL_MOVE_TIMEOUT_UPPER = 2000;
|
||||||
|
float millTargetMaxDist = 3;
|
||||||
|
|
||||||
|
boolean moveToTarget = false;
|
||||||
|
Vector3d moveTargetPosition;
|
||||||
|
|
||||||
|
public MillAbout(Entity character){
|
||||||
|
this.character = character;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void attachToCreature(Entity creature){
|
||||||
|
MillAbout ai = new MillAbout(creature);
|
||||||
|
Globals.aiManager.registerAI(ai);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void simulate(){
|
||||||
|
Vector3d position = EntityUtils.getPosition(character);
|
||||||
|
//mill aboud
|
||||||
|
if(millAbout){
|
||||||
|
if(millMoveTimer >= millMoveTimerTimeout){
|
||||||
|
Random rand = new Random();
|
||||||
|
millMoveTimer = 0;
|
||||||
|
millMoveTimerTimeout = rand.nextInt(MILL_MOVE_TIMEOUT_UPPER - MILL_MOVE_TIMEOUT_LOWER) + MILL_MOVE_TIMEOUT_LOWER;
|
||||||
|
Vector3d moveVector = new Vector3d();
|
||||||
|
//search for a spot to mill to
|
||||||
|
// while(true){
|
||||||
|
moveVector.set(
|
||||||
|
rand.nextFloat() - 0.5,
|
||||||
|
rand.nextFloat() - 0.5,
|
||||||
|
rand.nextFloat() - 0.5
|
||||||
|
).normalize().mul(millTargetMaxDist);
|
||||||
|
moveVector.y = Globals.commonWorldData.getElevationAtPoint(new Vector3d(position).add(moveVector));
|
||||||
|
|
||||||
|
//TODO: search in navmeshmanager to make sure navigable, otherwise generate new pos
|
||||||
|
// }
|
||||||
|
moveTargetPosition = new Vector3d(position).add(moveVector);
|
||||||
|
millAbout = false;
|
||||||
|
moveToTarget = true;
|
||||||
|
} else {
|
||||||
|
millMoveTimer++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(moveToTarget){
|
||||||
|
if(moveTargetPosition.distance(position) > 0.4){
|
||||||
|
Vector3d moveVector = new Vector3d(moveTargetPosition).sub(position).normalize();
|
||||||
|
CreatureUtils.setMovementVector(character, new Vector3d((float)moveVector.x,(float)moveVector.y,(float)moveVector.z));
|
||||||
|
GroundMovementTree characterMoveTree = CreatureUtils.getEntityMovementTree(character);
|
||||||
|
if(characterMoveTree.getState()==GroundMovementTree.MovementTreeState.IDLE || characterMoveTree.getState()==GroundMovementTree.MovementTreeState.SLOWDOWN){
|
||||||
|
characterMoveTree.start();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
GroundMovementTree characterMoveTree = CreatureUtils.getEntityMovementTree(character);
|
||||||
|
characterMoveTree.slowdown();
|
||||||
|
System.out.println("Made it to destination");
|
||||||
|
moveToTarget = false;
|
||||||
|
millAbout = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// if(target != null){
|
||||||
|
// if(inAttackRange()){
|
||||||
|
// attack();
|
||||||
|
// } else {
|
||||||
|
// if(inAggroRange()){
|
||||||
|
// moveToTarget();
|
||||||
|
// } else {
|
||||||
|
// target = null;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// searchForTarget();
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
// void attack(){
|
||||||
|
// if(attackCooldown == 0){
|
||||||
|
// attackCooldown = attackCooldownMax;
|
||||||
|
// AttackTree attackTree = CreatureUtils.getAttackTree(character);
|
||||||
|
// attackTree.start(EntityDataStrings.ATTACK_MOVE_TYPE_MELEE_SWING_ONE_HAND);
|
||||||
|
// } else {
|
||||||
|
// attackCooldown--;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// void moveToTarget(){
|
||||||
|
// Vector3d targetPosition = EntityUtils.getPosition(target);
|
||||||
|
// Vector3d characterPosition = EntityUtils.getPosition(character);
|
||||||
|
// Vector3d moveVector = new Vector3d(targetPosition).sub(characterPosition).normalize();
|
||||||
|
// CreatureUtils.setMovementVector(character, new Vector3f((float)moveVector.x,(float)moveVector.y,(float)moveVector.z));
|
||||||
|
// GroundMovementTree characterMoveTree = CreatureUtils.getEntityMovementTree(character);
|
||||||
|
// if(characterMoveTree.getState()==GroundMovementTree.MovementTreeState.IDLE || characterMoveTree.getState()==GroundMovementTree.MovementTreeState.SLOWDOWN){
|
||||||
|
// characterMoveTree.start();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// boolean inAttackRange(){
|
||||||
|
// boolean rVal = false;
|
||||||
|
// Vector3d position = EntityUtils.getPosition(character);
|
||||||
|
// Vector3d targetPosition = EntityUtils.getPosition(target);
|
||||||
|
// if(new Vector3d(position).distance(targetPosition) < attackRange){
|
||||||
|
// rVal = true;
|
||||||
|
// }
|
||||||
|
// return rVal;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// boolean inAggroRange(){
|
||||||
|
// boolean rVal = false;
|
||||||
|
// Vector3d position = EntityUtils.getPosition(character);
|
||||||
|
// Vector3d targetPosition = EntityUtils.getPosition(target);
|
||||||
|
// if(new Vector3d(position).distance(targetPosition) < aggroRange){
|
||||||
|
// rVal = true;
|
||||||
|
// }
|
||||||
|
// return rVal;
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
// void searchForTarget(){
|
||||||
|
// Vector3d position = EntityUtils.getPosition(character);
|
||||||
|
// for(Entity current : Globals.entityManager.getLifeStateEntities()){
|
||||||
|
// if(current != character){
|
||||||
|
// Vector3d potentialTargetPosition = EntityUtils.getPosition(current);
|
||||||
|
// if(position.distance(potentialTargetPosition) < aggroRange){
|
||||||
|
// target = current;
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
||||||
@ -69,7 +69,7 @@ public class MindlessAttacker extends AI{
|
|||||||
Vector3d targetPosition = EntityUtils.getPosition(target);
|
Vector3d targetPosition = EntityUtils.getPosition(target);
|
||||||
Vector3d characterPosition = EntityUtils.getPosition(character);
|
Vector3d characterPosition = EntityUtils.getPosition(character);
|
||||||
Vector3d moveVector = new Vector3d(targetPosition).sub(characterPosition).normalize();
|
Vector3d moveVector = new Vector3d(targetPosition).sub(characterPosition).normalize();
|
||||||
CreatureUtils.setMovementVector(character, new Vector3f((float)moveVector.x,(float)moveVector.y,(float)moveVector.z));
|
CreatureUtils.setMovementVector(character, new Vector3d((float)moveVector.x,(float)moveVector.y,(float)moveVector.z));
|
||||||
GroundMovementTree characterMoveTree = CreatureUtils.getEntityMovementTree(character);
|
GroundMovementTree characterMoveTree = CreatureUtils.getEntityMovementTree(character);
|
||||||
if(characterMoveTree.getState()==GroundMovementTree.MovementTreeState.IDLE || characterMoveTree.getState()==GroundMovementTree.MovementTreeState.SLOWDOWN){
|
if(characterMoveTree.getState()==GroundMovementTree.MovementTreeState.IDLE || characterMoveTree.getState()==GroundMovementTree.MovementTreeState.SLOWDOWN){
|
||||||
characterMoveTree.start();
|
characterMoveTree.start();
|
||||||
|
|||||||
@ -29,7 +29,7 @@ public class ServerTerrainChunk {
|
|||||||
long[][] randomizer = new long[5][5];
|
long[][] randomizer = new long[5][5];
|
||||||
float[][] heightmap = new float[width + 1][width + 1];
|
float[][] heightmap = new float[width + 1][width + 1];
|
||||||
ServerTerrainChunk rVal = new ServerTerrainChunk(x, y, heightmap, macroValues, randomizer);
|
ServerTerrainChunk rVal = new ServerTerrainChunk(x, y, heightmap, macroValues, randomizer);
|
||||||
rVal.addModification(new TerrainModification(x, y, 3, 3, 5));
|
// rVal.addModification(new TerrainModification(x, y, 3, 3, 5));
|
||||||
return rVal;
|
return rVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
30
src/main/java/electrosphere/game/server/unit/UnitUtils.java
Normal file
30
src/main/java/electrosphere/game/server/unit/UnitUtils.java
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
package electrosphere.game.server.unit;
|
||||||
|
|
||||||
|
import electrosphere.entity.Entity;
|
||||||
|
import electrosphere.entity.EntityUtils;
|
||||||
|
import electrosphere.entity.types.attach.AttachUtils;
|
||||||
|
import electrosphere.entity.types.collision.CollisionObjUtils;
|
||||||
|
import electrosphere.entity.types.creature.CreatureUtils;
|
||||||
|
import electrosphere.entity.types.item.ItemUtils;
|
||||||
|
import electrosphere.game.server.ai.creature.MillAbout;
|
||||||
|
import org.joml.Vector3f;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author amaterasu
|
||||||
|
*/
|
||||||
|
public class UnitUtils {
|
||||||
|
|
||||||
|
public static void spawnTextGoblin(float posX, float posY, float posZ){
|
||||||
|
Entity goblin = CreatureUtils.spawnBasicCreature("Goblin");
|
||||||
|
CollisionObjUtils.positionCharacter(goblin, new Vector3f(posX, posY, posZ));
|
||||||
|
EntityUtils.getScale(goblin).set(0.005f);
|
||||||
|
//give evil goblin sword
|
||||||
|
Entity goblinSword = ItemUtils.spawnBasicItem("Katana");
|
||||||
|
AttachUtils.attachEntityToEntityAtBone(goblin, goblinSword, "Bone.031");
|
||||||
|
//attach ai to evil goblin
|
||||||
|
MillAbout.attachToCreature(goblin);
|
||||||
|
// MindlessAttacker.attachToCreature(goblin);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -173,9 +173,9 @@ public class Main {
|
|||||||
|
|
||||||
//uncomment to test loading a model into engine
|
//uncomment to test loading a model into engine
|
||||||
// if(1==1){
|
// if(1==1){
|
||||||
// Globals.assetManager.addModelPathToQueue("/Models/arrow1.fbx");
|
// Globals.assetManager.addModelPathToQueue("/Models/goblin1.fbx");
|
||||||
// Globals.assetManager.loadAssetsInQueue();
|
// Globals.assetManager.loadAssetsInQueue();
|
||||||
// Model bowModel = Globals.assetManager.fetchModel("/Models/arrow1.fbx");
|
// Model bowModel = Globals.assetManager.fetchModel("/Models/goblin1.fbx");
|
||||||
// bowModel.describeHighLevel();
|
// bowModel.describeHighLevel();
|
||||||
// System.exit(0);
|
// System.exit(0);
|
||||||
// }
|
// }
|
||||||
|
|||||||
@ -27,10 +27,10 @@ public class EntityMessage extends NetworkMessage {
|
|||||||
double positionY;
|
double positionY;
|
||||||
double positionZ;
|
double positionZ;
|
||||||
float rotationW;
|
float rotationW;
|
||||||
float rotationX;
|
double rotationX;
|
||||||
float rotationY;
|
double rotationY;
|
||||||
float rotationZ;
|
double rotationZ;
|
||||||
float velocity;
|
double velocity;
|
||||||
int treeState;
|
int treeState;
|
||||||
int propertyType;
|
int propertyType;
|
||||||
int propertyValue;
|
int propertyValue;
|
||||||
@ -105,35 +105,35 @@ public class EntityMessage extends NetworkMessage {
|
|||||||
this.rotationW = rotationW;
|
this.rotationW = rotationW;
|
||||||
}
|
}
|
||||||
|
|
||||||
public float getrotationX() {
|
public double getrotationX() {
|
||||||
return rotationX;
|
return rotationX;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setrotationX(float rotationX) {
|
public void setrotationX(double rotationX) {
|
||||||
this.rotationX = rotationX;
|
this.rotationX = rotationX;
|
||||||
}
|
}
|
||||||
|
|
||||||
public float getrotationY() {
|
public double getrotationY() {
|
||||||
return rotationY;
|
return rotationY;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setrotationY(float rotationY) {
|
public void setrotationY(double rotationY) {
|
||||||
this.rotationY = rotationY;
|
this.rotationY = rotationY;
|
||||||
}
|
}
|
||||||
|
|
||||||
public float getrotationZ() {
|
public double getrotationZ() {
|
||||||
return rotationZ;
|
return rotationZ;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setrotationZ(float rotationZ) {
|
public void setrotationZ(double rotationZ) {
|
||||||
this.rotationZ = rotationZ;
|
this.rotationZ = rotationZ;
|
||||||
}
|
}
|
||||||
|
|
||||||
public float getvelocity() {
|
public double getvelocity() {
|
||||||
return velocity;
|
return velocity;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setvelocity(float velocity) {
|
public void setvelocity(double velocity) {
|
||||||
this.velocity = velocity;
|
this.velocity = velocity;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -349,13 +349,13 @@ public class EntityMessage extends NetworkMessage {
|
|||||||
stripPacketHeader(byteStream);
|
stripPacketHeader(byteStream);
|
||||||
rVal.setentityID(ByteStreamUtils.popIntFromByteQueue(byteStream));
|
rVal.setentityID(ByteStreamUtils.popIntFromByteQueue(byteStream));
|
||||||
rVal.settime(ByteStreamUtils.popLongFromByteQueue(byteStream));
|
rVal.settime(ByteStreamUtils.popLongFromByteQueue(byteStream));
|
||||||
rVal.setrotationX(ByteStreamUtils.popFloatFromByteQueue(byteStream));
|
rVal.setrotationX(ByteStreamUtils.popDoubleFromByteQueue(byteStream));
|
||||||
rVal.setrotationY(ByteStreamUtils.popFloatFromByteQueue(byteStream));
|
rVal.setrotationY(ByteStreamUtils.popDoubleFromByteQueue(byteStream));
|
||||||
rVal.setrotationZ(ByteStreamUtils.popFloatFromByteQueue(byteStream));
|
rVal.setrotationZ(ByteStreamUtils.popDoubleFromByteQueue(byteStream));
|
||||||
return rVal;
|
return rVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static EntityMessage constructsetFacingMessage(int entityID,long time,float rotationX,float rotationY,float rotationZ){
|
public static EntityMessage constructsetFacingMessage(int entityID,long time,double rotationX,double rotationY,double rotationZ){
|
||||||
EntityMessage rVal = new EntityMessage(EntityMessageType.SETFACING);
|
EntityMessage rVal = new EntityMessage(EntityMessageType.SETFACING);
|
||||||
rVal.setentityID(entityID);
|
rVal.setentityID(entityID);
|
||||||
rVal.settime(time);
|
rVal.settime(time);
|
||||||
@ -374,15 +374,15 @@ public class EntityMessage extends NetworkMessage {
|
|||||||
rVal.setpositionX(ByteStreamUtils.popDoubleFromByteQueue(byteStream));
|
rVal.setpositionX(ByteStreamUtils.popDoubleFromByteQueue(byteStream));
|
||||||
rVal.setpositionY(ByteStreamUtils.popDoubleFromByteQueue(byteStream));
|
rVal.setpositionY(ByteStreamUtils.popDoubleFromByteQueue(byteStream));
|
||||||
rVal.setpositionZ(ByteStreamUtils.popDoubleFromByteQueue(byteStream));
|
rVal.setpositionZ(ByteStreamUtils.popDoubleFromByteQueue(byteStream));
|
||||||
rVal.setrotationX(ByteStreamUtils.popFloatFromByteQueue(byteStream));
|
rVal.setrotationX(ByteStreamUtils.popDoubleFromByteQueue(byteStream));
|
||||||
rVal.setrotationY(ByteStreamUtils.popFloatFromByteQueue(byteStream));
|
rVal.setrotationY(ByteStreamUtils.popDoubleFromByteQueue(byteStream));
|
||||||
rVal.setrotationZ(ByteStreamUtils.popFloatFromByteQueue(byteStream));
|
rVal.setrotationZ(ByteStreamUtils.popDoubleFromByteQueue(byteStream));
|
||||||
rVal.setvelocity(ByteStreamUtils.popFloatFromByteQueue(byteStream));
|
rVal.setvelocity(ByteStreamUtils.popDoubleFromByteQueue(byteStream));
|
||||||
rVal.settreeState(ByteStreamUtils.popIntFromByteQueue(byteStream));
|
rVal.settreeState(ByteStreamUtils.popIntFromByteQueue(byteStream));
|
||||||
return rVal;
|
return rVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static EntityMessage constructmoveUpdateMessage(int entityID,long time,double positionX,double positionY,double positionZ,float rotationX,float rotationY,float rotationZ,float velocity,int treeState){
|
public static EntityMessage constructmoveUpdateMessage(int entityID,long time,double positionX,double positionY,double positionZ,double rotationX,double rotationY,double rotationZ,double velocity,int treeState){
|
||||||
EntityMessage rVal = new EntityMessage(EntityMessageType.MOVEUPDATE);
|
EntityMessage rVal = new EntityMessage(EntityMessageType.MOVEUPDATE);
|
||||||
rVal.setentityID(entityID);
|
rVal.setentityID(entityID);
|
||||||
rVal.settime(time);
|
rVal.settime(time);
|
||||||
@ -406,15 +406,15 @@ public class EntityMessage extends NetworkMessage {
|
|||||||
rVal.setpositionX(ByteStreamUtils.popDoubleFromByteQueue(byteStream));
|
rVal.setpositionX(ByteStreamUtils.popDoubleFromByteQueue(byteStream));
|
||||||
rVal.setpositionY(ByteStreamUtils.popDoubleFromByteQueue(byteStream));
|
rVal.setpositionY(ByteStreamUtils.popDoubleFromByteQueue(byteStream));
|
||||||
rVal.setpositionZ(ByteStreamUtils.popDoubleFromByteQueue(byteStream));
|
rVal.setpositionZ(ByteStreamUtils.popDoubleFromByteQueue(byteStream));
|
||||||
rVal.setrotationX(ByteStreamUtils.popFloatFromByteQueue(byteStream));
|
rVal.setrotationX(ByteStreamUtils.popDoubleFromByteQueue(byteStream));
|
||||||
rVal.setrotationY(ByteStreamUtils.popFloatFromByteQueue(byteStream));
|
rVal.setrotationY(ByteStreamUtils.popDoubleFromByteQueue(byteStream));
|
||||||
rVal.setrotationZ(ByteStreamUtils.popFloatFromByteQueue(byteStream));
|
rVal.setrotationZ(ByteStreamUtils.popDoubleFromByteQueue(byteStream));
|
||||||
rVal.setvelocity(ByteStreamUtils.popFloatFromByteQueue(byteStream));
|
rVal.setvelocity(ByteStreamUtils.popDoubleFromByteQueue(byteStream));
|
||||||
rVal.settreeState(ByteStreamUtils.popIntFromByteQueue(byteStream));
|
rVal.settreeState(ByteStreamUtils.popIntFromByteQueue(byteStream));
|
||||||
return rVal;
|
return rVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static EntityMessage constructattackUpdateMessage(int entityID,long time,double positionX,double positionY,double positionZ,float rotationX,float rotationY,float rotationZ,float velocity,int treeState){
|
public static EntityMessage constructattackUpdateMessage(int entityID,long time,double positionX,double positionY,double positionZ,double rotationX,double rotationY,double rotationZ,double velocity,int treeState){
|
||||||
EntityMessage rVal = new EntityMessage(EntityMessageType.ATTACKUPDATE);
|
EntityMessage rVal = new EntityMessage(EntityMessageType.ATTACKUPDATE);
|
||||||
rVal.setentityID(entityID);
|
rVal.setentityID(entityID);
|
||||||
rVal.settime(time);
|
rVal.settime(time);
|
||||||
@ -617,7 +617,7 @@ public class EntityMessage extends NetworkMessage {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SETFACING:
|
case SETFACING:
|
||||||
rawBytes = new byte[2+4+8+4+4+4];
|
rawBytes = new byte[2+4+8+8+8+8];
|
||||||
//message header
|
//message header
|
||||||
rawBytes[0] = TypeBytes.MESSAGE_TYPE_ENTITY;
|
rawBytes[0] = TypeBytes.MESSAGE_TYPE_ENTITY;
|
||||||
//entity messaage header
|
//entity messaage header
|
||||||
@ -630,18 +630,21 @@ public class EntityMessage extends NetworkMessage {
|
|||||||
for(int i = 0; i < 8; i++){
|
for(int i = 0; i < 8; i++){
|
||||||
rawBytes[6+i] = intValues[i];
|
rawBytes[6+i] = intValues[i];
|
||||||
}
|
}
|
||||||
intValues = ByteStreamUtils.serializeFloatToBytes(rotationX);
|
intValues = ByteStreamUtils.serializeDoubleToBytes(rotationX);
|
||||||
for(int i = 0; i < 4; i++){
|
for(int i = 0; i < 8; i++){
|
||||||
rawBytes[14+i] = intValues[i];
|
rawBytes[14+i] = intValues[i];
|
||||||
} intValues = ByteStreamUtils.serializeFloatToBytes(rotationY);
|
}
|
||||||
for(int i = 0; i < 4; i++){
|
intValues = ByteStreamUtils.serializeDoubleToBytes(rotationY);
|
||||||
rawBytes[18+i] = intValues[i];
|
for(int i = 0; i < 8; i++){
|
||||||
} intValues = ByteStreamUtils.serializeFloatToBytes(rotationZ);
|
|
||||||
for(int i = 0; i < 4; i++){
|
|
||||||
rawBytes[22+i] = intValues[i];
|
rawBytes[22+i] = intValues[i];
|
||||||
} break;
|
}
|
||||||
|
intValues = ByteStreamUtils.serializeDoubleToBytes(rotationZ);
|
||||||
|
for(int i = 0; i < 8; i++){
|
||||||
|
rawBytes[30+i] = intValues[i];
|
||||||
|
}
|
||||||
|
break;
|
||||||
case MOVEUPDATE:
|
case MOVEUPDATE:
|
||||||
rawBytes = new byte[2+4+8+8+8+8+4+4+4+4+4];
|
rawBytes = new byte[2+4+8+8+8+8+8+8+8+8+4];
|
||||||
//message header
|
//message header
|
||||||
rawBytes[0] = TypeBytes.MESSAGE_TYPE_ENTITY;
|
rawBytes[0] = TypeBytes.MESSAGE_TYPE_ENTITY;
|
||||||
//entity messaage header
|
//entity messaage header
|
||||||
@ -666,25 +669,29 @@ public class EntityMessage extends NetworkMessage {
|
|||||||
for(int i = 0; i < 8; i++){
|
for(int i = 0; i < 8; i++){
|
||||||
rawBytes[30+i] = intValues[i];
|
rawBytes[30+i] = intValues[i];
|
||||||
}
|
}
|
||||||
intValues = ByteStreamUtils.serializeFloatToBytes(rotationX);
|
intValues = ByteStreamUtils.serializeDoubleToBytes(rotationX);
|
||||||
for(int i = 0; i < 4; i++){
|
for(int i = 0; i < 8; i++){
|
||||||
rawBytes[38+i] = intValues[i];
|
rawBytes[38+i] = intValues[i];
|
||||||
} intValues = ByteStreamUtils.serializeFloatToBytes(rotationY);
|
}
|
||||||
for(int i = 0; i < 4; i++){
|
intValues = ByteStreamUtils.serializeDoubleToBytes(rotationY);
|
||||||
rawBytes[42+i] = intValues[i];
|
for(int i = 0; i < 8; i++){
|
||||||
} intValues = ByteStreamUtils.serializeFloatToBytes(rotationZ);
|
|
||||||
for(int i = 0; i < 4; i++){
|
|
||||||
rawBytes[46+i] = intValues[i];
|
rawBytes[46+i] = intValues[i];
|
||||||
} intValues = ByteStreamUtils.serializeFloatToBytes(velocity);
|
}
|
||||||
for(int i = 0; i < 4; i++){
|
intValues = ByteStreamUtils.serializeDoubleToBytes(rotationZ);
|
||||||
rawBytes[50+i] = intValues[i];
|
for(int i = 0; i < 8; i++){
|
||||||
} intValues = ByteStreamUtils.serializeIntToBytes(treeState);
|
|
||||||
for(int i = 0; i < 4; i++){
|
|
||||||
rawBytes[54+i] = intValues[i];
|
rawBytes[54+i] = intValues[i];
|
||||||
}
|
}
|
||||||
|
intValues = ByteStreamUtils.serializeDoubleToBytes(velocity);
|
||||||
|
for(int i = 0; i < 8; i++){
|
||||||
|
rawBytes[62+i] = intValues[i];
|
||||||
|
}
|
||||||
|
intValues = ByteStreamUtils.serializeIntToBytes(treeState);
|
||||||
|
for(int i = 0; i < 4; i++){
|
||||||
|
rawBytes[70+i] = intValues[i];
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case ATTACKUPDATE:
|
case ATTACKUPDATE:
|
||||||
rawBytes = new byte[2+4+8+8+8+8+4+4+4+4+4];
|
rawBytes = new byte[2+4+8+8+8+8+8+8+8+8+4];
|
||||||
//message header
|
//message header
|
||||||
rawBytes[0] = TypeBytes.MESSAGE_TYPE_ENTITY;
|
rawBytes[0] = TypeBytes.MESSAGE_TYPE_ENTITY;
|
||||||
//entity messaage header
|
//entity messaage header
|
||||||
@ -709,22 +716,26 @@ public class EntityMessage extends NetworkMessage {
|
|||||||
for(int i = 0; i < 8; i++){
|
for(int i = 0; i < 8; i++){
|
||||||
rawBytes[30+i] = intValues[i];
|
rawBytes[30+i] = intValues[i];
|
||||||
}
|
}
|
||||||
intValues = ByteStreamUtils.serializeFloatToBytes(rotationX);
|
intValues = ByteStreamUtils.serializeDoubleToBytes(rotationX);
|
||||||
for(int i = 0; i < 4; i++){
|
for(int i = 0; i < 8; i++){
|
||||||
rawBytes[38+i] = intValues[i];
|
rawBytes[38+i] = intValues[i];
|
||||||
} intValues = ByteStreamUtils.serializeFloatToBytes(rotationY);
|
}
|
||||||
for(int i = 0; i < 4; i++){
|
intValues = ByteStreamUtils.serializeDoubleToBytes(rotationY);
|
||||||
rawBytes[42+i] = intValues[i];
|
for(int i = 0; i < 8; i++){
|
||||||
} intValues = ByteStreamUtils.serializeFloatToBytes(rotationZ);
|
|
||||||
for(int i = 0; i < 4; i++){
|
|
||||||
rawBytes[46+i] = intValues[i];
|
rawBytes[46+i] = intValues[i];
|
||||||
} intValues = ByteStreamUtils.serializeFloatToBytes(velocity);
|
}
|
||||||
for(int i = 0; i < 4; i++){
|
intValues = ByteStreamUtils.serializeDoubleToBytes(rotationZ);
|
||||||
rawBytes[50+i] = intValues[i];
|
for(int i = 0; i < 8; i++){
|
||||||
} intValues = ByteStreamUtils.serializeIntToBytes(treeState);
|
|
||||||
for(int i = 0; i < 4; i++){
|
|
||||||
rawBytes[54+i] = intValues[i];
|
rawBytes[54+i] = intValues[i];
|
||||||
}
|
}
|
||||||
|
intValues = ByteStreamUtils.serializeDoubleToBytes(velocity);
|
||||||
|
for(int i = 0; i < 8; i++){
|
||||||
|
rawBytes[62+i] = intValues[i];
|
||||||
|
}
|
||||||
|
intValues = ByteStreamUtils.serializeIntToBytes(treeState);
|
||||||
|
for(int i = 0; i < 4; i++){
|
||||||
|
rawBytes[70+i] = intValues[i];
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case MOVE:
|
case MOVE:
|
||||||
rawBytes = new byte[2+4+8+8+8+8];
|
rawBytes = new byte[2+4+8+8+8+8];
|
||||||
|
|||||||
@ -64,9 +64,9 @@ Message categories
|
|||||||
Entity packet sizes
|
Entity packet sizes
|
||||||
*/
|
*/
|
||||||
public static final byte ENTITY_MESSAGE_TYPE_SETPOSITION_SIZE = 38;
|
public static final byte ENTITY_MESSAGE_TYPE_SETPOSITION_SIZE = 38;
|
||||||
public static final byte ENTITY_MESSAGE_TYPE_SETFACING_SIZE = 26;
|
public static final byte ENTITY_MESSAGE_TYPE_SETFACING_SIZE = 38;
|
||||||
public static final byte ENTITY_MESSAGE_TYPE_MOVEUPDATE_SIZE = 58;
|
public static final byte ENTITY_MESSAGE_TYPE_MOVEUPDATE_SIZE = 74;
|
||||||
public static final byte ENTITY_MESSAGE_TYPE_ATTACKUPDATE_SIZE = 58;
|
public static final byte ENTITY_MESSAGE_TYPE_ATTACKUPDATE_SIZE = 74;
|
||||||
public static final byte ENTITY_MESSAGE_TYPE_MOVE_SIZE = 38;
|
public static final byte ENTITY_MESSAGE_TYPE_MOVE_SIZE = 38;
|
||||||
public static final byte ENTITY_MESSAGE_TYPE_DESTROY_SIZE = 6;
|
public static final byte ENTITY_MESSAGE_TYPE_DESTROY_SIZE = 6;
|
||||||
public static final byte ENTITY_MESSAGE_TYPE_SETBEHAVIORTREE_SIZE = 22;
|
public static final byte ENTITY_MESSAGE_TYPE_SETBEHAVIORTREE_SIZE = 22;
|
||||||
|
|||||||
@ -97,7 +97,7 @@ public class ServerConnectionHandler implements Runnable {
|
|||||||
Player newPlayerObject = new Player(this);
|
Player newPlayerObject = new Player(this);
|
||||||
Globals.playerManager.addPlayer(newPlayerObject);
|
Globals.playerManager.addPlayer(newPlayerObject);
|
||||||
//spawn player in world
|
//spawn player in world
|
||||||
Entity newPlayerCharacter = CreatureUtils.spawnBasicCreature("Human");
|
Entity newPlayerCharacter = CreatureUtils.spawnBasicCreature("Goblin");
|
||||||
playerCharacterID = newPlayerCharacter.getId();
|
playerCharacterID = newPlayerCharacter.getId();
|
||||||
CollisionObjUtils.positionCharacter(newPlayerCharacter, new Vector3f(Globals.spawnPoint.x,Globals.spawnPoint.y,Globals.spawnPoint.z));
|
CollisionObjUtils.positionCharacter(newPlayerCharacter, new Vector3f(Globals.spawnPoint.x,Globals.spawnPoint.y,Globals.spawnPoint.z));
|
||||||
//attach player object to player character
|
//attach player object to player character
|
||||||
|
|||||||
@ -208,6 +208,11 @@ public class Model {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(currentAnimation != null){
|
if(currentAnimation != null){
|
||||||
|
// if(s.contains("Walk")){
|
||||||
|
// currentAnimation.describeAnimation();
|
||||||
|
//// currentAnimation.fullDescribeAnimation();
|
||||||
|
// System.exit(0);
|
||||||
|
// }
|
||||||
currentAnimation.timeCurrent = 0;
|
currentAnimation.timeCurrent = 0;
|
||||||
Iterator<AnimChannel> channelIterator = currentAnimation.channels.iterator();
|
Iterator<AnimChannel> channelIterator = currentAnimation.channels.iterator();
|
||||||
while(channelIterator.hasNext()){
|
while(channelIterator.hasNext()){
|
||||||
|
|||||||
@ -495,19 +495,19 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name" : "rotationX",
|
"name" : "rotationX",
|
||||||
"type" : "FIXED_FLOAT"
|
"type" : "FIXED_DOUBLE"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name" : "rotationY",
|
"name" : "rotationY",
|
||||||
"type" : "FIXED_FLOAT"
|
"type" : "FIXED_DOUBLE"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name" : "rotationZ",
|
"name" : "rotationZ",
|
||||||
"type" : "FIXED_FLOAT"
|
"type" : "FIXED_DOUBLE"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name" : "velocity",
|
"name" : "velocity",
|
||||||
"type" : "FIXED_FLOAT"
|
"type" : "FIXED_DOUBLE"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name" : "treeState",
|
"name" : "treeState",
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user