diff --git a/jme3-core/src/main/java/com/jme3/anim/tween/action/BlendableAction.java b/jme3-core/src/main/java/com/jme3/anim/tween/action/BlendableAction.java
index c9882529f9..ee2f720c8c 100644
--- a/jme3-core/src/main/java/com/jme3/anim/tween/action/BlendableAction.java
+++ b/jme3-core/src/main/java/com/jme3/anim/tween/action/BlendableAction.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2022 jMonkeyEngine
+ * Copyright (c) 2009-2024 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -38,6 +38,20 @@
import com.jme3.util.clone.Cloner;
import java.util.Collection;
+/**
+ * An implementation of the Action interface that manages the interpolation code
+ * using the action length (duration) and time per frames in seconds.
+ *
+ *
+ * To implement this interface, override the methods :
+ *
{@link BlendableAction#doInterpolate(double)} and place your interpolation management code.
+ * {@link BlendableAction#collectTransform(HasLocalTransform, Transform, float, BlendableAction)} and place your interpolation code based on the #{@link BlendableAction#weight}.
+ * {@link BlendableAction#getTargets()} and place the code to get target objects subjected to interpolation.
+ *
+ * Created by Nehon.
+ * @see ClipAction
+ * @see BlendAction
+ */
public abstract class BlendableAction extends Action {
protected BlendableAction collectTransformDelegate;
@@ -46,11 +60,24 @@ public abstract class BlendableAction extends Action {
private double transitionLength = 0.4f;
private float weight = 1f;
private TransitionTween transition = new TransitionTween(transitionLength);
-
+
+ /**
+ * Callback to the constructor of the super class to assign actions to {@link Action#actions} to be interpolated.
+ *
+ * @param tweens actions in raw tween {@link AbstractTween} and its descendants( ex : {@link com.jme3.anim.tween.Tweens#parallel(Tween...)},
+ * or an array of {@link Action} and its descendants(ex : {@link ClipAction} and {@link BaseAction}.
+ * @see Action#Action(Tween...)
+ */
public BlendableAction(Tween... tweens) {
super(tweens);
}
+ /**
+ * Delegates the interpolation to a specific instance of type {@link BlendableAction} based on its weight attribute.
+ * This instance will be the source of the animation transition weight.
+ *
+ * @param delegate the
+ */
public void setCollectTransformDelegate(BlendableAction delegate) {
this.collectTransformDelegate = delegate;
}
@@ -61,12 +88,13 @@ public boolean interpolate(double t) {
if (t < 0) {
return true;
}
-
+
+ // if the interpolation isn't delegated to a subclass instance, then calculate the transitionWeight from here.
if (collectTransformDelegate == null) {
if (transition.getLength() > getLength()) {
transition.setLength(getLength());
}
- if(isForward()) {
+ if (isForward()) {
transition.interpolate(t);
} else {
float v = Math.max((float)(getLength() - t), 0f);
@@ -93,11 +121,32 @@ public float getWeight() {
public void setWeight(float weight) {
this.weight = weight;
}
-
+
+ /**
+ * Override this method and manage the interpolation code inside.
+ * Called by {@link BlendableAction#interpolate(double)}, after clamping time(t) to a ratio between (0)
+ * and (1) based on the action length.
+ *
+ * @param t the current time of frames.
+ */
protected abstract void doInterpolate(double t);
+ /**
+ * Override this method and collect the target objects for this action that the interpolation will be applied on them.
+ *
+ * @return the current involved targets.
+ */
public abstract Collection getTargets();
+ /**
+ * Override this method and interpolate collected transforms based on the custom weight {@link BlendableAction#weight} from a delegated source.
+ * This method is dispatched by delegating from another BlendableActions sources using {@link BlendableAction#setCollectTransformDelegate(BlendableAction)}.
+ *
+ * @param target the target involved for interpolation.
+ * @param t the transform to be used in interpolation.
+ * @param weight the scale factor(delta) used for interpolation.
+ * @param source the source of the method call(Source of delegation).
+ */
public abstract void collectTransform(HasLocalTransform target, Transform t, float weight, BlendableAction source);
public double getTransitionLength() {
@@ -126,8 +175,9 @@ public void setMaxTransitionWeight(double maxTransitionWeight) {
}
/**
+ * Retrieves the maximum weight at which the transition can occur.
*
- * @return The max transition weight (default=1)
+ * @return the max transition weight (default=1)
*/
public double getMaxTransitionWeight() {
return maxTransitionWeight;