-
-
Couldn't load subscription status.
- Fork 1.2k
Minor refactor to allow for saving AnimLayers #2307
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
c0b369b
eb0fb5f
678bd44
420994a
8c31b05
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I decided to only save name and mask. The other fields felt like they're only interesting for runtime. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -32,8 +32,14 @@ | |
| package com.jme3.anim; | ||
|
|
||
| import com.jme3.anim.tween.action.Action; | ||
| import com.jme3.export.InputCapsule; | ||
| import com.jme3.export.JmeExporter; | ||
| import com.jme3.export.JmeImporter; | ||
| import com.jme3.export.OutputCapsule; | ||
| import com.jme3.export.Savable; | ||
| import com.jme3.util.clone.Cloner; | ||
| import com.jme3.util.clone.JmeCloneable; | ||
| import java.io.IOException; | ||
|
|
||
| /** | ||
| * A named portion of an AnimComposer that can run (at most) one Action at a | ||
|
|
@@ -48,7 +54,7 @@ | |
| * <p>Animation time may advance at a different rate from application time, | ||
| * based on speedup factors in the composer and the current Action. | ||
| */ | ||
| public class AnimLayer implements JmeCloneable { | ||
| public class AnimLayer implements JmeCloneable, Savable { | ||
| /** | ||
| * The Action currently running on this layer, or null if none. | ||
| */ | ||
|
|
@@ -57,16 +63,12 @@ public class AnimLayer implements JmeCloneable { | |
| * The name of Action currently running on this layer, or null if none. | ||
| */ | ||
| private String currentActionName; | ||
| /** | ||
| * The composer that owns this layer. Were it not for cloning, this field | ||
| * would be final. | ||
| */ | ||
| private AnimComposer composer; | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. redundant field |
||
|
|
||
| /** | ||
| * Limits the portion of the model animated by this layer. If null, this | ||
| * layer can animate the entire model. | ||
| */ | ||
| private final AnimationMask mask; | ||
| private AnimationMask mask; | ||
| /** | ||
| * The current animation time, in scaled seconds. Always non-negative. | ||
| */ | ||
|
|
@@ -79,23 +81,26 @@ public class AnimLayer implements JmeCloneable { | |
| /** | ||
| * The name of this layer. | ||
| */ | ||
| final private String name; | ||
| private String name; | ||
|
|
||
| private boolean loop = true; | ||
|
|
||
| /** | ||
| * For serialization only. Do not use. | ||
| */ | ||
| protected AnimLayer() { | ||
neph1 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
|
||
| } | ||
|
|
||
| /** | ||
| * Instantiates a layer without a manager or a current Action, owned by the | ||
| * specified composer. | ||
| * | ||
| * @param composer the owner (not null, alias created) | ||
| * @param name the layer name (not null) | ||
| * @param mask the AnimationMask (alias created) or null to allow this layer | ||
| * to animate the entire model | ||
| */ | ||
| AnimLayer(AnimComposer composer, String name, AnimationMask mask) { | ||
| assert composer != null; | ||
| this.composer = composer; | ||
|
|
||
| AnimLayer(String name, AnimationMask mask) { | ||
neph1 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| assert name != null; | ||
| this.name = name; | ||
|
|
||
|
|
@@ -248,14 +253,15 @@ public void setLooping(boolean loop) { | |
| * | ||
| * @param appDeltaTimeInSeconds the amount application time to advance the | ||
| * current Action, in seconds | ||
| * @param globalSpeed the global speed applied to all layers. | ||
| */ | ||
| void update(float appDeltaTimeInSeconds) { | ||
| void update(float appDeltaTimeInSeconds, float globalSpeed) { | ||
| Action action = currentAction; | ||
| if (action == null) { | ||
| return; | ||
| } | ||
|
|
||
| double speedup = action.getSpeed() * composer.getGlobalSpeed(); | ||
| double speedup = action.getSpeed() * globalSpeed; | ||
| double scaledDeltaTime = speedup * appDeltaTimeInSeconds; | ||
| time += scaledDeltaTime; | ||
|
|
||
|
|
@@ -292,7 +298,6 @@ void update(float appDeltaTimeInSeconds) { | |
| */ | ||
| @Override | ||
| public void cloneFields(Cloner cloner, Object original) { | ||
| composer = cloner.clone(composer); | ||
| currentAction = null; | ||
| currentActionName = null; | ||
| } | ||
|
|
@@ -306,4 +311,20 @@ public Object jmeClone() { | |
| throw new AssertionError(); | ||
| } | ||
| } | ||
|
|
||
| @Override | ||
| public void write(JmeExporter ex) throws IOException { | ||
| OutputCapsule oc = ex.getCapsule(this); | ||
| oc.write(name, "name", null); | ||
| if (mask instanceof Savable) { | ||
| oc.write((Savable) mask, "mask", null); | ||
| } | ||
| } | ||
|
|
||
| @Override | ||
| public void read(JmeImporter im) throws IOException { | ||
| InputCapsule ic = im.getCapsule(this); | ||
| name = ic.readString("name", null); | ||
| mask = (AnimationMask) ic.readSavable("mask", null); | ||
| } | ||
| } | ||
Uh oh!
There was an error while loading. Please reload this page.