From 29f5496e23c532a88c2871a052d61d4b1147b15a Mon Sep 17 00:00:00 2001 From: austin Date: Fri, 24 May 2024 22:52:42 -0400 Subject: [PATCH] foliage fix, first person view model, other fixes --- assets/Data/creatures/human.json | 65 ++++++++- assets/Models/creatures/viewmodel.glb | Bin 0 -> 505060 bytes buildNumber.properties | 4 +- docs/src/progress/renderertodo.md | 42 +++++- .../foliagemanager/ClientFoliageManager.java | 37 +++--- .../controls/ControlHandler.java | 40 +++--- .../java/electrosphere/engine/Globals.java | 2 + .../engine/loadingthreads/ClientLoading.java | 2 +- .../entity/EntityDataStrings.java | 1 + .../entity/state/attack/ClientAttackTree.java | 30 ++++- .../ambientaudio/ClientAmbientAudioTree.java | 2 +- .../client/firstPerson/FirstPersonTree.java | 123 ++++++++++++++++++ .../entity/state/equip/ClientEquipState.java | 43 +++++- .../entity/state/idle/IdleTree.java | 14 +- .../entity/state/movement/FallTree.java | 71 +++++----- .../entity/state/movement/JumpTree.java | 14 +- .../groundmove/ClientGroundMovementTree.java | 10 +- .../groundmove/ServerGroundMovementTree.java | 32 ++--- .../entity/types/attach/AttachUtils.java | 6 +- .../types/camera/CameraEntityUtils.java | 20 +++ .../entity/types/creature/CreatureUtils.java | 20 ++- .../entity/types/foliage/FoliageUtils.java | 2 +- .../game/data/creature/type/CreatureType.java | 13 ++ .../game/data/creature/type/IdleData.java | 30 +++++ .../data/creature/type/ViewModelData.java | 54 ++++++++ .../data/creature/type/attack/AttackMove.java | 99 +++++++++++++- .../data/creature/type/equip/EquipPoint.java | 38 ++++++ .../type/movement/FallMovementSystem.java | 34 ++++- .../type/movement/GroundMovementSystem.java | 65 +++++++++ .../type/movement/JumpMovementSystem.java | 7 +- .../game/data/foliage/type/TreeModel.java | 22 ++++ .../electrosphere/logger/LoggerInterface.java | 2 +- .../net/client/protocol/EntityProtocol.java | 48 +++++-- .../renderer/RenderingEngine.java | 9 ++ .../electrosphere/renderer/actor/Actor.java | 17 +++ .../renderer/actor/ActorShaderMask.java | 36 +++++ .../framebuffer/FramebufferUtils.java | 3 +- .../electrosphere/renderer/model/Model.java | 12 +- .../renderer/pipelines/CompositePipeline.java | 46 +++++++ .../pipelines/FirstPersonItemsPipeline.java | 108 ++++++++++++++- .../server/simulation/MicroSimulation.java | 9 ++ .../terrain/editing/TerrainEditing.java | 8 +- 42 files changed, 1076 insertions(+), 164 deletions(-) create mode 100644 assets/Models/creatures/viewmodel.glb rename src/main/java/electrosphere/entity/state/{ => client}/ambientaudio/ClientAmbientAudioTree.java (98%) create mode 100644 src/main/java/electrosphere/entity/state/client/firstPerson/FirstPersonTree.java create mode 100644 src/main/java/electrosphere/game/data/creature/type/IdleData.java create mode 100644 src/main/java/electrosphere/game/data/creature/type/ViewModelData.java diff --git a/assets/Data/creatures/human.json b/assets/Data/creatures/human.json index 9cfb526f..4028b721 100644 --- a/assets/Data/creatures/human.json +++ b/assets/Data/creatures/human.json @@ -134,16 +134,25 @@ "length" : 1, "loops" : false }, + "animationFirstPersonStartup" : { + "name" : "Jog" + }, "animationLoop" : { "name" : "Jog", "length" : 1, "loops" : false }, + "animationFirstPersonLoop" : { + "name" : "Jog" + }, "animationWindDown" : { "name" : "Jog", "length" : 1, "loops" : false }, + "animationFirstPersonWindDown" : { + "name" : "Jog" + }, "sprintSystem" : { "maxVelocity" : 0.058, "staminaMax" : 500, @@ -167,6 +176,9 @@ "name" : "Jump", "length" : 1, "loops" : false + }, + "animationFirstPersonJump" : { + "name" : "Jump" } }, { @@ -176,10 +188,16 @@ "length" : 1, "loops" : true }, + "animationFirstPersonFall" : { + "name" : "Fall" + }, "animationLand" : { "name" : "Land", "length" : 1, "loops" : true + }, + "animationFirstPersonLand" : { + "name" : "Land" } } ], @@ -224,6 +242,7 @@ { "equipPointId" : "handLeft", "bone" : "MiddleLower.L", + "firstPersonBone" : "hand.L", "offsetVector" : [], "offsetRotation" : [], "equipClassWhitelist" : [ @@ -235,6 +254,7 @@ { "equipPointId" : "handRight", "bone" : "MiddleLower.R", + "firstPersonBone" : "hand.R", "offsetVector" : [], "offsetRotation" : [0.3057,0.2926,0.09933,0.9006], "equipClassWhitelist" : [ @@ -294,7 +314,16 @@ "driftGoal" : 0.02, "driftFrameStart" : 7, "driftFrameEnd" : 15, - "initialMove" : true + "initialMove" : true, + "animationFirstPersonWindup" : { + "name" : "Jump" + }, + "animationFirstPersonHold" : { + "name" : "Jump" + }, + "animationFirstPersonAttack" : { + "name" : "Jump" + } }, { "attackMoveId" : "Sword1HSlash2", @@ -310,7 +339,16 @@ "driftGoal" : 0.03, "driftFrameStart" : 1, "driftFrameEnd" : 10, - "initialMove" : false + "initialMove" : false, + "animationFirstPersonWindup" : { + "name" : "Jump" + }, + "animationFirstPersonHold" : { + "name" : "Jump" + }, + "animationFirstPersonAttack" : { + "name" : "Jump" + } }, { "attackMoveId" : "Bow2HFire", @@ -327,14 +365,33 @@ "movementStart" : 0, "movementEnd" : 0, "movementGoal" : 0, - "initialMove" : true + "initialMove" : true, + "animationFirstPersonWindup" : { + "name" : "Jump" + }, + "animationFirstPersonHold" : { + "name" : "Jump" + }, + "animationFirstPersonAttack" : { + "name" : "Jump" + } } ], "healthSystem" : { "maxHealth" : 100, "onDamageIFrames" : 30 }, - "modelPath" : "Models/creatures/person2/person2_1.glb" + "idleData": { + "idleAnimation" : "Idle1", + "firstPersonIdleAnimation" : "Idle" + }, + "modelPath" : "Models/creatures/person2/person2_1.glb", + "viewModelData" : { + "heightFromOrigin" : 0.8, + "cameraViewDirOffsetY" : -0.3, + "cameraViewDirOffsetZ" : 0.0, + "firstPersonModelPath" : "Models/creatures/viewmodel.glb" + } } ], "files" : [] diff --git a/assets/Models/creatures/viewmodel.glb b/assets/Models/creatures/viewmodel.glb new file mode 100644 index 0000000000000000000000000000000000000000..f257e2d2a8f0529cc2a62eb9bcf4a95580efc319 GIT binary patch literal 505060 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
?BCfS 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

ZU(kHjyQek$!j|r+ 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 hX14KTPZ>WvpPtX3iF|r7ho=0){ - if(relativePositionOnGridZ >= 0){ - relativePositionOnGridX += 0.5; - relativePositionOnGridZ += 0.5; + if(relativePositionOnGridX >=0.5){ + if(relativePositionOnGridZ >= 0.5){ + relativePositionOnGridX = relativePositionOnGridX - 0.5; + relativePositionOnGridZ = relativePositionOnGridZ - 0.5; + relativePositionOnGridX /= 0.5; + relativePositionOnGridZ /= 0.5; + // System.out.println(relativePositionOnGridX + " " + relativePositionOnGridZ); //if we have heights for all four surrounding spots, interpolate for y value if(sample_11 != null && sample_12 != null && sample_21 != null && sample_22 != null){ offsetY = @@ -416,8 +417,9 @@ public class ClientFoliageManager { addBlade = true; } } else { - relativePositionOnGridX += 0.5; - relativePositionOnGridZ += 0.5; + relativePositionOnGridX = relativePositionOnGridX - 0.5; + relativePositionOnGridX /= 0.5; + relativePositionOnGridZ /= 0.5; //if we have heights for all four surrounding spots, interpolate for y value if(sample_10 != null && sample_11 != null && sample_20 != null && sample_21 != null){ offsetY = @@ -429,9 +431,10 @@ public class ClientFoliageManager { } } } else { - if(relativePositionOnGridZ >= 0){ - relativePositionOnGridX += 0.5; - relativePositionOnGridZ += 0.5; + if(relativePositionOnGridZ >= 0.5){ + relativePositionOnGridZ = relativePositionOnGridZ - 0.5; + relativePositionOnGridX /= 0.5; + relativePositionOnGridZ /= 0.5; //if we have heights for all four surrounding spots, interpolate for y value if(sample_01 != null && sample_02 != null && sample_11 != null && sample_12 != null){ offsetY = @@ -442,8 +445,8 @@ public class ClientFoliageManager { addBlade = true; } } else { - relativePositionOnGridX += 0.5; - relativePositionOnGridZ += 0.5; + relativePositionOnGridX /= 0.5; + relativePositionOnGridZ /= 0.5; //if we have heights for all four surrounding spots, interpolate for y value if(sample_00 != null && sample_01 != null && sample_10 != null && sample_11 != null){ offsetY = diff --git a/src/main/java/electrosphere/controls/ControlHandler.java b/src/main/java/electrosphere/controls/ControlHandler.java index 1bea9d0b..e6087bdc 100644 --- a/src/main/java/electrosphere/controls/ControlHandler.java +++ b/src/main/java/electrosphere/controls/ControlHandler.java @@ -475,14 +475,14 @@ public class ControlHandler { if(movementTree instanceof ClientGroundMovementTree){ ClientGroundMovementTree groundTree = (ClientGroundMovementTree) movementTree; Vector3f cameraEyeVector = CameraEntityUtils.getCameraEye(Globals.playerCamera); - if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT).isState()){ + if(controls.get(DATA_STRING_INPUT_CODE_STRAFE_LEFT).isState()){ Vector3d newFacingVector = new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY(Math.PI/4.0).normalize(); CreatureUtils.setFacingVector(Globals.playerEntity, newFacingVector); - groundTree.start(MovementRelativeFacing.FORWARD); - } else if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT).isState()){ + groundTree.start(MovementRelativeFacing.FORWARD_LEFT); + } else if(controls.get(DATA_STRING_INPUT_CODE_STRAFE_RIGHT).isState()){ Vector3d newFacingVector = new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY(-Math.PI/4.0).normalize(); CreatureUtils.setFacingVector(Globals.playerEntity, newFacingVector); - groundTree.start(MovementRelativeFacing.FORWARD); + groundTree.start(MovementRelativeFacing.FORWARD_RIGHT); } else { Vector3d newFacingVector = new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).normalize(); CreatureUtils.setFacingVector(Globals.playerEntity, newFacingVector); @@ -497,14 +497,14 @@ public class ControlHandler { if(movementTree instanceof ClientGroundMovementTree){ ClientGroundMovementTree groundTree = (ClientGroundMovementTree) movementTree; Vector3f cameraEyeVector = CameraEntityUtils.getCameraEye(Globals.playerCamera); - if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT).isState()){ + if(controls.get(DATA_STRING_INPUT_CODE_STRAFE_LEFT).isState()){ Vector3d newFacingVector = new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY(Math.PI/4.0).normalize(); CreatureUtils.setFacingVector(Globals.playerEntity, newFacingVector); - groundTree.start(MovementRelativeFacing.FORWARD); - } else if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT).isState()){ + groundTree.start(MovementRelativeFacing.FORWARD_LEFT); + } else if(controls.get(DATA_STRING_INPUT_CODE_STRAFE_RIGHT).isState()){ Vector3d newFacingVector = new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY(-Math.PI/4.0).normalize(); CreatureUtils.setFacingVector(Globals.playerEntity, newFacingVector); - groundTree.start(MovementRelativeFacing.FORWARD); + groundTree.start(MovementRelativeFacing.FORWARD_RIGHT); } else { Vector3d newFacingVector = new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).normalize(); CreatureUtils.setFacingVector(Globals.playerEntity, newFacingVector); @@ -532,15 +532,15 @@ public class ControlHandler { if(movementTree instanceof ClientGroundMovementTree){ ClientGroundMovementTree groundTree = (ClientGroundMovementTree) movementTree; Vector3f cameraEyeVector = CameraEntityUtils.getCameraEye(Globals.playerCamera); - if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT).isState()){ + if(controls.get(DATA_STRING_INPUT_CODE_STRAFE_LEFT).isState()){ CreatureUtils.setFacingVector(Globals.playerEntity, new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY(3.0/4.0*Math.PI).normalize()); - groundTree.start(MovementRelativeFacing.FORWARD); - } else if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT).isState()){ + groundTree.start(MovementRelativeFacing.BACKWARD_LEFT); + } else if(controls.get(DATA_STRING_INPUT_CODE_STRAFE_RIGHT).isState()){ CreatureUtils.setFacingVector(Globals.playerEntity, new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY(5.0/4.0*Math.PI).normalize()); - groundTree.start(MovementRelativeFacing.FORWARD); + groundTree.start(MovementRelativeFacing.BACKWARD_RIGHT); } else { - CreatureUtils.setFacingVector(Globals.playerEntity, new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY(Math.PI).normalize()); - groundTree.start(MovementRelativeFacing.FORWARD); + CreatureUtils.setFacingVector(Globals.playerEntity, new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).normalize()); + groundTree.start(MovementRelativeFacing.BACKWARD); } } } @@ -551,15 +551,15 @@ public class ControlHandler { if(movementTree instanceof ClientGroundMovementTree){ ClientGroundMovementTree groundTree = (ClientGroundMovementTree) movementTree; Vector3f cameraEyeVector = CameraEntityUtils.getCameraEye(Globals.playerCamera); - if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT).isState()){ + if(controls.get(DATA_STRING_INPUT_CODE_STRAFE_LEFT).isState()){ CreatureUtils.setFacingVector(Globals.playerEntity, new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY(3.0/4.0*Math.PI).normalize()); - groundTree.start(MovementRelativeFacing.FORWARD); - } else if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT).isState()){ + groundTree.start(MovementRelativeFacing.BACKWARD_LEFT); + } else if(controls.get(DATA_STRING_INPUT_CODE_STRAFE_RIGHT).isState()){ CreatureUtils.setFacingVector(Globals.playerEntity, new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY(5.0/4.0*Math.PI).normalize()); - groundTree.start(MovementRelativeFacing.FORWARD); + groundTree.start(MovementRelativeFacing.BACKWARD_RIGHT); } else { - CreatureUtils.setFacingVector(Globals.playerEntity, new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY(Math.PI).normalize()); - groundTree.start(MovementRelativeFacing.FORWARD); + CreatureUtils.setFacingVector(Globals.playerEntity, new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).normalize()); + groundTree.start(MovementRelativeFacing.BACKWARD); } } } diff --git a/src/main/java/electrosphere/engine/Globals.java b/src/main/java/electrosphere/engine/Globals.java index e8d43980..29a0eaec 100644 --- a/src/main/java/electrosphere/engine/Globals.java +++ b/src/main/java/electrosphere/engine/Globals.java @@ -369,6 +369,8 @@ public class Globals { //the creature the player camera will orbit and will receive controlHandler movementTree updates public static Entity playerEntity; + //the entity for the first person modal (view model) + public static Entity firstPersonEntity; //client current selected voxel type public static VoxelType clientSelectedVoxelType = null; diff --git a/src/main/java/electrosphere/engine/loadingthreads/ClientLoading.java b/src/main/java/electrosphere/engine/loadingthreads/ClientLoading.java index 31d07b81..7b518b4a 100644 --- a/src/main/java/electrosphere/engine/loadingthreads/ClientLoading.java +++ b/src/main/java/electrosphere/engine/loadingthreads/ClientLoading.java @@ -182,7 +182,7 @@ public class ClientLoading { Globals.playerCamera = CameraEntityUtils.spawnPlayerEntityTrackingCameraFirstPersonEntity(new Vector3f(1,0,1), new Vector3f(0,0,1)); } - + /* Targeting crosshair diff --git a/src/main/java/electrosphere/entity/EntityDataStrings.java b/src/main/java/electrosphere/entity/EntityDataStrings.java index 024ad915..6bb350a0 100644 --- a/src/main/java/electrosphere/entity/EntityDataStrings.java +++ b/src/main/java/electrosphere/entity/EntityDataStrings.java @@ -70,6 +70,7 @@ public class EntityDataStrings { public static final String SERVER_JUMP_TREE = "serverJumpTree"; public static final String FALL_TREE = "fallTree"; public static final String CREATURE_TEMPLATE = "creatureTemplate"; + public static final String FIRST_PERSON_TREE = "firstPersonTree"; /* diff --git a/src/main/java/electrosphere/entity/state/attack/ClientAttackTree.java b/src/main/java/electrosphere/entity/state/attack/ClientAttackTree.java index 8d24bd45..96caecf2 100644 --- a/src/main/java/electrosphere/entity/state/attack/ClientAttackTree.java +++ b/src/main/java/electrosphere/entity/state/attack/ClientAttackTree.java @@ -11,6 +11,7 @@ import electrosphere.entity.EntityDataStrings; import electrosphere.entity.EntityUtils; import electrosphere.entity.ServerEntityUtils; import electrosphere.entity.btree.BehaviorTree; +import electrosphere.entity.state.client.firstPerson.FirstPersonTree; import electrosphere.entity.state.collidable.Impulse; import electrosphere.entity.state.equip.ClientEquipState; import electrosphere.entity.state.movement.groundmove.ClientGroundMovementTree; @@ -48,6 +49,9 @@ import org.joml.Vector3f; public class ClientAttackTree implements BehaviorTree { @SynchronizableEnum + /** + * States available to the attack tree + */ public static enum AttackTreeState { WINDUP, HOLD, @@ -56,29 +60,39 @@ public class ClientAttackTree implements BehaviorTree { IDLE, } - //the state of drifting forward during the attack @SynchronizableEnum + /** + * The state of drifting forward during the attack + */ public static enum AttackTreeDriftState { DRIFT, NO_DRIFT, } + //the current state of the tree @SyncedField AttackTreeState state; + //the current state of drifting caused by the tree @SyncedField AttackTreeDriftState driftState; + //the parent entity of this attack tree Entity parent; + //the queue of network messages to process CopyOnWriteArrayList networkMessageQueue = new CopyOnWriteArrayList(); + //the last time this tree was updated by server long lastUpdateTime = 0; + //the current frame of the current animation/move float frameCurrent; + //the name of the current animation String animationName = "SwingWeapon"; + //the max frame int maxFrame = 60; List currentMoveset = null; @@ -239,13 +253,14 @@ public class ClientAttackTree implements BehaviorTree { if(parent.containsKey(EntityDataStrings.CLIENT_ROTATOR_TREE)){ RotatorTree.getClientRotatorTree(parent).setActive(true); } - if(entityActor != null){ - if(!entityActor.isPlayingAnimation() || !entityActor.isPlayingAnimation(animationName)){ - entityActor.playAnimation(animationName,1); - entityActor.incrementAnimationTime(0.0001); - } - } if(currentMove != null && frameCurrent > currentMove.getWindupFrames()){ + if(entityActor != null){ + if(!entityActor.isPlayingAnimation() || !entityActor.isPlayingAnimation(currentMove.getWindupAnimationName())){ + entityActor.playAnimation(currentMove.getWindupAnimationName(),1); + entityActor.incrementAnimationTime(0.0001); + } + FirstPersonTree.conditionallyPlayAnimation(Globals.firstPersonEntity, currentMove.getAnimationFirstPersonWindup().getName()); + } if(currentMoveCanHold && stillHold){ state = AttackTreeState.HOLD; } else { @@ -259,6 +274,7 @@ public class ClientAttackTree implements BehaviorTree { entityActor.playAnimation(animationName,1); entityActor.incrementAnimationTime(0.0001); } + FirstPersonTree.conditionallyPlayAnimation(Globals.firstPersonEntity, currentMove.getAnimationFirstPersonHold().getName()); } if(!stillHold){ state = AttackTreeState.ATTACK; diff --git a/src/main/java/electrosphere/entity/state/ambientaudio/ClientAmbientAudioTree.java b/src/main/java/electrosphere/entity/state/client/ambientaudio/ClientAmbientAudioTree.java similarity index 98% rename from src/main/java/electrosphere/entity/state/ambientaudio/ClientAmbientAudioTree.java rename to src/main/java/electrosphere/entity/state/client/ambientaudio/ClientAmbientAudioTree.java index b44a36f2..72d9e3c8 100644 --- a/src/main/java/electrosphere/entity/state/ambientaudio/ClientAmbientAudioTree.java +++ b/src/main/java/electrosphere/entity/state/client/ambientaudio/ClientAmbientAudioTree.java @@ -1,4 +1,4 @@ -package electrosphere.entity.state.ambientaudio; +package electrosphere.entity.state.client.ambientaudio; import org.joml.Vector3d; diff --git a/src/main/java/electrosphere/entity/state/client/firstPerson/FirstPersonTree.java b/src/main/java/electrosphere/entity/state/client/firstPerson/FirstPersonTree.java new file mode 100644 index 00000000..613e308e --- /dev/null +++ b/src/main/java/electrosphere/entity/state/client/firstPerson/FirstPersonTree.java @@ -0,0 +1,123 @@ +package electrosphere.entity.state.client.firstPerson; + +import electrosphere.engine.Globals; +import electrosphere.entity.Entity; +import electrosphere.entity.EntityDataStrings; +import electrosphere.entity.EntityUtils; +import electrosphere.entity.btree.BehaviorTree; +import electrosphere.renderer.actor.Actor; + +/** + * Manages the animations for the first person view model + */ +public class FirstPersonTree implements BehaviorTree { + + + //the offset from the origin to place the viewmodel + double heightFromOrigin; + + //the amount to pull below the camera + double cameraViewDirOffsetY; + + //the amount to pull behind the camera + double cameraViewDirOffsetZ; + + //the animation to play currently + String currentAnimation = "Idle"; + + @Override + public void simulate(float deltaTime) { + if(Globals.firstPersonEntity != null){ + Actor actor = EntityUtils.getActor(Globals.firstPersonEntity); + if( + (!actor.isPlayingAnimation() || !actor.isPlayingAnimation(currentAnimation)) && + (Globals.assetManager.fetchModel(actor.getModelPath()) != null && Globals.assetManager.fetchModel(actor.getModelPath()).getAnimation(currentAnimation) != null) + + ){ + actor.playAnimation(currentAnimation,3); + actor.incrementAnimationTime(0.0001); + } + } + } + + /** + * Attaches this tree to the entity. + * @param entity The entity to attach to + * @param heightFromOrigin How far from the origin of the creature to place the viewmodel + * @param cameraViewDirOffset How far to pull the view model behind the camera + */ + public static FirstPersonTree attachTree(Entity parent, double heightFromOrigin, double cameraViewDirOffsetY, double cameraViewDirOffsetZ){ + FirstPersonTree rVal = new FirstPersonTree(); + + rVal.heightFromOrigin = heightFromOrigin; + rVal.cameraViewDirOffsetY = cameraViewDirOffsetY; + rVal.cameraViewDirOffsetZ = cameraViewDirOffsetZ; + + //!!WARNING!! THIS WAS MANUALLY MODIFIED OH GOD + parent.putData(EntityDataStrings.FIRST_PERSON_TREE, rVal); + Globals.clientScene.registerBehaviorTree(rVal); + return rVal; + } + + /** + * Gets the tree on the entity + * @param target the entity + * @return The tree + */ + public static FirstPersonTree getTree(Entity target){ + return (FirstPersonTree)target.getData(EntityDataStrings.FIRST_PERSON_TREE); + } + + /** + * Checks if the provided entity has the tree + * @param target the provided entity + * @return true if the entity has a FirstPersonTree, false otherwise + */ + public static boolean hasTree(Entity target){ + return target.containsKey(EntityDataStrings.FIRST_PERSON_TREE); + } + + /** + * the offset from the origin to place the viewmodel + * @return + */ + public double getHeightFromOrigin(){ + return heightFromOrigin; + } + + /** + * the amount to pull below the camera + * @return + */ + public double getCameraViewDirOffsetY(){ + return cameraViewDirOffsetY; + } + + /** + * the amount to pull behind the camera + * @return + */ + public double getCameraViewDirOffsetZ(){ + return cameraViewDirOffsetZ; + } + + /** + * Plays an animation if it exists + * @param animationName the name of the animation + */ + public void playAnimation(String animationName){ + this.currentAnimation = animationName; + } + + /** + * If the entity has a first person tree, plays the provided animation + * @param entity The entity + * @param animationName the name of the animation + */ + public static void conditionallyPlayAnimation(Entity entity, String animationName){ + if(hasTree(entity)){ + getTree(entity).playAnimation(animationName); + } + } + +} diff --git a/src/main/java/electrosphere/entity/state/equip/ClientEquipState.java b/src/main/java/electrosphere/entity/state/equip/ClientEquipState.java index f16ce735..a50ac58d 100644 --- a/src/main/java/electrosphere/entity/state/equip/ClientEquipState.java +++ b/src/main/java/electrosphere/entity/state/equip/ClientEquipState.java @@ -34,11 +34,20 @@ import electrosphere.renderer.actor.ActorMeshMask; */ public class ClientEquipState implements BehaviorTree { + //the parent entity of the btree Entity parent; + //the list of available equip points List equipPoints = new LinkedList(); + + //the map of point to the equipped entity Map equipMap = new HashMap(); + /** + * Creates the tree + * @param parent the entity this is attached to + * @param equipPoints the list of available points + */ public ClientEquipState(Entity parent, List equipPoints){ this.parent = parent; for(EquipPoint point : equipPoints){ @@ -46,10 +55,19 @@ public class ClientEquipState implements BehaviorTree { } } + /** + * Gets the list of equipped points + * @return the list + */ public List equippedPoints(){ return new LinkedList(equipMap.keySet()); } + /** + * Attempts to equip the item + * @param toEquip the item to equip + * @param point the point to equip to + */ public void commandAttemptEquip(Entity toEquip, EquipPoint point){ boolean hasEquipped = hasEquippedAtPoint(point.getEquipPointId()); boolean targetIsItem = ItemUtils.isItem(toEquip); @@ -117,7 +135,11 @@ public class ClientEquipState implements BehaviorTree { } else { //since we're not replacing meshes we must be attaching to a bone equipMap.put(point.getEquipPointId(),toEquip); - AttachUtils.clientAttachEntityToEntityAtBone(parent, toEquip, point.getBone(), AttachUtils.getEquipPointRotationOffset(point.getOffsetRotation())); + if(Globals.controlHandler.cameraIsThirdPerson()){ + AttachUtils.clientAttachEntityToEntityAtBone(parent, toEquip, point.getBone(), AttachUtils.getEquipPointRotationOffset(point.getOffsetRotation())); + } else { + AttachUtils.clientAttachEntityToEntityAtBone(Globals.firstPersonEntity, toEquip, point.getFirstPersonBone(), AttachUtils.getEquipPointRotationOffset(point.getOffsetRotation())); + } if(toEquip.containsKey(EntityDataStrings.PHYSICS_COLLISION_BODY) && toEquip.containsKey(EntityDataStrings.PHYSICS_COLLIDABLE)){ DBody rigidBody = (DBody)toEquip.getData(EntityDataStrings.PHYSICS_COLLISION_BODY); Globals.clientSceneWrapper.getCollisionEngine().deregisterPhysicsObject(rigidBody); @@ -171,6 +193,11 @@ public class ClientEquipState implements BehaviorTree { // } } + /** + * Gets the equip point by its name + * @param name the name of the equip point + * @return the equip point object if it exists, otherwise null + */ public EquipPoint getEquipPoint(String name){ for(EquipPoint point : equipPoints){ if(point.getEquipPointId().equals(name)){ @@ -180,6 +207,11 @@ public class ClientEquipState implements BehaviorTree { return null; } + /** + * Gets the item equipped at a point + * @param point the point's name + * @return the item entity + */ public Entity getEquippedItemAtPoint(String point){ return equipMap.get(point); } @@ -223,6 +255,10 @@ public class ClientEquipState implements BehaviorTree { // } // } + /** + * Attempts to unequip the item at a given point + * @param pointId the id of the point + */ public void commandAttemptUnequip(String pointId){ boolean hasEquipped = hasEquippedAtPoint(pointId); if(hasEquipped){ @@ -266,6 +302,11 @@ public class ClientEquipState implements BehaviorTree { } } + /** + * Checks if a point has an item equipped + * @param point the equip point + * @return true if there is an item equipped, false otherwise + */ public boolean hasEquippedAtPoint(String point){ return equipMap.containsKey(point); } diff --git a/src/main/java/electrosphere/entity/state/idle/IdleTree.java b/src/main/java/electrosphere/entity/state/idle/IdleTree.java index b7c2cf13..f5e5cc5f 100644 --- a/src/main/java/electrosphere/entity/state/idle/IdleTree.java +++ b/src/main/java/electrosphere/entity/state/idle/IdleTree.java @@ -3,6 +3,7 @@ package electrosphere.entity.state.idle; import electrosphere.net.synchronization.BehaviorTreeIdEnums; import electrosphere.entity.state.attack.ClientAttackTree; +import electrosphere.entity.state.client.firstPerson.FirstPersonTree; import electrosphere.entity.state.movement.AirplaneMovementTree; import electrosphere.entity.state.movement.groundmove.ClientGroundMovementTree; import electrosphere.entity.state.movement.groundmove.ClientGroundMovementTree.MovementTreeState; @@ -13,6 +14,8 @@ import electrosphere.entity.EntityDataStrings; import electrosphere.entity.EntityUtils; import electrosphere.entity.btree.BehaviorTree; import electrosphere.entity.types.creature.CreatureUtils; +import electrosphere.game.data.creature.type.CreatureType; +import electrosphere.game.data.creature.type.IdleData; import electrosphere.net.synchronization.annotation.SyncedField; import electrosphere.net.synchronization.annotation.SynchronizableEnum; import electrosphere.net.synchronization.annotation.SynchronizedBehaviorTree; @@ -37,10 +40,13 @@ public class IdleTree implements BehaviorTree { private IdleTreeState state; Entity parent; + IdleData idleData; public IdleTree(Entity e){ state = IdleTreeState.IDLE; parent = e; + CreatureType creatureType = Globals.gameConfigCurrent.getCreatureTypeLoader().getCreature(CreatureUtils.getType(parent)); + idleData = creatureType.getIdleData(); } /** @@ -80,12 +86,14 @@ public class IdleTree implements BehaviorTree { case IDLE: if(entityActor != null){ if( - (!entityActor.isPlayingAnimation() || !entityActor.isPlayingAnimation(Animation.ANIMATION_IDLE_1)) && - (Globals.assetManager.fetchModel(entityActor.getModelPath()) != null && Globals.assetManager.fetchModel(entityActor.getModelPath()).getAnimation(Animation.ANIMATION_IDLE_1) != null) + idleData != null && + (!entityActor.isPlayingAnimation() || !entityActor.isPlayingAnimation(idleData.getIdleAnimation())) && + (Globals.assetManager.fetchModel(entityActor.getModelPath()) != null && Globals.assetManager.fetchModel(entityActor.getModelPath()).getAnimation(idleData.getIdleAnimation()) != null) ){ - entityActor.playAnimation(Animation.ANIMATION_IDLE_1,3); + entityActor.playAnimation(idleData.getIdleAnimation(),3); entityActor.incrementAnimationTime(0.0001); + FirstPersonTree.conditionallyPlayAnimation(Globals.firstPersonEntity, idleData.getFirstPersonIdleAnimation()); } } break; diff --git a/src/main/java/electrosphere/entity/state/movement/FallTree.java b/src/main/java/electrosphere/entity/state/movement/FallTree.java index ef80367d..eac1af94 100644 --- a/src/main/java/electrosphere/entity/state/movement/FallTree.java +++ b/src/main/java/electrosphere/entity/state/movement/FallTree.java @@ -1,29 +1,42 @@ package electrosphere.entity.state.movement; +import electrosphere.engine.Globals; import electrosphere.entity.Entity; import electrosphere.entity.EntityDataStrings; import electrosphere.entity.EntityUtils; import electrosphere.entity.btree.BehaviorTree; +import electrosphere.entity.state.client.firstPerson.FirstPersonTree; +import electrosphere.game.data.creature.type.movement.FallMovementSystem; import electrosphere.renderer.actor.Actor; +/** + * Behavior tree for playing animations when an entity is falling/landing + */ public class FallTree implements BehaviorTree { + /** + * The state of the fall tree + */ static enum FallState { ACTIVE, INACTIVE, } + //the raw data from disk + FallMovementSystem fallMovementSystem; + + //current state FallState state = FallState.INACTIVE; - String animationFall = "Armature|Fall"; - String animationLand = "Armature|Land"; - + //the entity this is attached to Entity parent; + //the related jump tree JumpTree jumpTree; - public FallTree(Entity parent){ + public FallTree(Entity parent, FallMovementSystem fallMovementSystem){ this.parent = parent; + this.fallMovementSystem = fallMovementSystem; } @Override @@ -32,13 +45,13 @@ public class FallTree implements BehaviorTree { switch(state){ case ACTIVE: if(entityActor != null){ - String animationToPlay = determineCorrectAnimation(); if( - !entityActor.isPlayingAnimation() || !entityActor.isPlayingAnimation(animationToPlay) && + !entityActor.isPlayingAnimation() || !entityActor.isPlayingAnimation(fallMovementSystem.getAnimationFall().getName()) && (jumpTree == null || !jumpTree.isJumping()) ){ - entityActor.playAnimation(animationToPlay,1); + entityActor.playAnimation(fallMovementSystem.getAnimationFall().getName(),1); entityActor.incrementAnimationTime(0.0001); + FirstPersonTree.conditionallyPlayAnimation(Globals.firstPersonEntity, fallMovementSystem.getAnimationFirstPersonFall().getName()); } } break; @@ -47,55 +60,55 @@ public class FallTree implements BehaviorTree { } } + /** + * Starts the falling tree + */ public void start(){ state = FallState.ACTIVE; } + /** + * Returns the status of the fall tree + * @return true if falling, false otherwise + */ public boolean isFalling(){ return state == FallState.ACTIVE; } + /** + * Triggers the falling tree to land + */ public void land(){ if(state != FallState.INACTIVE){ state = FallState.INACTIVE; Actor entityActor = EntityUtils.getActor(parent); if(entityActor != null){ - String animationToPlay = determineCorrectAnimation(); if( - !entityActor.isPlayingAnimation() || !entityActor.isPlayingAnimation(animationToPlay) + !entityActor.isPlayingAnimation() || !entityActor.isPlayingAnimation(fallMovementSystem.getAnimationLand().getName()) ){ - entityActor.playAnimation(animationToPlay,1); + entityActor.playAnimation(fallMovementSystem.getAnimationLand().getName(),1); entityActor.incrementAnimationTime(0.0001); + FirstPersonTree.conditionallyPlayAnimation(Globals.firstPersonEntity, fallMovementSystem.getAnimationFirstPersonLand().getName()); } } } } + /** + * Gets the falling tree state of an entity + * @param parent the entity + * @return the state + */ public static FallTree getFallTree(Entity parent){ return (FallTree)parent.getData(EntityDataStrings.FALL_TREE); } - String determineCorrectAnimation(){ - switch(state){ - case ACTIVE: - return animationFall; - case INACTIVE: - return animationLand; - default: - return animationLand; - } - } - + /** + * Sets the related jump tree + * @param jumpTree the jump tree that is related to this fall tree (on the same entity) + */ public void setJumpTree(JumpTree jumpTree){ this.jumpTree = jumpTree; } - - public void setAnimationFall(String animationName){ - animationFall = animationName; - } - - public void setAnimationLand(String animationName){ - animationLand = animationName; - } } diff --git a/src/main/java/electrosphere/entity/state/movement/JumpTree.java b/src/main/java/electrosphere/entity/state/movement/JumpTree.java index 4dd1e2ef..9a82c1a1 100644 --- a/src/main/java/electrosphere/entity/state/movement/JumpTree.java +++ b/src/main/java/electrosphere/entity/state/movement/JumpTree.java @@ -7,13 +7,16 @@ import org.ode4j.ode.DBody; import electrosphere.collision.PhysicsEntityUtils; import electrosphere.collision.PhysicsUtils; import electrosphere.collision.collidable.Collidable; +import electrosphere.engine.Globals; import electrosphere.entity.Entity; import electrosphere.entity.EntityDataStrings; import electrosphere.entity.EntityUtils; import electrosphere.entity.btree.BehaviorTree; +import electrosphere.entity.state.client.firstPerson.FirstPersonTree; import electrosphere.entity.state.collidable.Impulse; import electrosphere.entity.state.gravity.GravityUtils; import electrosphere.entity.types.collision.CollisionObjUtils; +import electrosphere.game.data.creature.type.movement.JumpMovementSystem; import electrosphere.renderer.actor.Actor; public class JumpTree implements BehaviorTree { @@ -28,6 +31,8 @@ public class JumpTree implements BehaviorTree { String animationJump = "Armature|Jump"; + JumpMovementSystem jumpData; + Entity parent; int jumpFrames = 0; @@ -37,10 +42,11 @@ public class JumpTree implements BehaviorTree { static final float jumpFalloff = 0.99f; - public JumpTree(Entity parent, int jumpFrames, float jumpForce){ + public JumpTree(Entity parent, int jumpFrames, float jumpForce, JumpMovementSystem jumpData){ this.parent = parent; this.jumpFrames = jumpFrames; this.jumpForce = jumpForce; + this.jumpData = jumpData; } public void start(){ @@ -58,10 +64,10 @@ public class JumpTree implements BehaviorTree { switch(state){ case ACTIVE: if(entityActor != null){ - String animationToPlay = determineCorrectAnimation(); - if(!entityActor.isPlayingAnimation() || !entityActor.isPlayingAnimation(animationToPlay)){ - entityActor.playAnimation(animationToPlay,1); + if(!entityActor.isPlayingAnimation() || !entityActor.isPlayingAnimation(jumpData.getAnimationJump().getName())){ + entityActor.playAnimation(jumpData.getAnimationJump().getName(),1); entityActor.incrementAnimationTime(0.0001); + FirstPersonTree.conditionallyPlayAnimation(Globals.firstPersonEntity, jumpData.getAnimationFirstPersonJump().getName()); } } currentFrame++; diff --git a/src/main/java/electrosphere/entity/state/movement/groundmove/ClientGroundMovementTree.java b/src/main/java/electrosphere/entity/state/movement/groundmove/ClientGroundMovementTree.java index c6b1ee73..eaee0f01 100644 --- a/src/main/java/electrosphere/entity/state/movement/groundmove/ClientGroundMovementTree.java +++ b/src/main/java/electrosphere/entity/state/movement/groundmove/ClientGroundMovementTree.java @@ -15,6 +15,7 @@ import electrosphere.engine.Main; import electrosphere.entity.types.camera.CameraEntityUtils; import electrosphere.entity.types.collision.CollisionObjUtils; import electrosphere.entity.types.creature.CreatureUtils; +import electrosphere.game.data.creature.type.movement.GroundMovementSystem; import electrosphere.entity.ClientEntityUtils; import electrosphere.entity.Entity; import electrosphere.entity.EntityDataStrings; @@ -22,6 +23,7 @@ import electrosphere.entity.EntityUtils; import electrosphere.entity.btree.BehaviorTree; import electrosphere.entity.state.attack.ClientAttackTree; import electrosphere.entity.state.attack.ClientAttackTree.AttackTreeState; +import electrosphere.entity.state.client.firstPerson.FirstPersonTree; import electrosphere.entity.state.movement.FallTree; import electrosphere.entity.state.movement.JumpTree; import electrosphere.entity.state.movement.SprintTree; @@ -96,6 +98,8 @@ public class ClientGroundMovementTree implements BehaviorTree { SprintTree sprintTree; JumpTree jumpTree; FallTree fallTree; + + GroundMovementSystem groundMovementData; Entity parent; @@ -288,6 +292,7 @@ public class ClientGroundMovementTree implements BehaviorTree { ){ entityActor.playAnimation(animationToPlay,1); entityActor.incrementAnimationTime(0.0001); + FirstPersonTree.conditionallyPlayAnimation(Globals.firstPersonEntity, groundMovementData.getAnimationFirstPersonStartup().getName()); } } //run startup code @@ -322,6 +327,7 @@ public class ClientGroundMovementTree implements BehaviorTree { ){ entityActor.playAnimation(animationToPlay,1); entityActor.incrementAnimationTime(0.0001); + FirstPersonTree.conditionallyPlayAnimation(Globals.firstPersonEntity, groundMovementData.getAnimationFirstPersonLoop().getName()); } } if(velocity != maxNaturalVelocity){ @@ -350,6 +356,7 @@ public class ClientGroundMovementTree implements BehaviorTree { ){ entityActor.playAnimation(animationToPlay,1); entityActor.incrementAnimationTime(0.0001); + FirstPersonTree.conditionallyPlayAnimation(Globals.firstPersonEntity, groundMovementData.getAnimationFirstPersonWindDown().getName()); } } //velocity stuff @@ -665,11 +672,12 @@ public class ClientGroundMovementTree implements BehaviorTree { * @param entity The entity to attach to * @param tree The behavior tree to attach */ - public static ClientGroundMovementTree attachTree(Entity parent, Collidable collidable){ + public static ClientGroundMovementTree attachTree(Entity parent, Collidable collidable, GroundMovementSystem groundMovementData){ ClientGroundMovementTree rVal = new ClientGroundMovementTree(parent); //put manual code here (setting params, etc) rVal.collidable = collidable; + rVal.groundMovementData = groundMovementData; //!!WARNING!! from here below should not be touched //This was generated automatically to properly alert various systems that the btree exists and should be tracked diff --git a/src/main/java/electrosphere/entity/state/movement/groundmove/ServerGroundMovementTree.java b/src/main/java/electrosphere/entity/state/movement/groundmove/ServerGroundMovementTree.java index 58bd57a4..ee79f7f7 100644 --- a/src/main/java/electrosphere/entity/state/movement/groundmove/ServerGroundMovementTree.java +++ b/src/main/java/electrosphere/entity/state/movement/groundmove/ServerGroundMovementTree.java @@ -148,9 +148,14 @@ public class ServerGroundMovementTree implements BehaviorTree { } public void simulate(float deltaTime){ - float velocity = CreatureUtils.getVelocity(parent); - float acceleration = CreatureUtils.getAcceleration(parent); - float maxNaturalVelocity = sprintTree != null && sprintTree.getState() == SprintTreeState.SPRINTING ? sprintTree.getMaxVelocity() : CreatureUtils.getMaxNaturalVelocity(parent); + float velocity = 0; + float acceleration = 0; + float maxNaturalVelocity = 0; + if(CreatureUtils.hasVelocity(parent)){ + velocity = CreatureUtils.getVelocity(parent); + acceleration = CreatureUtils.getAcceleration(parent); + maxNaturalVelocity = sprintTree != null && sprintTree.getState() == SprintTreeState.SPRINTING ? sprintTree.getMaxVelocity() : CreatureUtils.getMaxNaturalVelocity(parent); + } PoseActor entityPoseActor = EntityUtils.getPoseActor(parent); // Model entityModel = Globals.assetManager.fetchModel(EntityUtils.getEntityModelPath(parent)); Vector3d position = EntityUtils.getPosition(parent); @@ -208,27 +213,6 @@ public class ServerGroundMovementTree implements BehaviorTree { case MOVEUPDATE: { if(updateTime >= lastUpdateTime){ lastUpdateTime = updateTime; - switch(message.gettreeState()){ - case 0: - state = MovementTreeState.STARTUP; - // System.out.println("Set state STARTUP"); - GravityUtils.serverAttemptActivateGravity(parent); - break; - case 1: - state = MovementTreeState.MOVE; - // System.out.println("Set state MOVE"); - GravityUtils.serverAttemptActivateGravity(parent); - break; - case 2: - state = MovementTreeState.SLOWDOWN; - // System.out.println("Set state SLOWDOWN"); - GravityUtils.serverAttemptActivateGravity(parent); - break; - case 3: - state = MovementTreeState.IDLE; - // System.out.println("Set state IDLE"); - break; - } //we want to always update the server facing vector with where the client says they're facing EntityUtils.getRotation(parent).set(message.getrotationX(),message.getrotationY(),message.getrotationZ(),message.getrotationW()); CreatureUtils.setFacingVector(parent, new Vector3d(0,0,1).rotate(EntityUtils.getRotation(parent))); diff --git a/src/main/java/electrosphere/entity/types/attach/AttachUtils.java b/src/main/java/electrosphere/entity/types/attach/AttachUtils.java index e35ff6d0..8c2fe0fa 100644 --- a/src/main/java/electrosphere/entity/types/attach/AttachUtils.java +++ b/src/main/java/electrosphere/entity/types/attach/AttachUtils.java @@ -24,8 +24,7 @@ import org.joml.Vector3f; import org.joml.Vector4d; /** - * - * @author amaterasu + * Utilities for attaching entities to entities */ public class AttachUtils { @@ -110,6 +109,9 @@ public class AttachUtils { // Quaternionf rotation = parentActor.getBoneRotation(targetBone); // EntityUtils.getRotation(currentEntity).set(rotation).normalize(); Vector3d facingAngle = CreatureUtils.getFacingVector(parent); + if(facingAngle == null){ + facingAngle = new Vector3d(0,0,1); + } //calculate rotation of model EntityUtils.getRotation(currentEntity) .rotationTo(new Vector3d(0,0,1), new Vector3d(facingAngle.x,facingAngle.y,facingAngle.z)) diff --git a/src/main/java/electrosphere/entity/types/camera/CameraEntityUtils.java b/src/main/java/electrosphere/entity/types/camera/CameraEntityUtils.java index 8d273f94..9a54b85d 100644 --- a/src/main/java/electrosphere/entity/types/camera/CameraEntityUtils.java +++ b/src/main/java/electrosphere/entity/types/camera/CameraEntityUtils.java @@ -158,6 +158,26 @@ public class CameraEntityUtils { public static float getCameraYaw(Entity camera){ return (float)camera.getData(EntityDataStrings.CAMERA_YAW); } + + /** + * Gets the quaternion containing the camera pitch + * @param camera + * @return + */ + public static Quaternionf getPitchQuat(Entity camera){ + Quaternionf pitchQuat = new Quaternionf().fromAxisAngleDeg(new Vector3f(1,0,0), -getCameraPitch(camera)); + return pitchQuat; + } + + /** + * Gets the quaternion containing the camera yaw + * @param camera + * @return + */ + public static Quaternionf getYawQuat(Entity camera){ + Quaternionf yawQuat = new Quaternionf().fromAxisAngleDeg(new Vector3f(0,1,0), -getCameraYaw(camera)); + return yawQuat; + } public static void destroyCameraEntity(Entity e){ if(e != null){ diff --git a/src/main/java/electrosphere/entity/types/creature/CreatureUtils.java b/src/main/java/electrosphere/entity/types/creature/CreatureUtils.java index 8e56b3a5..4292fe6e 100644 --- a/src/main/java/electrosphere/entity/types/creature/CreatureUtils.java +++ b/src/main/java/electrosphere/entity/types/creature/CreatureUtils.java @@ -101,6 +101,8 @@ public class CreatureUtils { Entity rVal = EntityCreationUtils.createClientSpatialEntity(); EntityCreationUtils.makeEntityDrawable(rVal, rawType.getModelPath()); Actor creatureActor = EntityUtils.getActor(rVal); + EntityUtils.setEntityType(rVal, ENTITY_TYPE_CREATURE); + EntityUtils.setEntitySubtype(rVal, type); for(HitboxData hitboxdata : rawType.getHitboxes()){ List hitboxList = new LinkedList(); List hurtboxList = new LinkedList(); @@ -132,7 +134,7 @@ public class CreatureUtils { // Generic ground case GroundMovementSystem.GROUND_MOVEMENT_SYSTEM: GroundMovementSystem groundMovementSystem = (GroundMovementSystem)movementSystem; - ClientGroundMovementTree moveTree = ClientGroundMovementTree.attachTree(rVal, CollisionObjUtils.getCollidable(rVal)); + ClientGroundMovementTree moveTree = ClientGroundMovementTree.attachTree(rVal, CollisionObjUtils.getCollidable(rVal), groundMovementSystem); if(groundMovementSystem.getAnimationStartup() != null){ moveTree.setAnimationStartUp(groundMovementSystem.getAnimationStartup().getName()); } @@ -174,7 +176,7 @@ public class CreatureUtils { // Jump case JumpMovementSystem.JUMP_MOVEMENT_SYSTEM: JumpMovementSystem jumpMovementSystem = (JumpMovementSystem)movementSystem; - JumpTree jumpTree = new JumpTree(rVal, jumpMovementSystem.getJumpFrames(), jumpMovementSystem.getJumpForce()); + JumpTree jumpTree = new JumpTree(rVal, jumpMovementSystem.getJumpFrames(), jumpMovementSystem.getJumpForce(), jumpMovementSystem); if(jumpMovementSystem.getAnimationJump() != null){ jumpTree.setAnimationJump(jumpMovementSystem.getAnimationJump().getName()); } @@ -191,13 +193,7 @@ public class CreatureUtils { // Falling case FallMovementSystem.FALL_MOVEMENT_SYSTEM: FallMovementSystem fallMovementSystem = (FallMovementSystem)movementSystem; - FallTree fallTree = new FallTree(rVal); - if(fallMovementSystem.getAnimationFall()!=null){ - fallTree.setAnimationFall(fallMovementSystem.getAnimationFall().getName()); - } - if(fallMovementSystem.getAnimationLand()!=null){ - fallTree.setAnimationLand(fallMovementSystem.getAnimationLand().getName()); - } + FallTree fallTree = new FallTree(rVal, fallMovementSystem); if(CreatureUtils.clientGetEntityMovementTree(rVal) != null && CreatureUtils.clientGetEntityMovementTree(rVal) instanceof ClientGroundMovementTree){ ((ClientGroundMovementTree)CreatureUtils.clientGetEntityMovementTree(rVal)).setClientFallTree(fallTree); } @@ -374,8 +370,6 @@ public class CreatureUtils { rVal.putData(EntityDataStrings.TREE_IDLE, idleTree); Globals.clientScene.registerBehaviorTree(idleTree); Globals.clientScene.registerEntityToTag(rVal, EntityTags.CREATURE); - EntityUtils.setEntityType(rVal, ENTITY_TYPE_CREATURE); - EntityUtils.setEntitySubtype(rVal, type); CreatureUtils.setFacingVector(rVal, new Vector3d(0,0,1)); rVal.putData(EntityDataStrings.DRAW_CAST_SHADOW, true); return rVal; @@ -717,6 +711,10 @@ public class CreatureUtils { public static void setAcceleration(Entity e, float scalar){ e.putData(EntityDataStrings.DATA_STRING_ACCELERATION, scalar); } + + public static boolean hasVelocity(Entity e){ + return e.containsKey(EntityDataStrings.DATA_STRING_VELOCITY); + } public static float getVelocity(Entity e){ return (float)e.getData(EntityDataStrings.DATA_STRING_VELOCITY); diff --git a/src/main/java/electrosphere/entity/types/foliage/FoliageUtils.java b/src/main/java/electrosphere/entity/types/foliage/FoliageUtils.java index 1d70e93c..0fe0cea1 100644 --- a/src/main/java/electrosphere/entity/types/foliage/FoliageUtils.java +++ b/src/main/java/electrosphere/entity/types/foliage/FoliageUtils.java @@ -11,7 +11,7 @@ import electrosphere.entity.EntityDataStrings; import electrosphere.entity.EntityTags; import electrosphere.entity.EntityUtils; import electrosphere.entity.ServerEntityUtils; -import electrosphere.entity.state.ambientaudio.ClientAmbientAudioTree; +import electrosphere.entity.state.client.ambientaudio.ClientAmbientAudioTree; import electrosphere.entity.state.idle.IdleTree; import electrosphere.entity.types.collision.CollisionObjUtils; import electrosphere.entity.types.tree.ProceduralTree; diff --git a/src/main/java/electrosphere/game/data/creature/type/CreatureType.java b/src/main/java/electrosphere/game/data/creature/type/CreatureType.java index d14d2bb6..06820377 100644 --- a/src/main/java/electrosphere/game/data/creature/type/CreatureType.java +++ b/src/main/java/electrosphere/game/data/creature/type/CreatureType.java @@ -11,6 +11,9 @@ import electrosphere.game.data.creature.type.visualattribute.VisualAttribute; import java.util.List; +/** + * A given type of creature + */ public class CreatureType { String creatureId; List hitboxes; @@ -24,6 +27,8 @@ public class CreatureType { HealthSystem healthSystem; LookAtSystem lookAtSystem; String modelPath; + ViewModelData viewModelData; + IdleData idleData; AttackMoveResolver attackMoveResolver; @@ -82,6 +87,14 @@ public class CreatureType { public AttackMoveResolver getAttackMoveResolver(){ return attackMoveResolver; } + + public ViewModelData getViewModelData(){ + return viewModelData; + } + + public IdleData getIdleData(){ + return idleData; + } } diff --git a/src/main/java/electrosphere/game/data/creature/type/IdleData.java b/src/main/java/electrosphere/game/data/creature/type/IdleData.java new file mode 100644 index 00000000..caec317a --- /dev/null +++ b/src/main/java/electrosphere/game/data/creature/type/IdleData.java @@ -0,0 +1,30 @@ +package electrosphere.game.data.creature.type; + +/** + * Data about how the creature will behave when in idle state + */ +public class IdleData { + + //the animation that plays when the creature is idle + String idleAnimation; + + //the animation that plays when the creature idles in first person + String firstPersonIdleAnimation; + + /** + * the animation that plays when the creature is idle + * @return + */ + public String getIdleAnimation(){ + return idleAnimation; + } + + /** + * the animation that plays when the creature idles in first person + * @return + */ + public String getFirstPersonIdleAnimation(){ + return firstPersonIdleAnimation; + } + +} diff --git a/src/main/java/electrosphere/game/data/creature/type/ViewModelData.java b/src/main/java/electrosphere/game/data/creature/type/ViewModelData.java new file mode 100644 index 00000000..164979dd --- /dev/null +++ b/src/main/java/electrosphere/game/data/creature/type/ViewModelData.java @@ -0,0 +1,54 @@ +package electrosphere.game.data.creature.type; + +/** + * Data about the first person view model for this creature type + */ +public class ViewModelData { + + //How far from the origin of the creature to place the viewmodel + double heightFromOrigin; + + //How far to pull the view model below the camera + double cameraViewDirOffsetY; + + //How far to pull the view model behind the camera + double cameraViewDirOffsetZ; + + //the actual model + String firstPersonModelPath; + + + /** + * How far from the origin of the creature to place the viewmodel + * @return + */ + public double getHeightFromOrigin(){ + return heightFromOrigin; + } + + /** + * How far to pull the view model below the camera + * @return + */ + public double getCameraViewDirOffsetY(){ + return cameraViewDirOffsetY; + } + + /** + * How far to pull the view model behind the camera + * @return + */ + public double getCameraViewDirOffsetZ(){ + return cameraViewDirOffsetZ; + } + + /** + * the actual model + * @return + */ + public String getFirstPersonModelPath(){ + return firstPersonModelPath; + } + + +} diff --git a/src/main/java/electrosphere/game/data/creature/type/attack/AttackMove.java b/src/main/java/electrosphere/game/data/creature/type/attack/AttackMove.java index 57a95377..db02674f 100644 --- a/src/main/java/electrosphere/game/data/creature/type/attack/AttackMove.java +++ b/src/main/java/electrosphere/game/data/creature/type/attack/AttackMove.java @@ -1,15 +1,14 @@ package electrosphere.game.data.creature.type.attack; -import java.util.List; +import electrosphere.game.data.creature.type.Animation; /** - * - * @author amaterasu + * Data about a single attack move this creature is capable of */ public class AttackMove { /* - + Base data */ String attackMoveId; String type; @@ -21,6 +20,10 @@ public class AttackMove { String holdAnimationName; String attackAnimationName; + Animation animationFirstPersonWindup; + Animation animationFirstPersonHold; + Animation animationFirstPersonAttack; + /* Damage stuff */ @@ -45,66 +48,154 @@ public class AttackMove { int driftFrameStart; //when do we start drifting int driftFrameEnd; //when do we stop drifting + /** + * Gets the id of the attack move + * @return the id of the attack move + */ public String getAttackMoveId(){ return attackMoveId; } + /** + * Gets the type of attack move + * @return the attack move type + */ public String getType() { return type; } + /** + * Gets the name of the animation to play in 3rd person for the windup + * @return the animation name + */ public String getWindupAnimationName() { return windupAnimationName; } + /** + * Gets the name of the animation to play in 3rd person for the hold + * @return the animation name + */ public String getHoldAnimationName() { return holdAnimationName; } + /** + * Gets the name of the animation to play in 3rd person for the attack + * @return the animation name + */ public String getAttackAnimationName() { return attackAnimationName; } + /** + * Gets the animation data for the 1st person windup + * @return the animation data + */ + public Animation getAnimationFirstPersonWindup(){ + return animationFirstPersonWindup; + } + + /** + * Gets the animation data for the 1st person hold + * @return the animation data + */ + public Animation getAnimationFirstPersonHold(){ + return animationFirstPersonHold; + } + + /** + * Gets the animation data for the 1st person attack + * @return the animation data + */ + public Animation getAnimationFirstPersonAttack(){ + return animationFirstPersonAttack; + } + + /** + * Gets the number of frames to windup for + * @return the number of frames + */ public int getWindupFrames() { return windupFrames; } + /** + * Gets the number of frames to attack for + * @return the number of frames + */ public int getAttackFrames() { return attackFrames; } + /** + * Gets the number of frames to cooldown for + * @return the number of frames + */ public int getCooldownFrames(){ return cooldownFrames; } + /** + * Gets the id of the next attack move + * @return the id of the next attack move + */ public String getNextMoveId() { return nextMoveId; } + /** + * Gets the frame number where the window to chain the next attack starts + * @return the frame number + */ public int getMoveChainWindowStart(){ return moveChainWindowStart; } + /** + * Gets the frame number where the window to chain the next attack ends + * @return the frame number + */ public int getMoveChainWindowEnd(){ return moveChainWindowEnd; } + /** + * Gets the amount we want the animation to push the creature forward + * @return the amount to push forward + */ public float getDriftGoal(){ return driftGoal; } + /** + * Gets the frame number where the drift starts + * @return the frame number + */ public int getDriftFrameStart(){ return driftFrameStart; } + /** + * Gets the frame number where the drift starts + * @return the frame number + */ public int getDriftFrameEnd(){ return driftFrameEnd; } + /** + * Returns if the move is the initial move in the attack chain + * @return true if the initial move, false otherwise + */ public boolean isInitialMove(){ return initialMove; } + /** + * Returns if it fires a projectile + * @return true if it fires a projectile, false otherwise + */ public boolean getFiresProjectile(){ return firesProjectile; } diff --git a/src/main/java/electrosphere/game/data/creature/type/equip/EquipPoint.java b/src/main/java/electrosphere/game/data/creature/type/equip/EquipPoint.java index 34ab1d7a..928daf7e 100644 --- a/src/main/java/electrosphere/game/data/creature/type/equip/EquipPoint.java +++ b/src/main/java/electrosphere/game/data/creature/type/equip/EquipPoint.java @@ -2,30 +2,68 @@ package electrosphere.game.data.creature.type.equip; import java.util.List; +/** + * A portion of the creature that can have an item attached to it + */ public class EquipPoint { + //the id of the equip point String equipPointId; + //the bone that can have the item attached to it (may not be defined depending on the type of equip point (think legs)) String bone; + //the bone to attach items to for the first person viewmodel (may not be defined based on the viewmodel) + String firstPersonBone; + //the offset to apply to items that are attached to the bone List offsetVector; + //the rotation to apply to the items that are attached to the bone List offsetRotation; + //the equip classes that are whitelisted for this equip point List equipClassWhitelist; + /** + * Gets the equip point id + * @return the id of the equip point + */ public String getEquipPointId(){ return equipPointId; } + /** + * Gets the bone that can have the item attached to it (may not be defined depending on the type of equip point (think legs)) + * @return the bone + */ public String getBone(){ return bone; } + /** + * Gets the bone to attach items to for the first person viewmodel (may not be defined based on the viewmodel) + * @return the bone + */ + public String getFirstPersonBone(){ + return firstPersonBone; + } + + /** + * Gets the offset to apply to items that are attached to the bone + * @return the offset + */ public List getOffsetVector(){ return offsetVector; } + /** + * Gets the rotation to apply to the items that are attached to the bone + * @return the rotation + */ public List getOffsetRotation(){ return offsetRotation; } + /** + * Gets the equip classes that are whitelisted for this equip point + * @return the classes + */ public List getEquipClassWhitelist(){ return equipClassWhitelist; } diff --git a/src/main/java/electrosphere/game/data/creature/type/movement/FallMovementSystem.java b/src/main/java/electrosphere/game/data/creature/type/movement/FallMovementSystem.java index 875bc561..2e6b86fc 100644 --- a/src/main/java/electrosphere/game/data/creature/type/movement/FallMovementSystem.java +++ b/src/main/java/electrosphere/game/data/creature/type/movement/FallMovementSystem.java @@ -2,23 +2,55 @@ package electrosphere.game.data.creature.type.movement; import electrosphere.game.data.creature.type.Animation; +/** + * Data about a falling movement system + */ public class FallMovementSystem implements MovementSystem { public static final String FALL_MOVEMENT_SYSTEM = "FALL"; String type; + //Fall data Animation animationFall; - Animation animationLand; + Animation animationFirstPersonFall; + //landing data + Animation animationLand; + Animation animationFirstPersonLand; + + /** + * Gets the animation to play in 3rd person when the creature is falling + * @return the animation data + */ public Animation getAnimationFall(){ return animationFall; } + /** + * Gets the animation to play in 1st person when the creature is falling + * @return the animation data + */ + public Animation getAnimationFirstPersonFall(){ + return animationFirstPersonFall; + } + + /** + * Gets the animation to play in 3rd person when the creature is landing + * @return the animation data + */ public Animation getAnimationLand(){ return animationLand; } + /** + * Gets the animation to play in 1st person when the creature is landing + * @return the animation data + */ + public Animation getAnimationFirstPersonLand(){ + return animationFirstPersonLand; + } + @Override public String getType() { return type; diff --git a/src/main/java/electrosphere/game/data/creature/type/movement/GroundMovementSystem.java b/src/main/java/electrosphere/game/data/creature/type/movement/GroundMovementSystem.java index 52df3a88..a6e7cbdb 100644 --- a/src/main/java/electrosphere/game/data/creature/type/movement/GroundMovementSystem.java +++ b/src/main/java/electrosphere/game/data/creature/type/movement/GroundMovementSystem.java @@ -3,40 +3,105 @@ package electrosphere.game.data.creature.type.movement; import electrosphere.game.data.creature.type.Animation; import electrosphere.game.data.creature.type.SprintSystem; +/** + * A ground movement system's data + */ public class GroundMovementSystem implements MovementSystem { + //move system type string public static final String GROUND_MOVEMENT_SYSTEM = "GROUND"; + //type of move system String type; + //core physics numbers float acceleration; float maxVelocity; + + //startup data Animation animationStartup; + Animation animationFirstPersonStartup; + + //loop data Animation animationLoop; + Animation animationFirstPersonLoop; + + //wind down data Animation animationWindDown; + Animation animationFirstPersonWindDown; + + //sprint data SprintSystem sprintSystem; + /** + * Gets the acceleration factor for this creature + * @return the acceleration factor + */ public float getAcceleration() { return acceleration; } + /** + * Gets the maximum velocity the creature can move at with this system + * @return the max velocity + */ public float getMaxVelocity() { return maxVelocity; } + /** + * Gets the animation to play in 3rd person for startup + * @return The animation data + */ public Animation getAnimationStartup() { return animationStartup; } + /** + * Gets the animation to play in 1st person for startup + * @return The animation data + */ + public Animation getAnimationFirstPersonStartup(){ + return animationFirstPersonStartup; + } + + /** + * Gets the animation to loop in 3rd person + * @return The animation data + */ public Animation getAnimationLoop() { return animationLoop; } + /** + * Gets the animation to loop in 1st person + * @return The animation data + */ + public Animation getAnimationFirstPersonLoop(){ + return animationFirstPersonLoop; + } + + /** + * Gets the animation to play in 3rd person to wind down + * @return The animation data + */ public Animation getAnimationWindDown() { return animationWindDown; } + /** + * Gets the animation to play in 1st person to wind down + * @return The animation data + */ + public Animation getAnimationFirstPersonWindDown(){ + return animationFirstPersonWindDown; + } + + /** + * Gets the sprint system data + * @return The sprint system data + */ public SprintSystem getSprintSystem() { return sprintSystem; } diff --git a/src/main/java/electrosphere/game/data/creature/type/movement/JumpMovementSystem.java b/src/main/java/electrosphere/game/data/creature/type/movement/JumpMovementSystem.java index 6bdd93a8..601f9c82 100644 --- a/src/main/java/electrosphere/game/data/creature/type/movement/JumpMovementSystem.java +++ b/src/main/java/electrosphere/game/data/creature/type/movement/JumpMovementSystem.java @@ -9,7 +9,8 @@ public class JumpMovementSystem implements MovementSystem { String type; Animation animationJump; - + Animation animationFirstPersonJump; + int jumpFrames; float jumpForce; @@ -25,6 +26,10 @@ public class JumpMovementSystem implements MovementSystem { return animationJump; } + public Animation getAnimationFirstPersonJump(){ + return animationFirstPersonJump; + } + @Override public String getType() { return type; diff --git a/src/main/java/electrosphere/game/data/foliage/type/TreeModel.java b/src/main/java/electrosphere/game/data/foliage/type/TreeModel.java index e3216f0c..38faf8d2 100644 --- a/src/main/java/electrosphere/game/data/foliage/type/TreeModel.java +++ b/src/main/java/electrosphere/game/data/foliage/type/TreeModel.java @@ -99,6 +99,12 @@ public class TreeModel { //The maximum scalar of a branch to generate a sway behavior tree float maximumScalarToGenerateSwayTree; + //The model for the trunk of the tree + String trunkModelPath; + + //the model for a leaf blob + String leafModelPath; + /** * how quickly do the limbs shrink * @return @@ -332,4 +338,20 @@ public class TreeModel { return this.physicsBody; } + /** + * The model for the trunk of the tree + * @return + */ + public String getTrunkModelPath(){ + return trunkModelPath; + } + + /** + * the model for a leaf blob + * @return + */ + public String getLeafModelPath(){ + return leafModelPath; + } + } diff --git a/src/main/java/electrosphere/logger/LoggerInterface.java b/src/main/java/electrosphere/logger/LoggerInterface.java index 2ebb3cf4..a57827cc 100644 --- a/src/main/java/electrosphere/logger/LoggerInterface.java +++ b/src/main/java/electrosphere/logger/LoggerInterface.java @@ -26,7 +26,7 @@ public class LoggerInterface { */ public static void initLoggers(){ loggerStartup = new Logger(LogLevel.WARNING); - loggerNetworking = new Logger(LogLevel.DEBUG); + loggerNetworking = new Logger(LogLevel.WARNING); loggerFileIO = new Logger(LogLevel.WARNING); loggerGameLogic = new Logger(LogLevel.WARNING); loggerRenderer = new Logger(LogLevel.WARNING); diff --git a/src/main/java/electrosphere/net/client/protocol/EntityProtocol.java b/src/main/java/electrosphere/net/client/protocol/EntityProtocol.java index e4efb82e..a75fa5d9 100644 --- a/src/main/java/electrosphere/net/client/protocol/EntityProtocol.java +++ b/src/main/java/electrosphere/net/client/protocol/EntityProtocol.java @@ -6,15 +6,20 @@ import org.joml.Vector3d; import electrosphere.engine.Globals; import electrosphere.entity.ClientEntityUtils; import electrosphere.entity.Entity; +import electrosphere.entity.EntityCreationUtils; import electrosphere.entity.EntityDataStrings; +import electrosphere.entity.EntityTags; import electrosphere.entity.EntityUtils; import electrosphere.entity.state.attack.ClientAttackTree; import electrosphere.entity.state.attack.ServerAttackTree; +import electrosphere.entity.state.client.firstPerson.FirstPersonTree; import electrosphere.entity.types.attach.AttachUtils; import electrosphere.entity.types.creature.CreatureTemplate; import electrosphere.entity.types.creature.CreatureUtils; import electrosphere.entity.types.foliage.FoliageUtils; import electrosphere.entity.types.item.ItemUtils; +import electrosphere.game.data.creature.type.CreatureType; +import electrosphere.game.data.creature.type.ViewModelData; import electrosphere.logger.LoggerInterface; import electrosphere.net.parser.net.message.EntityMessage; import electrosphere.util.Utilities; @@ -101,19 +106,7 @@ public class EntityProtocol { case SETPROPERTY: { if(Globals.clientSceneWrapper.serverToClientMapContainsId(message.getentityID())){ if(message.getpropertyType() == 0){ - Entity target = Globals.clientSceneWrapper.getEntityFromServerId(message.getentityID()); - if(target != null){ - CreatureUtils.setControllerPlayerId(target, message.getpropertyValue()); - if(Globals.clientPlayer != null && message.getpropertyValue() == Globals.clientPlayer.getId()){ - Globals.clientCharacterID = message.getentityID(); - Globals.playerEntity = target; - if(Globals.controlHandler.cameraIsThirdPerson()){ - Globals.playerEntity.putData(EntityDataStrings.DATA_STRING_DRAW, true); - } else { - Globals.playerEntity.putData(EntityDataStrings.DATA_STRING_DRAW, false); - } - } - } + setPlayerEntity(message); } } else { //TODO: bounce message @@ -168,4 +161,33 @@ public class EntityProtocol { Globals.profiler.endCpuSample(); } + /** + * Sets the player's entity + * @param message the network message to parse + */ + static void setPlayerEntity(EntityMessage message){ + Entity target = Globals.clientSceneWrapper.getEntityFromServerId(message.getentityID()); + if(target != null){ + CreatureUtils.setControllerPlayerId(target, message.getpropertyValue()); + String creatureTypeRaw = CreatureUtils.getType(target); + CreatureType creatureType = Globals.gameConfigCurrent.getCreatureTypeLoader().getCreature(creatureTypeRaw); + ViewModelData viewModelData = creatureType.getViewModelData(); + if(Globals.clientPlayer != null && message.getpropertyValue() == Globals.clientPlayer.getId()){ + Globals.clientCharacterID = message.getentityID(); + Globals.playerEntity = target; + if(Globals.controlHandler.cameraIsThirdPerson()){ + Globals.playerEntity.putData(EntityDataStrings.DATA_STRING_DRAW, true); + } else { + Globals.playerEntity.putData(EntityDataStrings.DATA_STRING_DRAW, false); + if(viewModelData != null && viewModelData.getFirstPersonModelPath() != null){ + Globals.firstPersonEntity = EntityCreationUtils.createClientSpatialEntity(); + EntityCreationUtils.makeEntityDrawable(Globals.firstPersonEntity, viewModelData.getFirstPersonModelPath()); + FirstPersonTree.attachTree(Globals.firstPersonEntity, viewModelData.getHeightFromOrigin(), viewModelData.getCameraViewDirOffsetY(), viewModelData.getCameraViewDirOffsetZ()); + Globals.clientSceneWrapper.getScene().removeEntityFromTag(Globals.firstPersonEntity,EntityTags.DRAWABLE); + } + } + } + } + } + } diff --git a/src/main/java/electrosphere/renderer/RenderingEngine.java b/src/main/java/electrosphere/renderer/RenderingEngine.java index ddf14ce0..5848422c 100644 --- a/src/main/java/electrosphere/renderer/RenderingEngine.java +++ b/src/main/java/electrosphere/renderer/RenderingEngine.java @@ -103,6 +103,7 @@ import electrosphere.renderer.light.LightManager; import electrosphere.renderer.model.Model; import electrosphere.renderer.pipelines.CompositePipeline; import electrosphere.renderer.pipelines.DebugContentPipeline; +import electrosphere.renderer.pipelines.FirstPersonItemsPipeline; import electrosphere.renderer.pipelines.MainContentNoOITPipeline; import electrosphere.renderer.pipelines.MainContentPipeline; import electrosphere.renderer.pipelines.NormalsForOutlinePipeline; @@ -244,6 +245,7 @@ public class RenderingEngine { MainContentPipeline mainContentPipeline = new MainContentPipeline(); MainContentNoOITPipeline mainContentNoOITPipeline = new MainContentNoOITPipeline(); DebugContentPipeline debugContentPipeline = new DebugContentPipeline(); + FirstPersonItemsPipeline firstPersonItemsPipeline = new FirstPersonItemsPipeline(); ShadowMapPipeline shadowMapPipeline = new ShadowMapPipeline(); VolumeBufferPipeline volumeBufferPipeline = new VolumeBufferPipeline(); NormalsForOutlinePipeline normalsForOutlinePipeline = new NormalsForOutlinePipeline(); @@ -448,6 +450,12 @@ public class RenderingEngine { // fogColor.put(1.0f); // fogColor.flip(); // GL11.glFogfv(GL_FOG_COLOR, fogColor); + + // + //Init pipelines + // + firstPersonItemsPipeline.init(); + compositePipeline.setFirstPersonPipeline(firstPersonItemsPipeline); // // Projection and View matrix creation @@ -496,6 +504,7 @@ public class RenderingEngine { } debugContentPipeline.render(openGLState, renderPipelineState); normalsForOutlinePipeline.render(openGLState, renderPipelineState); + firstPersonItemsPipeline.render(openGLState, renderPipelineState); postProcessingPipeline.render(openGLState, renderPipelineState); compositePipeline.render(openGLState, renderPipelineState); } diff --git a/src/main/java/electrosphere/renderer/actor/Actor.java b/src/main/java/electrosphere/renderer/actor/Actor.java index 2abc7ab1..7594bd82 100644 --- a/src/main/java/electrosphere/renderer/actor/Actor.java +++ b/src/main/java/electrosphere/renderer/actor/Actor.java @@ -336,14 +336,31 @@ public class Actor { return meshMask; } + /** + * Masks a shader with another shader + * @param mesh The mesh to apply the mask on + * @param vertexShader the vertex shader to apply + * @param fragmentShader the fragment shader to apply + */ public void maskShader(String mesh, String vertexShader, String fragmentShader){ shaderMasks.add(new ActorShaderMask(this.modelPath, mesh, vertexShader, null, fragmentShader)); } + /** + * Masks a shader with another shader + * @param mesh the mesh to apply the mask on + * @param vertexShader the vertex shader to apply + * @param geometryShader the geometry shader to apply + * @param fragmentShader the fragment shader to apply + */ public void maskShader(String mesh, String vertexShader, String geometryShader, String fragmentShader){ shaderMasks.add(new ActorShaderMask(this.modelPath, mesh, vertexShader, geometryShader, fragmentShader)); } + /** + * Unmasks a shader + * @param mesh the mesh to unmask + */ public void unmaskShader(String mesh){ throw new UnsupportedOperationException("Not implemented yet"); } diff --git a/src/main/java/electrosphere/renderer/actor/ActorShaderMask.java b/src/main/java/electrosphere/renderer/actor/ActorShaderMask.java index 26eec461..41bb9d8b 100644 --- a/src/main/java/electrosphere/renderer/actor/ActorShaderMask.java +++ b/src/main/java/electrosphere/renderer/actor/ActorShaderMask.java @@ -1,13 +1,29 @@ package electrosphere.renderer.actor; +/** + * Masks a shader on a mesh with another shader + */ public class ActorShaderMask { + //the model name String modelName; + //the mesh name String meshName; + //the vertex shader String vertexShaderPath; + //the geometry shader String geometryShaderPath; + //the fragment shader String fragmentShaderPath; + /** + * Constructor + * @param modelName + * @param meshName + * @param vertexShaderPath + * @param geometryShaderPath + * @param fragmentShaderPath + */ public ActorShaderMask(String modelName, String meshName, String vertexShaderPath, String geometryShaderPath, String fragmentShaderPath){ this.modelName = modelName; this.meshName = meshName; @@ -16,22 +32,42 @@ public class ActorShaderMask { this.fragmentShaderPath = fragmentShaderPath; } + /** + * Gets the model name + * @return the model name + */ public String getModelName(){ return modelName; } + /** + * Gets the mesh name + * @return the mesh name + */ public String getMeshName(){ return meshName; } + /** + * Gets the vertex shader path + * @return the vertex shader path + */ public String getVertexShaderPath(){ return vertexShaderPath; } + /** + * Gets the geometry shader path + * @return the geometry shader path + */ public String getGeometryShaderPath(){ return geometryShaderPath; } + /** + * Gets the fragment shader path + * @return the fragment shader path + */ public String getFragmentShaderPath(){ return fragmentShaderPath; } diff --git a/src/main/java/electrosphere/renderer/framebuffer/FramebufferUtils.java b/src/main/java/electrosphere/renderer/framebuffer/FramebufferUtils.java index 3cd3f55c..ebb3363d 100644 --- a/src/main/java/electrosphere/renderer/framebuffer/FramebufferUtils.java +++ b/src/main/java/electrosphere/renderer/framebuffer/FramebufferUtils.java @@ -58,8 +58,7 @@ import static org.lwjgl.opengl.GL30.glRenderbufferStorage; import static org.lwjgl.system.MemoryUtil.NULL; /** - * - * @author amaterasu + * Utilities for framebuffer creation */ public class FramebufferUtils { diff --git a/src/main/java/electrosphere/renderer/model/Model.java b/src/main/java/electrosphere/renderer/model/Model.java index deaa882c..8a7e50a1 100644 --- a/src/main/java/electrosphere/renderer/model/Model.java +++ b/src/main/java/electrosphere/renderer/model/Model.java @@ -436,17 +436,17 @@ public class Model { * Describes the model at a high level */ public void describeHighLevel(){ - LoggerInterface.loggerRenderer.DEBUG("Meshes: "); + LoggerInterface.loggerRenderer.WARNING("Meshes: "); for(Mesh mesh : meshes){ - LoggerInterface.loggerRenderer.DEBUG(mesh.getMeshName()); + LoggerInterface.loggerRenderer.WARNING(mesh.getMeshName()); } - LoggerInterface.loggerRenderer.DEBUG("Animations: "); + LoggerInterface.loggerRenderer.WARNING("Animations: "); for(Animation anim : animations){ - LoggerInterface.loggerRenderer.DEBUG(anim.name); + LoggerInterface.loggerRenderer.WARNING(anim.name); } - LoggerInterface.loggerRenderer.DEBUG("Bones:"); + LoggerInterface.loggerRenderer.WARNING("Bones:"); for(Bone bone : bones){ - LoggerInterface.loggerRenderer.DEBUG(bone.boneID); + LoggerInterface.loggerRenderer.WARNING(bone.boneID); } } diff --git a/src/main/java/electrosphere/renderer/pipelines/CompositePipeline.java b/src/main/java/electrosphere/renderer/pipelines/CompositePipeline.java index 49b70814..f67fec38 100644 --- a/src/main/java/electrosphere/renderer/pipelines/CompositePipeline.java +++ b/src/main/java/electrosphere/renderer/pipelines/CompositePipeline.java @@ -9,6 +9,9 @@ import electrosphere.renderer.RenderingEngine; public class CompositePipeline implements RenderPipeline { + //the pipeline for the first person render items + FirstPersonItemsPipeline firstPersonItemsPipeline; + @Override public void render(OpenGLState openGLState, RenderPipelineState renderPipelineState) { Globals.profiler.beginCpuSample("CompositePipeline.render"); @@ -60,12 +63,55 @@ public class CompositePipeline implements RenderPipeline { openGLState.glBindTexture(GL40.GL_TEXTURE_2D, RenderingEngine.transparencyAccumulatorTexture.getTexturePointer()); openGLState.glActiveTexture(GL40.GL_TEXTURE1); openGLState.glBindTexture(GL40.GL_TEXTURE_2D, RenderingEngine.transparencyRevealageTexture.getTexturePointer()); + openGLState.glActiveTexture(GL40.GL_TEXTURE2); + openGLState.glBindTexture(GL40.GL_TEXTURE_2D, firstPersonItemsPipeline.getFramebuffer().getTexturePointer()); GL40.glDrawArrays(GL40.GL_TRIANGLES, 0, 6); + + + + + + // + //Draw the first person texture on top of the other textures + // + openGLState.setActiveShader(renderPipelineState, RenderingEngine.screenTextureShaders); + + openGLState.glActiveTexture(GL40.GL_TEXTURE0); + openGLState.glBindTexture(GL40.GL_TEXTURE_2D, 0); + openGLState.glActiveTexture(GL40.GL_TEXTURE1); + openGLState.glBindTexture(GL40.GL_TEXTURE_2D, 0); + openGLState.glActiveTexture(GL40.GL_TEXTURE2); + openGLState.glBindTexture(GL40.GL_TEXTURE_2D, 0); + openGLState.glActiveTexture(GL40.GL_TEXTURE3); + openGLState.glBindTexture(GL40.GL_TEXTURE_2D, 0); + openGLState.glActiveTexture(GL40.GL_TEXTURE0); + openGLState.glBindTexture(GL40.GL_TEXTURE_2D, firstPersonItemsPipeline.getFramebuffer().getTexturePointer()); + openGLState.glActiveTexture(GL40.GL_TEXTURE1); + + GL40.glDrawArrays(GL40.GL_TRIANGLES, 0, 6); + + + + + + + + // + //Close down pipeline + // GL40.glBindVertexArray(0); Globals.profiler.endCpuSample(); } + + /** + * Get the first person pipeline + * @param firstPersonItemsPipeline the first person pipeline + */ + public void setFirstPersonPipeline(FirstPersonItemsPipeline firstPersonItemsPipeline){ + this.firstPersonItemsPipeline = firstPersonItemsPipeline; + } } diff --git a/src/main/java/electrosphere/renderer/pipelines/FirstPersonItemsPipeline.java b/src/main/java/electrosphere/renderer/pipelines/FirstPersonItemsPipeline.java index 081089c2..c2ae9f18 100644 --- a/src/main/java/electrosphere/renderer/pipelines/FirstPersonItemsPipeline.java +++ b/src/main/java/electrosphere/renderer/pipelines/FirstPersonItemsPipeline.java @@ -1,13 +1,119 @@ package electrosphere.renderer.pipelines; +import static org.lwjgl.opengl.GL30.GL_FRAMEBUFFER; + +import org.joml.Matrix4d; +import org.joml.Quaterniond; +import org.joml.Quaternionf; +import org.joml.Vector3d; +import org.joml.Vector3f; +import org.joml.Vector4d; +import org.lwjgl.opengl.GL40; + +import electrosphere.engine.Globals; +import electrosphere.entity.Entity; +import electrosphere.entity.EntityUtils; +import electrosphere.entity.state.client.firstPerson.FirstPersonTree; +import electrosphere.entity.types.camera.CameraEntityUtils; import electrosphere.renderer.OpenGLState; import electrosphere.renderer.RenderPipelineState; +import electrosphere.renderer.actor.Actor; +import electrosphere.renderer.framebuffer.Framebuffer; +import electrosphere.renderer.framebuffer.FramebufferUtils; +/** + * Renders content that should only be rendered in first person (ie the view model/hands/whatever) + */ public class FirstPersonItemsPipeline implements RenderPipeline { + //framebuffer to store what is rendered in this pass + Framebuffer firstPersonFramebuffer; + + //internal model matrix + Matrix4d modelTransformMatrix = new Matrix4d(); + + /** + * Initializes the pipeline + */ + public void init(){ + this.firstPersonFramebuffer = FramebufferUtils.generateTextureFramebuffer(Globals.WINDOW_WIDTH, Globals.WINDOW_HEIGHT); + } + @Override public void render(OpenGLState openGLState, RenderPipelineState renderPipelineState) { - //todo, render hands to a screenbuffer + + //update logic + updateFirstPersonModelPosition(Globals.firstPersonEntity); + + //setup opengl state + this.firstPersonFramebuffer.bind(); + renderPipelineState.setUseBones(true); + renderPipelineState.setUseLight(false); + renderPipelineState.setUseMaterial(true); + renderPipelineState.setUseMeshShader(true); + renderPipelineState.setUseShadowMap(false); + renderPipelineState.setBufferStandardUniforms(true); + renderPipelineState.setFrustumCheck(false); + + openGLState.glDepthTest(true); + openGLState.glDepthFunc(GL40.GL_LESS); + GL40.glDepthMask(true); + + //clear + GL40.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); + GL40.glClear(GL40.GL_COLOR_BUFFER_BIT); + GL40.glClear(GL40.GL_DEPTH_BUFFER_BIT); + + + //render + if( + !Globals.controlHandler.cameraIsThirdPerson() && + Globals.firstPersonEntity != null + ){ + Vector3d position = EntityUtils.getPosition(Globals.firstPersonEntity); + Actor actor = EntityUtils.getActor(Globals.firstPersonEntity); + //calculate camera-modified vector3f + Vector3f cameraModifiedPosition = new Vector3f((float)position.x,(float)position.y,(float)position.z).sub(CameraEntityUtils.getCameraCenter(Globals.playerCamera)); + //calculate and apply model transform + modelTransformMatrix.identity(); + modelTransformMatrix.translate(cameraModifiedPosition); + modelTransformMatrix.rotate(EntityUtils.getRotation(Globals.firstPersonEntity)); + modelTransformMatrix.scale(new Vector3d(EntityUtils.getScale(Globals.firstPersonEntity))); + actor.applySpatialData(modelTransformMatrix,position); + + //draw + actor.draw(renderPipelineState, openGLState); + } + + //finish up + openGLState.glBindFramebuffer(GL_FRAMEBUFFER,0); + } + + /** + * Gets the framebuffer of the pipeline + * @return the framebuffer + */ + public Framebuffer getFramebuffer(){ + return this.firstPersonFramebuffer; + } + + /** + * Updates the position and rotation of the first person model + */ + private void updateFirstPersonModelPosition(Entity target){ + + FirstPersonTree tree = FirstPersonTree.getTree(target); + + Quaternionf quatRaw = CameraEntityUtils.getYawQuat(Globals.playerCamera).mul(CameraEntityUtils.getPitchQuat(Globals.playerCamera)); + Quaterniond quatd = new Quaterniond(quatRaw).normalize(); + EntityUtils.getRotation(Globals.firstPersonEntity).set(quatd); + + Matrix4d rotationMat = new Matrix4d().rotate(quatd); + + Vector3d playerPos = EntityUtils.getPosition(Globals.playerEntity); + Vector4d behindCameraOffsetRaw = rotationMat.transform(new Vector4d(0,tree.getCameraViewDirOffsetY(),tree.getCameraViewDirOffsetZ(),1)); //pushes the model behind the camera + Vector3d behindCameraOffset = new Vector3d(behindCameraOffsetRaw.x,behindCameraOffsetRaw.y,behindCameraOffsetRaw.z); + EntityUtils.getPosition(Globals.firstPersonEntity).set(playerPos).add(0.0f,tree.getHeightFromOrigin(),0.0f).add(behindCameraOffset); } } diff --git a/src/main/java/electrosphere/server/simulation/MicroSimulation.java b/src/main/java/electrosphere/server/simulation/MicroSimulation.java index 3294db40..2157b1e8 100644 --- a/src/main/java/electrosphere/server/simulation/MicroSimulation.java +++ b/src/main/java/electrosphere/server/simulation/MicroSimulation.java @@ -58,6 +58,15 @@ public class MicroSimulation { currentActor.incrementAnimationTime(Globals.timekeeper.getSimFrameTime() / Main.targetFrameRate); } } + //update first person model animations + if(Globals.firstPersonEntity != null){ + //fetch actor + Actor currentActor = EntityUtils.getActor(Globals.firstPersonEntity); + //increment animations + if(currentActor.isPlayingAnimation()){ + currentActor.incrementAnimationTime(Globals.timekeeper.getSimFrameTime() / Main.targetFrameRate); + } + } //make items play idle animation for(Entity item : dataCell.getScene().getEntitiesWithTag(EntityTags.ITEM)){ ItemUtils.updateItemActorAnimation(item); diff --git a/src/main/java/electrosphere/server/terrain/editing/TerrainEditing.java b/src/main/java/electrosphere/server/terrain/editing/TerrainEditing.java index 52a311a5..1632bbf8 100644 --- a/src/main/java/electrosphere/server/terrain/editing/TerrainEditing.java +++ b/src/main/java/electrosphere/server/terrain/editing/TerrainEditing.java @@ -12,6 +12,9 @@ import electrosphere.server.terrain.manager.ServerTerrainChunk; * Provides utilities for editing terrain (particularly brushes, etc) */ public class TerrainEditing { + + //the minimum value before hard setting to 0 + static final float MINIMUM_FULL_VALUE = 0.01f; /** * Performs a terrain chunk edit. Basically has a sphere around the provided position that it attempts to add value to. @@ -62,7 +65,10 @@ public class TerrainEditing { ){ float current = data.getWeights()[voxelPos.x][voxelPos.y][voxelPos.z]; //hard clamp so it doesn't go over 1 - float finalValue = Math.max(Math.min(current + weight * distance,1),-1); + float finalValue = Math.max(Math.min(current + weight / distance,1),-1); + if(finalValue < MINIMUM_FULL_VALUE && current > MINIMUM_FULL_VALUE){ + finalValue = -1; + } voxelCellManager.editChunk(chunkPos, voxelPos, finalValue, type); } }