move tree and idle to use unified animation object
This commit is contained in:
parent
cc2ff6a93a
commit
e6fc720299
@ -429,8 +429,11 @@
|
||||
"onDamageIFrames" : 30
|
||||
},
|
||||
"idleData": {
|
||||
"idleAnimation" : "Idle1",
|
||||
"firstPersonIdleAnimation" : "Idle"
|
||||
"animation": {
|
||||
"nameFirstPerson" : "Idle",
|
||||
"nameThirdPerson" : "Idle1",
|
||||
"priorityCategory" : "IDLE"
|
||||
}
|
||||
},
|
||||
"modelPath" : "Models/creatures/person2/person2_1.glb",
|
||||
"viewModelData" : {
|
||||
|
||||
@ -166,7 +166,7 @@ public class StateTransitionUtil {
|
||||
state.startedAnimation = false;
|
||||
} else if(state.animation != null && (!poseActor.isPlayingAnimation() || !poseActor.isPlayingAnimation(animation))){
|
||||
//play animation for state
|
||||
poseActor.playAnimation(animation, true);
|
||||
poseActor.playAnimation(animation);
|
||||
poseActor.incrementAnimationTime(0.0001);
|
||||
state.startedAnimation = true;
|
||||
} else if(state.animation == null && state.onComplete != null){
|
||||
|
||||
@ -267,7 +267,7 @@ public class ServerAttackTree implements BehaviorTree {
|
||||
case ATTACK: {
|
||||
if(entityPoseActor != null && currentMove != null){
|
||||
if(!entityPoseActor.isPlayingAnimation() || !entityPoseActor.isPlayingAnimation(currentMove.getAnimationAttack())){
|
||||
entityPoseActor.playAnimation(currentMove.getAnimationAttack(),true);
|
||||
entityPoseActor.playAnimation(currentMove.getAnimationAttack());
|
||||
entityPoseActor.incrementAnimationTime(0.0001);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,7 +2,6 @@ package electrosphere.entity.state.idle;
|
||||
|
||||
|
||||
import electrosphere.net.synchronization.BehaviorTreeIdEnums;
|
||||
import electrosphere.entity.state.AnimationPriorities;
|
||||
import electrosphere.entity.state.attack.ClientAttackTree;
|
||||
import electrosphere.entity.state.client.firstPerson.FirstPersonTree;
|
||||
import electrosphere.entity.state.movement.AirplaneMovementTree;
|
||||
@ -94,14 +93,17 @@ public class ClientIdleTree implements BehaviorTree {
|
||||
if(entityActor != null){
|
||||
if(
|
||||
idleData != null &&
|
||||
(!entityActor.isPlayingAnimation() || !entityActor.isPlayingAnimation(idleData.getIdleAnimation())) &&
|
||||
(Globals.assetManager.fetchModel(entityActor.getModelPath()) != null && Globals.assetManager.fetchModel(entityActor.getModelPath()).getAnimation(idleData.getIdleAnimation()) != null)
|
||||
(!entityActor.isPlayingAnimation() || !entityActor.isPlayingAnimation(idleData.getAnimation())) &&
|
||||
(
|
||||
Globals.assetManager.fetchModel(entityActor.getModelPath()) != null &&
|
||||
Globals.assetManager.fetchModel(entityActor.getModelPath()).getAnimation(idleData.getAnimation().getNameThirdPerson()) != null
|
||||
)
|
||||
|
||||
){
|
||||
entityActor.playAnimation(idleData.getIdleAnimation(),AnimationPriorities.getValue(AnimationPriorities.IDLE));
|
||||
entityActor.playAnimation(idleData.getAnimation(),true);
|
||||
entityActor.incrementAnimationTime(0.0001);
|
||||
}
|
||||
FirstPersonTree.conditionallyPlayAnimation(Globals.firstPersonEntity, idleData.getFirstPersonIdleAnimation(), AnimationPriorities.getValue(AnimationPriorities.IDLE));
|
||||
FirstPersonTree.conditionallyPlayAnimation(Globals.firstPersonEntity, idleData.getAnimation());
|
||||
}
|
||||
break;
|
||||
case NOT_IDLE:
|
||||
|
||||
@ -2,7 +2,6 @@ package electrosphere.entity.state.idle;
|
||||
|
||||
|
||||
import electrosphere.net.synchronization.FieldIdEnums;
|
||||
import electrosphere.entity.state.AnimationPriorities;
|
||||
import electrosphere.entity.state.attack.ClientAttackTree.AttackTreeState;
|
||||
import electrosphere.entity.state.attack.ServerAttackTree;
|
||||
import electrosphere.entity.state.idle.ClientIdleTree.IdleTreeState;
|
||||
@ -15,12 +14,12 @@ 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.IdleData;
|
||||
import electrosphere.net.parser.net.message.EntityMessage;
|
||||
import electrosphere.net.parser.net.message.SynchronizationMessage;
|
||||
import electrosphere.net.synchronization.BehaviorTreeIdEnums;
|
||||
import electrosphere.net.synchronization.annotation.SyncedField;
|
||||
import electrosphere.net.synchronization.annotation.SynchronizedBehaviorTree;
|
||||
import electrosphere.renderer.anim.Animation;
|
||||
import electrosphere.server.datacell.utils.DataCellSearchUtils;
|
||||
import electrosphere.server.datacell.utils.ServerBehaviorTreeUtils;
|
||||
import electrosphere.server.poseactor.PoseActor;
|
||||
@ -39,15 +38,19 @@ public class ServerIdleTree implements BehaviorTree {
|
||||
|
||||
Entity parent;
|
||||
|
||||
//The idle data
|
||||
IdleData idleData;
|
||||
|
||||
CopyOnWriteArrayList<EntityMessage> networkMessageQueue = new CopyOnWriteArrayList<EntityMessage>();
|
||||
|
||||
/**
|
||||
* Creates a server idle tree
|
||||
* @param e The entity to attach it to
|
||||
*/
|
||||
public ServerIdleTree(Entity e){
|
||||
public ServerIdleTree(Entity e, IdleData idleData){
|
||||
state = IdleTreeState.IDLE;
|
||||
parent = e;
|
||||
this.idleData = idleData;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -60,19 +63,30 @@ public class ServerIdleTree implements BehaviorTree {
|
||||
return state;
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts idling
|
||||
*/
|
||||
public void start(){
|
||||
//TODO: check if can start moving
|
||||
state = IdleTreeState.IDLE;
|
||||
setState(IdleTreeState.IDLE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Interrupts the idle animation
|
||||
*/
|
||||
public void interrupt(){
|
||||
state = IdleTreeState.NOT_IDLE;
|
||||
setState(IdleTreeState.NOT_IDLE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Stops the idle animation
|
||||
*/
|
||||
public void stop(){
|
||||
state = IdleTreeState.NOT_IDLE;
|
||||
setState(IdleTreeState.NOT_IDLE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Simulates the idle tree
|
||||
*/
|
||||
public void simulate(float deltaTime){
|
||||
PoseActor poseActor = EntityUtils.getPoseActor(parent);
|
||||
|
||||
@ -91,9 +105,9 @@ public class ServerIdleTree implements BehaviorTree {
|
||||
case IDLE:
|
||||
if(poseActor != null){
|
||||
if(
|
||||
(!poseActor.isPlayingAnimation() || !poseActor.isPlayingAnimation(Animation.ANIMATION_IDLE_1))
|
||||
(!poseActor.isPlayingAnimation() || !poseActor.isPlayingAnimation(idleData.getAnimation()))
|
||||
){
|
||||
poseActor.playAnimation(Animation.ANIMATION_IDLE_1,AnimationPriorities.getValue(AnimationPriorities.IDLE));
|
||||
poseActor.playAnimation(idleData.getAnimation());
|
||||
poseActor.incrementAnimationTime(0.0001);
|
||||
}
|
||||
}
|
||||
@ -156,8 +170,8 @@ public class ServerIdleTree implements BehaviorTree {
|
||||
* @param entity The entity to attach to
|
||||
* @param tree The behavior tree to attach
|
||||
*/
|
||||
public static ServerIdleTree attachTree(Entity parent){
|
||||
ServerIdleTree rVal = new ServerIdleTree(parent);
|
||||
public static ServerIdleTree attachTree(Entity parent, IdleData idleData){
|
||||
ServerIdleTree rVal = new ServerIdleTree(parent, idleData);
|
||||
//put manual code here (setting params, etc)
|
||||
|
||||
|
||||
|
||||
@ -673,7 +673,9 @@ public class CreatureUtils {
|
||||
ServerEntityTagUtils.attachTagToEntity(rVal, EntityTags.LIFE_STATE);
|
||||
}
|
||||
//idle tree & generic stuff all creatures have
|
||||
ServerIdleTree.attachTree(rVal);
|
||||
if(rawType.getIdleData() != null){
|
||||
ServerIdleTree.attachTree(rVal, rawType.getIdleData());
|
||||
}
|
||||
CreatureUtils.setFacingVector(rVal, MathUtils.getOriginVector());
|
||||
rVal.putData(EntityDataStrings.DRAW_CAST_SHADOW, true);
|
||||
|
||||
|
||||
@ -18,7 +18,6 @@ import electrosphere.entity.state.gravity.ClientGravityTree;
|
||||
import electrosphere.entity.state.gravity.ServerGravityTree;
|
||||
import electrosphere.entity.state.hitbox.HitboxCollectionState;
|
||||
import electrosphere.entity.state.idle.ClientIdleTree;
|
||||
import electrosphere.entity.state.idle.ServerIdleTree;
|
||||
import electrosphere.entity.state.inventory.ClientInventoryState;
|
||||
import electrosphere.entity.state.inventory.InventoryUtils;
|
||||
import electrosphere.entity.state.inventory.ServerInventoryState;
|
||||
@ -198,8 +197,6 @@ public class ObjectUtils {
|
||||
if(rawType.getHitboxData() != null){
|
||||
HitboxCollectionState.attachHitboxState(realm.getHitboxManager(), true, rVal, rawType.getHitboxData());
|
||||
}
|
||||
//idle tree & generic stuff all objects have
|
||||
ServerIdleTree.attachTree(rVal);
|
||||
|
||||
|
||||
//required for synchronization manager
|
||||
|
||||
@ -1,30 +1,21 @@
|
||||
package electrosphere.game.data.creature.type;
|
||||
|
||||
import electrosphere.game.data.common.TreeDataAnimation;
|
||||
|
||||
/**
|
||||
* 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;
|
||||
TreeDataAnimation animation;
|
||||
|
||||
/**
|
||||
* the animation that plays when the creature is idle
|
||||
* @return
|
||||
* The animation that plays when the creature is idle
|
||||
* @return The animation
|
||||
*/
|
||||
public String getIdleAnimation(){
|
||||
return idleAnimation;
|
||||
}
|
||||
|
||||
/**
|
||||
* the animation that plays when the creature idles in first person
|
||||
* @return
|
||||
*/
|
||||
public String getFirstPersonIdleAnimation(){
|
||||
return firstPersonIdleAnimation;
|
||||
public TreeDataAnimation getAnimation(){
|
||||
return animation;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -169,15 +169,10 @@ public class PoseActor {
|
||||
* @param animation The animation data
|
||||
* @param isThirdPerson true if is third person, false if is first person
|
||||
*/
|
||||
public void playAnimation(TreeDataAnimation animation, boolean isThirdPerson){
|
||||
public void playAnimation(TreeDataAnimation animation){
|
||||
|
||||
//Get the animation's name
|
||||
String animationName = "";
|
||||
if(isThirdPerson){
|
||||
animationName = animation.getNameThirdPerson();
|
||||
} else {
|
||||
animationName = animation.getNameFirstPerson();
|
||||
}
|
||||
String animationName = animation.getNameThirdPerson();
|
||||
|
||||
//Get the animation's priority
|
||||
int priority = AnimationPriorities.getValue(AnimationPriorities.DEFAULT);
|
||||
@ -202,12 +197,9 @@ public class PoseActor {
|
||||
}
|
||||
}
|
||||
|
||||
if(group != null && isThirdPerson == true){
|
||||
if(group != null){
|
||||
boneMask.addAll(group.getBoneNamesThirdPerson());
|
||||
}
|
||||
if(group != null && isThirdPerson == false){
|
||||
boneMask.addAll(group.getBoneNamesFirstPerson());
|
||||
}
|
||||
}
|
||||
} else if(this.boneGroups == null){
|
||||
LoggerInterface.loggerRenderer.WARNING("Trying to play animation on pose actor that uses bone groups, but the actor's bone group isn't defined!");
|
||||
|
||||
Loading…
Reference in New Issue
Block a user