From 4f663a322cf92c40f6e49f6e3a9d2529bcfa9338 Mon Sep 17 00:00:00 2001 From: austin Date: Thu, 29 May 2025 15:32:59 -0400 Subject: [PATCH] rename actor animation mask entry --- .../menu/debug/entity/ImGuiEntityMacros.java | 6 +- .../entity/tabs/ImGuiEntityActorTab.java | 6 +- .../electrosphere/renderer/actor/Actor.java | 66 +++++++++++-------- ...Mask.java => ActorAnimationMaskEntry.java} | 14 ++-- .../server/entity/poseactor/PoseActor.java | 52 +++++++-------- 5 files changed, 76 insertions(+), 68 deletions(-) rename src/main/java/electrosphere/renderer/actor/mask/{ActorAnimationMask.java => ActorAnimationMaskEntry.java} (84%) diff --git a/src/main/java/electrosphere/client/ui/menu/debug/entity/ImGuiEntityMacros.java b/src/main/java/electrosphere/client/ui/menu/debug/entity/ImGuiEntityMacros.java index d8a3cede..7b54f013 100644 --- a/src/main/java/electrosphere/client/ui/menu/debug/entity/ImGuiEntityMacros.java +++ b/src/main/java/electrosphere/client/ui/menu/debug/entity/ImGuiEntityMacros.java @@ -41,7 +41,7 @@ import electrosphere.entity.types.item.ItemUtils; import electrosphere.entity.types.terrain.TerrainChunk; import electrosphere.logger.LoggerInterface; import electrosphere.renderer.actor.instance.InstancedActor; -import electrosphere.renderer.actor.mask.ActorAnimationMask; +import electrosphere.renderer.actor.mask.ActorAnimationMaskEntry; import electrosphere.renderer.anim.AnimChannel; import electrosphere.renderer.anim.Animation; import electrosphere.renderer.model.Bone; @@ -293,8 +293,8 @@ public class ImGuiEntityMacros { //animation queue if(ImGui.collapsingHeader("Animation Queue")){ - Set animationQueue = poseActor.getAnimationQueue(); - for(ActorAnimationMask mask : animationQueue){ + Set animationQueue = poseActor.getAnimationQueue(); + for(ActorAnimationMaskEntry mask : animationQueue){ ImGui.text(mask.getAnimationName() + " - " + mask.getPriority()); ImGui.text(mask.getDuration() + " " + mask.getTime()); } diff --git a/src/main/java/electrosphere/client/ui/menu/debug/entity/tabs/ImGuiEntityActorTab.java b/src/main/java/electrosphere/client/ui/menu/debug/entity/tabs/ImGuiEntityActorTab.java index a5023cbc..0db19333 100644 --- a/src/main/java/electrosphere/client/ui/menu/debug/entity/tabs/ImGuiEntityActorTab.java +++ b/src/main/java/electrosphere/client/ui/menu/debug/entity/tabs/ImGuiEntityActorTab.java @@ -18,7 +18,7 @@ import electrosphere.entity.types.tree.ProceduralTree; import electrosphere.logger.LoggerInterface; import electrosphere.renderer.actor.Actor; import electrosphere.renderer.actor.instance.InstancedActor; -import electrosphere.renderer.actor.mask.ActorAnimationMask; +import electrosphere.renderer.actor.mask.ActorAnimationMaskEntry; import electrosphere.renderer.actor.mask.ActorMeshMask; import electrosphere.renderer.anim.AnimChannel; import electrosphere.renderer.anim.Animation; @@ -75,8 +75,8 @@ public class ImGuiEntityActorTab { //animation queue if(ImGui.collapsingHeader("Animation Queue")){ - Set animationQueue = actor.getAnimationQueue(); - for(ActorAnimationMask mask : animationQueue){ + Set animationQueue = actor.getAnimationQueue(); + for(ActorAnimationMaskEntry mask : animationQueue){ ImGui.text(mask.getAnimationName() + " - " + mask.getPriority()); ImGui.text(mask.getDuration() + " " + mask.getTime()); } diff --git a/src/main/java/electrosphere/renderer/actor/Actor.java b/src/main/java/electrosphere/renderer/actor/Actor.java index d84aa891..c6f39de3 100644 --- a/src/main/java/electrosphere/renderer/actor/Actor.java +++ b/src/main/java/electrosphere/renderer/actor/Actor.java @@ -8,7 +8,7 @@ import electrosphere.logger.LoggerInterface; import electrosphere.mem.JomlPool; import electrosphere.renderer.OpenGLState; import electrosphere.renderer.RenderPipelineState; -import electrosphere.renderer.actor.mask.ActorAnimationMask; +import electrosphere.renderer.actor.mask.ActorAnimationMaskEntry; import electrosphere.renderer.actor.mask.ActorMeshMask; import electrosphere.renderer.actor.mask.ActorShaderMask; import electrosphere.renderer.actor.mask.ActorTextureMask; @@ -131,7 +131,7 @@ public class Actor { /** * The stack of animations being applied to a given actor */ - private Set animationQueue = new TreeSet(); + private Set animationQueue = new TreeSet(); /** * Mask for overwriting meshes in a given actor @@ -171,7 +171,7 @@ public class Actor { /** * Used for caching animation masks that should be removed */ - private List toRemoveMasks = new LinkedList(); + private List toRemoveMasks = new LinkedList(); @@ -216,7 +216,7 @@ public class Actor { */ public void incrementAnimationTime(double deltaTime){ toRemoveMasks.clear(); - for(ActorAnimationMask mask : animationQueue){ + for(ActorAnimationMaskEntry mask : animationQueue){ if(mask.getFreezeFrames() > 0){ mask.setFreezeFrames(mask.getFreezeFrames() - 1); } else { @@ -226,7 +226,7 @@ public class Actor { } } } - for(ActorAnimationMask mask : toRemoveMasks){ + for(ActorAnimationMaskEntry mask : toRemoveMasks){ animationQueue.remove(mask); } } @@ -237,7 +237,7 @@ public class Actor { * @return The time into the animation, -1 if the animation is not being played */ public double getAnimationTime(String animation){ - ActorAnimationMask mask = this.getAnimationMask(animation); + ActorAnimationMaskEntry mask = this.getAnimationMask(animation); if(mask != null){ return mask.getTime(); } @@ -253,7 +253,7 @@ public class Actor { if(animationName == null){ return false; } - for(ActorAnimationMask mask : animationQueue){ + for(ActorAnimationMaskEntry mask : animationQueue){ if(mask.getAnimationName().equals(animationName)){ return true; } @@ -270,7 +270,7 @@ public class Actor { if(animationData == null){ return false; } - for(ActorAnimationMask mask : animationQueue){ + for(ActorAnimationMaskEntry mask : animationQueue){ if(animationData.getNameFirstPerson() != null && mask.getAnimationName().contains(animationData.getNameFirstPerson())){ return true; } @@ -281,18 +281,26 @@ public class Actor { return false; } + /** + * Checks if the actor is playing an animation + * @return true if it is playing an animation, false otherwise + */ public boolean isPlayingAnimation(){ return animationQueue.size() > 0; } + /** + * Stops playing an animation on the actor + * @param animationName The name of the animation + */ public void stopAnimation(String animationName){ - List toRemove = new LinkedList(); - for(ActorAnimationMask mask : animationQueue){ + List toRemove = new LinkedList(); + for(ActorAnimationMaskEntry mask : animationQueue){ if(mask.getAnimationName().contains(animationName)){ toRemove.add(mask); } } - for(ActorAnimationMask mask : toRemove){ + for(ActorAnimationMaskEntry mask : toRemove){ animationQueue.remove(mask); } } @@ -306,18 +314,18 @@ public class Actor { Model model = Globals.assetManager.fetchModel(baseModelPath); if(model != null && model.getAnimation(animationName) != null){ double length = model.getAnimation(animationName).duration; - ActorAnimationMask animMask = new ActorAnimationMask(priority, animationName, 0, length); + ActorAnimationMaskEntry animMask = new ActorAnimationMaskEntry(priority, animationName, 0, length); for(Bone bone : model.getBones()){ animMask.addBone(bone.boneID); } toRemoveMasks.clear(); - for(ActorAnimationMask currentMask : animationQueue){ + for(ActorAnimationMaskEntry currentMask : animationQueue){ if(currentMask.getPriority() == animMask.getPriority()){ toRemoveMasks.add(currentMask); break; } } - for(ActorAnimationMask currentMask : toRemoveMasks){ + for(ActorAnimationMaskEntry currentMask : toRemoveMasks){ animationQueue.remove(currentMask); } animationQueue.add(animMask); @@ -393,15 +401,15 @@ public class Actor { double length = model.getAnimation(animationName).duration; //construct the animation mask - ActorAnimationMask animMask; + ActorAnimationMaskEntry animMask; if(boneMask == null){ - animMask = new ActorAnimationMask( + animMask = new ActorAnimationMaskEntry( priority, animationName, length ); } else { - animMask = new ActorAnimationMask( + animMask = new ActorAnimationMaskEntry( priority, animationName, length, @@ -419,13 +427,13 @@ public class Actor { //clear existing masks that are lower priority toRemoveMasks.clear(); - for(ActorAnimationMask currentMask : animationQueue){ + for(ActorAnimationMaskEntry currentMask : animationQueue){ if(currentMask.getPriority() == animMask.getPriority()){ toRemoveMasks.add(currentMask); break; } } - for(ActorAnimationMask currentMask : toRemoveMasks){ + for(ActorAnimationMaskEntry currentMask : toRemoveMasks){ animationQueue.remove(currentMask); } animationQueue.add(animMask); @@ -455,12 +463,12 @@ public class Actor { } toRemoveMasks.clear(); - for(ActorAnimationMask mask : this.animationQueue){ + for(ActorAnimationMaskEntry mask : this.animationQueue){ if(mask.getAnimationName() == animationName && mask.getPriority() == priority){ toRemoveMasks.add(mask); } } - for(ActorAnimationMask currentMask : toRemoveMasks){ + for(ActorAnimationMaskEntry currentMask : toRemoveMasks){ animationQueue.remove(currentMask); } } @@ -469,15 +477,15 @@ public class Actor { Model model = Globals.assetManager.fetchModel(baseModelPath); if(model != null){ double length = model.getAnimation(animationName).duration; - ActorAnimationMask animMask = new ActorAnimationMask(priority, animationName, 0, length, boneMask); + ActorAnimationMaskEntry animMask = new ActorAnimationMaskEntry(priority, animationName, 0, length, boneMask); toRemoveMasks.clear(); - for(ActorAnimationMask currentMask : animationQueue){ + for(ActorAnimationMaskEntry currentMask : animationQueue){ if(currentMask.getPriority() == animMask.getPriority()){ toRemoveMasks.add(currentMask); break; } } - for(ActorAnimationMask currentMask : toRemoveMasks){ + for(ActorAnimationMaskEntry currentMask : toRemoveMasks){ animationQueue.remove(currentMask); } animationQueue.add(animMask); @@ -488,7 +496,7 @@ public class Actor { * Gets the animation queue * @return The animation queue */ - public Set getAnimationQueue(){ + public Set getAnimationQueue(){ return animationQueue; } @@ -499,7 +507,7 @@ public class Actor { private void applyAnimationMasks(Model model){ List bonesUsed = new LinkedList(); List currentAnimationMask = new LinkedList(); - for(ActorAnimationMask mask : animationQueue){ + for(ActorAnimationMaskEntry mask : animationQueue){ currentAnimationMask.clear(); for(String currentBone : mask.getBones()){ if(!bonesUsed.contains(currentBone)){ @@ -539,8 +547,8 @@ public class Actor { * @param animationName The animation's name * @return The animation mask if the actor is playing the animation, null otherwise */ - public ActorAnimationMask getAnimationMask(String animationName){ - for(ActorAnimationMask mask : this.getAnimationQueue()){ + public ActorAnimationMaskEntry getAnimationMask(String animationName){ + for(ActorAnimationMaskEntry mask : this.getAnimationQueue()){ if(mask.getAnimationName().equals(animationName)){ return mask; } else if(mask.getAnimationName().equalsIgnoreCase(animationName)){ @@ -942,7 +950,7 @@ public class Actor { if(numFrames < 1){ throw new Error("Num frames less than 1 !" + numFrames); } - for(ActorAnimationMask mask : this.animationQueue){ + for(ActorAnimationMaskEntry mask : this.animationQueue){ if(mask.getAnimationName().contains(animationPath)){ mask.setFreezeFrames(numFrames); break; diff --git a/src/main/java/electrosphere/renderer/actor/mask/ActorAnimationMask.java b/src/main/java/electrosphere/renderer/actor/mask/ActorAnimationMaskEntry.java similarity index 84% rename from src/main/java/electrosphere/renderer/actor/mask/ActorAnimationMask.java rename to src/main/java/electrosphere/renderer/actor/mask/ActorAnimationMaskEntry.java index c2567b56..e7f6d650 100644 --- a/src/main/java/electrosphere/renderer/actor/mask/ActorAnimationMask.java +++ b/src/main/java/electrosphere/renderer/actor/mask/ActorAnimationMaskEntry.java @@ -6,7 +6,7 @@ import java.util.List; /** * An animation mask. Combines an animation name, priority, and a list of bones to apply that animation to */ -public class ActorAnimationMask implements Comparable { +public class ActorAnimationMaskEntry implements Comparable { /** * The priority of the mask @@ -46,7 +46,7 @@ public class ActorAnimationMask implements Comparable { * @param timeMax * @param boneMask */ - public ActorAnimationMask(int priority, String animationName, double time, double timeMax, List boneMask){ + public ActorAnimationMaskEntry(int priority, String animationName, double time, double timeMax, List boneMask){ this.priority = priority; this.animationName = animationName; this.time = time; @@ -61,7 +61,7 @@ public class ActorAnimationMask implements Comparable { * @param timeMax * @param boneMask */ - public ActorAnimationMask(int priority, String animationName, double timeMax, List boneMask){ + public ActorAnimationMaskEntry(int priority, String animationName, double timeMax, List boneMask){ this.priority = priority; this.animationName = animationName; this.timeMax = timeMax; @@ -75,7 +75,7 @@ public class ActorAnimationMask implements Comparable { * @param time * @param timeMax */ - public ActorAnimationMask(int priority, String animationName, double time, double timeMax){ + public ActorAnimationMaskEntry(int priority, String animationName, double time, double timeMax){ this(priority, animationName, time, timeMax, new LinkedList()); } @@ -85,7 +85,7 @@ public class ActorAnimationMask implements Comparable { * @param animationName * @param timeMax */ - public ActorAnimationMask(int priority, String animationName, double timeMax){ + public ActorAnimationMaskEntry(int priority, String animationName, double timeMax){ this(priority, animationName, 0, timeMax, new LinkedList()); } @@ -162,8 +162,8 @@ public class ActorAnimationMask implements Comparable { } @Override - public int compareTo(ActorAnimationMask o) { - ActorAnimationMask otherMask = (ActorAnimationMask)o; + public int compareTo(ActorAnimationMaskEntry o) { + ActorAnimationMaskEntry otherMask = (ActorAnimationMaskEntry)o; if(otherMask.priority > this.priority){ return -1; } else if(otherMask.priority < this.priority){ diff --git a/src/main/java/electrosphere/server/entity/poseactor/PoseActor.java b/src/main/java/electrosphere/server/entity/poseactor/PoseActor.java index cfcd5671..1328ff0d 100644 --- a/src/main/java/electrosphere/server/entity/poseactor/PoseActor.java +++ b/src/main/java/electrosphere/server/entity/poseactor/PoseActor.java @@ -19,7 +19,7 @@ import electrosphere.entity.state.AnimationPriorities; import electrosphere.logger.LoggerInterface; import electrosphere.renderer.actor.ActorBoneRotator; import electrosphere.renderer.actor.ActorStaticMorph; -import electrosphere.renderer.actor.mask.ActorAnimationMask; +import electrosphere.renderer.actor.mask.ActorAnimationMaskEntry; import electrosphere.renderer.model.Bone; /** @@ -40,7 +40,7 @@ public class PoseActor { /** * Priority queue of animations to play. Allows masking a higher priority animation over a lower priority one. */ - Set animationQueue = new TreeSet(); + Set animationQueue = new TreeSet(); /** * Bone rotation map. Used to apply rotator functionality to bones (think hair, cloth, and camera rotation on looking) @@ -79,7 +79,7 @@ public class PoseActor { //Used to keep track of which animations have completed and therefore should be removed //Separate variable so no concurrent modification to anim lists/maps - List toRemoveMasks = new LinkedList(); + List toRemoveMasks = new LinkedList(); /** * Increments time of all currently played animations @@ -87,13 +87,13 @@ public class PoseActor { */ public void incrementAnimationTime(double deltaTime){ toRemoveMasks.clear(); - for(ActorAnimationMask mask : animationQueue){ + for(ActorAnimationMaskEntry mask : animationQueue){ mask.setTime(mask.getTime() + deltaTime * animationScalar); if(mask.getTime() > mask.getDuration()){ toRemoveMasks.add(mask); } } - for(ActorAnimationMask mask : toRemoveMasks){ + for(ActorAnimationMaskEntry mask : toRemoveMasks){ animationQueue.remove(mask); } } @@ -104,7 +104,7 @@ public class PoseActor { * @return The current time of the animation if it exists, -1.0f otherwise */ public double getAnimationTime(String animationName){ - for(ActorAnimationMask mask : animationQueue){ + for(ActorAnimationMaskEntry mask : animationQueue){ if(mask.getAnimationName().contains(animationName)){ return mask.getTime(); } @@ -118,7 +118,7 @@ public class PoseActor { * @return True if the animation is playing, false otherwise */ public boolean isPlayingAnimation(String animationName){ - for(ActorAnimationMask mask : animationQueue){ + for(ActorAnimationMaskEntry mask : animationQueue){ if(mask.getAnimationName().contains(animationName)){ return true; } @@ -135,7 +135,7 @@ public class PoseActor { if(animationData == null){ return false; } - for(ActorAnimationMask mask : animationQueue){ + for(ActorAnimationMaskEntry mask : animationQueue){ if(mask.getAnimationName().contains(animationData.getNameThirdPerson())){ return true; } @@ -156,13 +156,13 @@ public class PoseActor { * @param animationName The name of the animation to stop playing */ public void stopAnimation(String animationName){ - List toRemove = new LinkedList(); - for(ActorAnimationMask mask : animationQueue){ + List toRemove = new LinkedList(); + for(ActorAnimationMaskEntry mask : animationQueue){ if(mask.getAnimationName().contains(animationName)){ toRemove.add(mask); } } - for(ActorAnimationMask mask : toRemove){ + for(ActorAnimationMaskEntry mask : toRemove){ animationQueue.remove(mask); } } @@ -176,18 +176,18 @@ public class PoseActor { PoseModel model = Globals.assetManager.fetchPoseModel(modelPath); if(model != null && model.getAnimation(animationName) != null){ double length = model.getAnimation(animationName).duration; - ActorAnimationMask animMask = new ActorAnimationMask(priority, animationName, 0, length); + ActorAnimationMaskEntry animMask = new ActorAnimationMaskEntry(priority, animationName, 0, length); for(Bone bone : model.bones){ animMask.addBone(bone.boneID); } toRemoveMasks.clear(); - for(ActorAnimationMask currentMask : animationQueue){ + for(ActorAnimationMaskEntry currentMask : animationQueue){ if(currentMask.getPriority() == animMask.getPriority()){ toRemoveMasks.add(currentMask); break; } } - for(ActorAnimationMask currentMask : toRemoveMasks){ + for(ActorAnimationMaskEntry currentMask : toRemoveMasks){ animationQueue.remove(currentMask); } animationQueue.add(animMask); @@ -255,15 +255,15 @@ public class PoseActor { double length = model.getAnimation(animationName).duration; //construct the animation mask - ActorAnimationMask animMask; + ActorAnimationMaskEntry animMask; if(boneMask == null){ - animMask = new ActorAnimationMask( + animMask = new ActorAnimationMaskEntry( priority, animationName, length ); } else { - animMask = new ActorAnimationMask( + animMask = new ActorAnimationMaskEntry( priority, animationName, length, @@ -281,13 +281,13 @@ public class PoseActor { //clear existing masks that are lower priority toRemoveMasks.clear(); - for(ActorAnimationMask currentMask : animationQueue){ + for(ActorAnimationMaskEntry currentMask : animationQueue){ if(currentMask.getPriority() == animMask.getPriority()){ toRemoveMasks.add(currentMask); break; } } - for(ActorAnimationMask currentMask : toRemoveMasks){ + for(ActorAnimationMaskEntry currentMask : toRemoveMasks){ animationQueue.remove(currentMask); } animationQueue.add(animMask); @@ -317,12 +317,12 @@ public class PoseActor { } toRemoveMasks.clear(); - for(ActorAnimationMask mask : this.animationQueue){ + for(ActorAnimationMaskEntry mask : this.animationQueue){ if(mask.getAnimationName() == animationName && mask.getPriority() == priority){ toRemoveMasks.add(mask); } } - for(ActorAnimationMask currentMask : toRemoveMasks){ + for(ActorAnimationMaskEntry currentMask : toRemoveMasks){ animationQueue.remove(currentMask); } } @@ -337,15 +337,15 @@ public class PoseActor { PoseModel model = Globals.assetManager.fetchPoseModel(modelPath); if(model != null){ double length = model.getAnimation(animationName).duration; - ActorAnimationMask animMask = new ActorAnimationMask(priority, animationName, 0, length, boneMask); + ActorAnimationMaskEntry animMask = new ActorAnimationMaskEntry(priority, animationName, 0, length, boneMask); toRemoveMasks.clear(); - for(ActorAnimationMask currentMask : animationQueue){ + for(ActorAnimationMaskEntry currentMask : animationQueue){ if(currentMask.getPriority() == animMask.getPriority()){ toRemoveMasks.add(currentMask); break; } } - for(ActorAnimationMask currentMask : toRemoveMasks){ + for(ActorAnimationMaskEntry currentMask : toRemoveMasks){ animationQueue.remove(currentMask); } animationQueue.add(animMask); @@ -359,7 +359,7 @@ public class PoseActor { private void applyAnimationMasks(PoseModel model){ List bonesUsed = new LinkedList(); List currentAnimationMask = new LinkedList(); - for(ActorAnimationMask mask : animationQueue){ + for(ActorAnimationMaskEntry mask : animationQueue){ currentAnimationMask.clear(); for(String currentBone : mask.getBones()){ if(!bonesUsed.contains(currentBone)){ @@ -375,7 +375,7 @@ public class PoseActor { * Gets the animation queue * @return The animation queue */ - public Set getAnimationQueue(){ + public Set getAnimationQueue(){ return animationQueue; }