diff --git a/src/main/java/com/trainguy9512/animationoverhaul/animation/data/AnimationDataContainer.java b/src/main/java/com/trainguy9512/animationoverhaul/animation/data/AnimationDataContainer.java index 471c138..cedf8db 100644 --- a/src/main/java/com/trainguy9512/animationoverhaul/animation/data/AnimationDataContainer.java +++ b/src/main/java/com/trainguy9512/animationoverhaul/animation/data/AnimationDataContainer.java @@ -34,6 +34,7 @@ public static AnimationDataContainer of(JointSkeleton jointSkeleton){ return new AnimationDataContainer(jointSkeleton); } + @Override public JointSkeleton getJointSkeleton(){ return this.jointSkeleton; } diff --git a/src/main/java/com/trainguy9512/animationoverhaul/animation/data/PoseCalculationDataContainer.java b/src/main/java/com/trainguy9512/animationoverhaul/animation/data/PoseCalculationDataContainer.java index 710cc8b..695d87e 100644 --- a/src/main/java/com/trainguy9512/animationoverhaul/animation/data/PoseCalculationDataContainer.java +++ b/src/main/java/com/trainguy9512/animationoverhaul/animation/data/PoseCalculationDataContainer.java @@ -3,6 +3,7 @@ import com.trainguy9512.animationoverhaul.animation.data.driver.Driver; import com.trainguy9512.animationoverhaul.animation.data.key.AnimationDataKey; import com.trainguy9512.animationoverhaul.animation.data.key.AnimationDriverKey; +import com.trainguy9512.animationoverhaul.animation.joint.JointSkeleton; import com.trainguy9512.animationoverhaul.animation.pose.AnimationPose; import com.trainguy9512.animationoverhaul.animation.pose.sampler.PoseSampler; import com.trainguy9512.animationoverhaul.animation.pose.sampler.Sampleable; @@ -36,4 +37,9 @@ public interface PoseCalculationDataContainer { */ public
AnimationPose sample(AnimationDataKey
poseSamplerKey, AnimationPose animationPose, float partialTicks);
+ /**
+ * Returns the joint skeleton for the data container.
+ */
+ public JointSkeleton getJointSkeleton();
+
}
diff --git a/src/main/java/com/trainguy9512/animationoverhaul/animation/pose/function/CachedPoseFunction.java b/src/main/java/com/trainguy9512/animationoverhaul/animation/pose/function/CachedPoseFunction.java
new file mode 100644
index 0000000..6bbcc1f
--- /dev/null
+++ b/src/main/java/com/trainguy9512/animationoverhaul/animation/pose/function/CachedPoseFunction.java
@@ -0,0 +1,16 @@
+package com.trainguy9512.animationoverhaul.animation.pose.function;
+
+import com.trainguy9512.animationoverhaul.animation.pose.AnimationPose;
+import org.jetbrains.annotations.NotNull;
+
+public class CachedPoseFunction implements PoseFunction {
+ @Override
+ public @NotNull AnimationPose compute(FunctionInterpolationContext context) {
+ return null;
+ }
+
+ @Override
+ public void tick(FunctionEvaluationState context) {
+
+ }
+}
diff --git a/src/main/java/com/trainguy9512/animationoverhaul/animation/pose/function/PoseFunction.java b/src/main/java/com/trainguy9512/animationoverhaul/animation/pose/function/PoseFunction.java
index a79dcce..a5794e3 100644
--- a/src/main/java/com/trainguy9512/animationoverhaul/animation/pose/function/PoseFunction.java
+++ b/src/main/java/com/trainguy9512/animationoverhaul/animation/pose/function/PoseFunction.java
@@ -1,14 +1,35 @@
package com.trainguy9512.animationoverhaul.animation.pose.function;
+import com.trainguy9512.animationoverhaul.animation.data.OnTickDataContainer;
import com.trainguy9512.animationoverhaul.animation.data.PoseCalculationDataContainer;
import com.trainguy9512.animationoverhaul.animation.pose.AnimationPose;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
public interface PoseFunction {
- AnimationPose calculate(PoseFunction.FunctionContext functionContext);
+ @NotNull AnimationPose compute(PoseFunction.FunctionInterpolationContext context);
+
+ void tick(FunctionEvaluationState evaluationState);
+
+ public record FunctionEvaluationState(OnTickDataContainer dataContainer, boolean isRelevant, boolean shouldReset){
+ public static FunctionEvaluationState of(OnTickDataContainer dataContainer, boolean isRelevant, boolean shouldReset){
+ return new FunctionEvaluationState(dataContainer, isRelevant, shouldReset);
+ }
+
+ public FunctionEvaluationState modify(boolean isRelevant, boolean shouldReset){
+ return FunctionEvaluationState.of(this.dataContainer, isRelevant, shouldReset);
+ }
+ }
+
- public interface FunctionContext {
- PoseCalculationDataContainer getDataContainer();
- float getPartialTicks();
+ public interface FunctionInterpolationContext {
+ PoseCalculationDataContainer dataContainer();
+ float partialTicks();
}
+
+
}
diff --git a/src/main/java/com/trainguy9512/animationoverhaul/animation/pose/function/TickablePoseFunction.java b/src/main/java/com/trainguy9512/animationoverhaul/animation/pose/function/TickablePoseFunction.java
deleted file mode 100644
index 0e5f6e6..0000000
--- a/src/main/java/com/trainguy9512/animationoverhaul/animation/pose/function/TickablePoseFunction.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.trainguy9512.animationoverhaul.animation.pose.function;
-
-import com.trainguy9512.animationoverhaul.animation.data.OnTickDataContainer;
-
-public interface TickablePoseFunction extends PoseFunction {
- void tick(OnTickDataContainer dataContainer);
-}
diff --git a/src/main/java/com/trainguy9512/animationoverhaul/animation/pose/function/TimeBasedPoseFunction.java b/src/main/java/com/trainguy9512/animationoverhaul/animation/pose/function/TimeBasedPoseFunction.java
new file mode 100644
index 0000000..dade782
--- /dev/null
+++ b/src/main/java/com/trainguy9512/animationoverhaul/animation/pose/function/TimeBasedPoseFunction.java
@@ -0,0 +1,46 @@
+package com.trainguy9512.animationoverhaul.animation.pose.function;
+
+import com.trainguy9512.animationoverhaul.animation.pose.AnimationPose;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.function.Function;
+
+public class TimeBasedPoseFunction implements PoseFunction {
+
+ Function