-
Notifications
You must be signed in to change notification settings - Fork 15
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
30 changed files
with
433 additions
and
274 deletions.
There are no files selected for viewing
78 changes: 78 additions & 0 deletions
78
src/main/java/com/uraneptus/sullysmod/client/animations/AnimUtil.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
package com.uraneptus.sullysmod.client.animations; | ||
|
||
import com.uraneptus.sullysmod.client.model.RootModel; | ||
import net.minecraft.client.animation.AnimationChannel; | ||
import net.minecraft.client.animation.AnimationDefinition; | ||
import net.minecraft.client.animation.Keyframe; | ||
import net.minecraft.client.model.EntityModel; | ||
import net.minecraft.client.model.geom.ModelPart; | ||
import net.minecraft.util.Mth; | ||
import net.minecraft.world.entity.AnimationState; | ||
import org.joml.Vector3f; | ||
|
||
import java.util.List; | ||
import java.util.Map; | ||
import java.util.Optional; | ||
|
||
public class AnimUtil { | ||
private static final Vector3f ANIMATION_VECTOR_CACHE = new Vector3f(); | ||
|
||
public static <M extends EntityModel<?> & RootModel> void animate(M model, AnimationState pAnimationState, AnimationDefinition pAnimationDefinition, float pAgeInTicks) { | ||
animate(model, pAnimationState, pAnimationDefinition, pAgeInTicks, 1.0F); | ||
} | ||
|
||
public static <M extends EntityModel<?> & RootModel> void animateWalk(M model, AnimationDefinition pAnimationDefinition, float pLimbSwing, float pLimbSwingAmount, float pMaxAnimationSpeed, float pAnimationScaleFactor) { | ||
long i = (long)(pLimbSwing * 50.0F * pMaxAnimationSpeed); | ||
float f = Math.min(pLimbSwingAmount * pAnimationScaleFactor, 1.0F); | ||
animate(model, pAnimationDefinition, i, f, ANIMATION_VECTOR_CACHE); | ||
} | ||
|
||
public static <M extends EntityModel<?> & RootModel> void animate(M model, AnimationState pAnimationState, AnimationDefinition pAnimationDefinition, float pAgeInTicks, float pSpeed) { | ||
pAnimationState.updateTime(pAgeInTicks, pSpeed); | ||
pAnimationState.ifStarted((p_233392_) -> { | ||
animate(model, pAnimationDefinition, p_233392_.getAccumulatedTime(), 1.0F, ANIMATION_VECTOR_CACHE); | ||
}); | ||
} | ||
|
||
public static <M extends EntityModel<?> & RootModel> void animate(M model, AnimationDefinition pAnimationDefinition, long pAccumulatedTime, float pScale, Vector3f pAnimationVecCache) { | ||
float f = getElapsedSeconds(pAnimationDefinition, pAccumulatedTime); | ||
|
||
for(Map.Entry<String, List<AnimationChannel>> entry : pAnimationDefinition.boneAnimations().entrySet()) { | ||
Optional<ModelPart> optional = getAnyDescendantWithName(model, entry.getKey()); | ||
List<AnimationChannel> list = entry.getValue(); | ||
optional.ifPresent((p_232330_) -> { | ||
list.forEach((p_288241_) -> { | ||
Keyframe[] akeyframe = p_288241_.keyframes(); | ||
int i = Math.max(0, Mth.binarySearch(0, akeyframe.length, (p_232315_) -> f <= akeyframe[p_232315_].timestamp()) - 1); | ||
int j = Math.min(akeyframe.length - 1, i + 1); | ||
Keyframe keyframe = akeyframe[i]; | ||
Keyframe keyframe1 = akeyframe[j]; | ||
float f1 = f - keyframe.timestamp(); | ||
float f2; | ||
if (j != i) { | ||
f2 = Mth.clamp(f1 / (keyframe1.timestamp() - keyframe.timestamp()), 0.0F, 1.0F); | ||
} else { | ||
f2 = 0.0F; | ||
} | ||
|
||
keyframe1.interpolation().apply(pAnimationVecCache, f2, akeyframe, i, j, pScale); | ||
p_288241_.target().apply(p_232330_, pAnimationVecCache); | ||
}); | ||
}); | ||
} | ||
|
||
} | ||
|
||
private static <M extends EntityModel<?> & RootModel> Optional<ModelPart> getAnyDescendantWithName(M model, String pName) { | ||
return pName.equals("root") ? Optional.of(model.root()) : model.root().getAllParts().filter((p_233400_) -> { | ||
return p_233400_.hasChild(pName); | ||
}).findFirst().map((p_233397_) -> { | ||
return p_233397_.getChild(pName); | ||
}); | ||
} | ||
|
||
private static float getElapsedSeconds(AnimationDefinition pAnimationDefinition, long pAccumulatedTime) { | ||
float f = (float)pAccumulatedTime / 1000.0F; | ||
return pAnimationDefinition.looping() ? f % pAnimationDefinition.lengthInSeconds() : f; | ||
} | ||
} |
76 changes: 76 additions & 0 deletions
76
src/main/java/com/uraneptus/sullysmod/client/animations/BoulderingZombieAnimation.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
package com.uraneptus.sullysmod.client.animations; | ||
|
||
import net.minecraft.client.animation.AnimationChannel; | ||
import net.minecraft.client.animation.AnimationDefinition; | ||
import net.minecraft.client.animation.Keyframe; | ||
import net.minecraft.client.animation.KeyframeAnimations; | ||
|
||
public class BoulderingZombieAnimation { | ||
|
||
public static final AnimationDefinition CLIMB = AnimationDefinition.Builder.withLength(1.0F).looping() | ||
.addAnimation("right_arm", new AnimationChannel(AnimationChannel.Targets.ROTATION, | ||
new Keyframe(0.0F, KeyframeAnimations.degreeVec(-22.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.25F, KeyframeAnimations.degreeVec(-161.414F, 7.5208F, -21.2677F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.5F, KeyframeAnimations.degreeVec(-129.457F, 3.7604F, -10.6338F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.75F, KeyframeAnimations.degreeVec(-60.9785F, -1.8802F, 5.3169F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(1.0F, KeyframeAnimations.degreeVec(-22.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) | ||
)) | ||
.addAnimation("right_arm", new AnimationChannel(AnimationChannel.Targets.POSITION, | ||
new Keyframe(0.5F, KeyframeAnimations.posVec(0.0F, -1.0F, 1.0F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.7083F, KeyframeAnimations.posVec(0.0F, 1.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(1.0F, KeyframeAnimations.posVec(0.0F, -1.0F, 1.0F), AnimationChannel.Interpolations.LINEAR) | ||
)) | ||
.addAnimation("left_arm", new AnimationChannel(AnimationChannel.Targets.ROTATION, | ||
new Keyframe(0.0F, KeyframeAnimations.degreeVec(-129.457F, -3.7604F, 10.6338F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.25F, KeyframeAnimations.degreeVec(-60.9785F, -1.8802F, 5.3169F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.5F, KeyframeAnimations.degreeVec(-22.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.75F, KeyframeAnimations.degreeVec(-161.414F, -7.5208F, 21.2677F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(1.0F, KeyframeAnimations.degreeVec(-129.457F, -3.7604F, 10.6338F), AnimationChannel.Interpolations.LINEAR) | ||
)) | ||
.addAnimation("left_arm", new AnimationChannel(AnimationChannel.Targets.POSITION, | ||
new Keyframe(0.0F, KeyframeAnimations.posVec(0.0F, -1.0F, 1.0F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.2083F, KeyframeAnimations.posVec(0.0F, 1.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.5F, KeyframeAnimations.posVec(0.0F, -1.0F, 1.0F), AnimationChannel.Interpolations.LINEAR) | ||
)) | ||
.addAnimation("right_leg", new AnimationChannel(AnimationChannel.Targets.ROTATION, | ||
new Keyframe(0.0F, KeyframeAnimations.degreeVec(-15.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.1667F, KeyframeAnimations.degreeVec(14.8774F, -1.936F, 7.2472F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.3333F, KeyframeAnimations.degreeVec(-15.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.5F, KeyframeAnimations.degreeVec(14.8774F, -1.936F, 7.2472F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.6667F, KeyframeAnimations.degreeVec(-15.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.8333F, KeyframeAnimations.degreeVec(14.8774F, -1.936F, 7.2472F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(1.0F, KeyframeAnimations.degreeVec(-15.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) | ||
)) | ||
.addAnimation("right_leg", new AnimationChannel(AnimationChannel.Targets.POSITION, | ||
new Keyframe(0.0F, KeyframeAnimations.posVec(0.0F, 1.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.1667F, KeyframeAnimations.posVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.3333F, KeyframeAnimations.posVec(0.0F, 1.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.5F, KeyframeAnimations.posVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.6667F, KeyframeAnimations.posVec(0.0F, 1.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.8333F, KeyframeAnimations.posVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(1.0F, KeyframeAnimations.posVec(0.0F, 1.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) | ||
)) | ||
.addAnimation("left_leg", new AnimationChannel(AnimationChannel.Targets.ROTATION, | ||
new Keyframe(0.0F, KeyframeAnimations.degreeVec(14.8774F, 1.936F, -7.2472F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.1667F, KeyframeAnimations.degreeVec(-15.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.3333F, KeyframeAnimations.degreeVec(14.8774F, 1.936F, -7.2472F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.5F, KeyframeAnimations.degreeVec(-15.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.6667F, KeyframeAnimations.degreeVec(14.8774F, 1.936F, -7.2472F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.8333F, KeyframeAnimations.degreeVec(-15.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(1.0F, KeyframeAnimations.degreeVec(14.8774F, 1.936F, -7.2472F), AnimationChannel.Interpolations.LINEAR) | ||
)) | ||
.addAnimation("left_leg", new AnimationChannel(AnimationChannel.Targets.POSITION, | ||
new Keyframe(0.0F, KeyframeAnimations.posVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.1667F, KeyframeAnimations.posVec(0.0F, 1.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.3333F, KeyframeAnimations.posVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.5F, KeyframeAnimations.posVec(0.0F, 1.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.6667F, KeyframeAnimations.posVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.8333F, KeyframeAnimations.posVec(0.0F, 1.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(1.0F, KeyframeAnimations.posVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) | ||
)) | ||
.addAnimation("body", new AnimationChannel(AnimationChannel.Targets.ROTATION, | ||
new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, -5.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.5F, KeyframeAnimations.degreeVec(0.0F, 5.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(1.0F, KeyframeAnimations.degreeVec(0.0F, -5.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) | ||
)).build(); | ||
} |
101 changes: 101 additions & 0 deletions
101
src/main/java/com/uraneptus/sullysmod/client/animations/PiranhaAnimation.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
package com.uraneptus.sullysmod.client.animations; | ||
|
||
import net.minecraft.client.animation.AnimationChannel; | ||
import net.minecraft.client.animation.AnimationDefinition; | ||
import net.minecraft.client.animation.Keyframe; | ||
import net.minecraft.client.animation.KeyframeAnimations; | ||
|
||
public class PiranhaAnimation { | ||
public static final AnimationDefinition SWIM = AnimationDefinition.Builder.withLength(0.5F).looping() | ||
.addAnimation("body", new AnimationChannel(AnimationChannel.Targets.ROTATION, | ||
new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, -15.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), | ||
new Keyframe(0.25F, KeyframeAnimations.degreeVec(0.0F, 15.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), | ||
new Keyframe(0.5F, KeyframeAnimations.degreeVec(0.0F, -15.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM) | ||
)) | ||
.addAnimation("head", new AnimationChannel(AnimationChannel.Targets.ROTATION, | ||
new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 15.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), | ||
new Keyframe(0.25F, KeyframeAnimations.degreeVec(0.0F, -15.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), | ||
new Keyframe(0.5F, KeyframeAnimations.degreeVec(0.0F, 15.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM) | ||
)) | ||
.addAnimation("head", new AnimationChannel(AnimationChannel.Targets.POSITION, | ||
new Keyframe(0.0F, KeyframeAnimations.posVec(-0.1F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), | ||
new Keyframe(0.25F, KeyframeAnimations.posVec(0.1F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), | ||
new Keyframe(0.5F, KeyframeAnimations.posVec(-0.1F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM) | ||
)) | ||
.addAnimation("tail_fin", new AnimationChannel(AnimationChannel.Targets.ROTATION, | ||
new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, -10.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), | ||
new Keyframe(0.25F, KeyframeAnimations.degreeVec(0.0F, 10.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), | ||
new Keyframe(0.5F, KeyframeAnimations.degreeVec(0.0F, -10.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM) | ||
)) | ||
.build(); | ||
|
||
public static final AnimationDefinition SWIM_ANGRY = AnimationDefinition.Builder.withLength(0.4167F).looping() | ||
.addAnimation("body", new AnimationChannel(AnimationChannel.Targets.ROTATION, | ||
new Keyframe(0.0F, KeyframeAnimations.degreeVec(7.5F, -15.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), | ||
new Keyframe(0.2083F, KeyframeAnimations.degreeVec(7.5F, 15.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), | ||
new Keyframe(0.4167F, KeyframeAnimations.degreeVec(7.5F, -15.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM) | ||
)) | ||
.addAnimation("head", new AnimationChannel(AnimationChannel.Targets.ROTATION, | ||
new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 15.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), | ||
new Keyframe(0.2083F, KeyframeAnimations.degreeVec(0.0F, -15.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), | ||
new Keyframe(0.4167F, KeyframeAnimations.degreeVec(0.0F, 15.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM) | ||
)) | ||
.addAnimation("head", new AnimationChannel(AnimationChannel.Targets.POSITION, | ||
new Keyframe(0.0F, KeyframeAnimations.posVec(-0.1F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), | ||
new Keyframe(0.2083F, KeyframeAnimations.posVec(0.1F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), | ||
new Keyframe(0.4167F, KeyframeAnimations.posVec(-0.1F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM) | ||
)) | ||
.addAnimation("tail_fin", new AnimationChannel(AnimationChannel.Targets.ROTATION, | ||
new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, -15.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), | ||
new Keyframe(0.2083F, KeyframeAnimations.degreeVec(0.0F, 15.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), | ||
new Keyframe(0.4167F, KeyframeAnimations.degreeVec(0.0F, -15.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM) | ||
)) | ||
.addAnimation("mouth", new AnimationChannel(AnimationChannel.Targets.ROTATION, | ||
new Keyframe(0.0F, KeyframeAnimations.degreeVec(25.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), | ||
new Keyframe(0.0833F, KeyframeAnimations.degreeVec(-2.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.2083F, KeyframeAnimations.degreeVec(25.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), | ||
new Keyframe(0.2917F, KeyframeAnimations.degreeVec(-2.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.4167F, KeyframeAnimations.degreeVec(25.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM) | ||
)) | ||
.addAnimation("left_fin", new AnimationChannel(AnimationChannel.Targets.ROTATION, | ||
new Keyframe(0.0F, KeyframeAnimations.degreeVec(40.3502F, -24.7428F, -8.3419F), AnimationChannel.Interpolations.LINEAR) | ||
)) | ||
.addAnimation("right_fin", new AnimationChannel(AnimationChannel.Targets.ROTATION, | ||
new Keyframe(0.0F, KeyframeAnimations.degreeVec(40.3502F, 24.7428F, 8.3419F), AnimationChannel.Interpolations.LINEAR) | ||
)) | ||
.build(); | ||
|
||
public static final AnimationDefinition IN_AIR = AnimationDefinition.Builder.withLength(0.25F).looping() | ||
.addAnimation("body", new AnimationChannel(AnimationChannel.Targets.ROTATION, | ||
new Keyframe(0.0F, KeyframeAnimations.degreeVec(-7.5F, -15.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), | ||
new Keyframe(0.125F, KeyframeAnimations.degreeVec(-7.5F, 15.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), | ||
new Keyframe(0.25F, KeyframeAnimations.degreeVec(-7.5F, -15.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM) | ||
)) | ||
.addAnimation("head", new AnimationChannel(AnimationChannel.Targets.ROTATION, | ||
new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 15.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), | ||
new Keyframe(0.125F, KeyframeAnimations.degreeVec(0.0F, -15.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), | ||
new Keyframe(0.25F, KeyframeAnimations.degreeVec(0.0F, 15.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM) | ||
)) | ||
.addAnimation("head", new AnimationChannel(AnimationChannel.Targets.POSITION, | ||
new Keyframe(0.0F, KeyframeAnimations.posVec(-0.1F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), | ||
new Keyframe(0.125F, KeyframeAnimations.posVec(0.1F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), | ||
new Keyframe(0.25F, KeyframeAnimations.posVec(-0.1F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM) | ||
)) | ||
.addAnimation("tail_fin", new AnimationChannel(AnimationChannel.Targets.ROTATION, | ||
new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, -15.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), | ||
new Keyframe(0.125F, KeyframeAnimations.degreeVec(0.0F, 15.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), | ||
new Keyframe(0.25F, KeyframeAnimations.degreeVec(0.0F, -15.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM) | ||
)) | ||
.addAnimation("mouth", new AnimationChannel(AnimationChannel.Targets.ROTATION, | ||
new Keyframe(0.0F, KeyframeAnimations.degreeVec(25.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), | ||
new Keyframe(0.125F, KeyframeAnimations.degreeVec(-2.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), | ||
new Keyframe(0.25F, KeyframeAnimations.degreeVec(25.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM) | ||
)) | ||
.addAnimation("left_fin", new AnimationChannel(AnimationChannel.Targets.ROTATION, | ||
new Keyframe(0.0F, KeyframeAnimations.degreeVec(28.9639F, -37.7133F, 13.2914F), AnimationChannel.Interpolations.LINEAR) | ||
)) | ||
.addAnimation("right_fin", new AnimationChannel(AnimationChannel.Targets.ROTATION, | ||
new Keyframe(0.0F, KeyframeAnimations.degreeVec(28.9639F, 37.7133F, -13.2914F), AnimationChannel.Interpolations.LINEAR) | ||
)) | ||
.build(); | ||
} |
Oops, something went wrong.