Skip to content

Commit 72786a0

Browse files
committed
Animations work properly. Currently hardcoded transition curves instant. Will renable later once needed for blended animation attempts.
1 parent 73f6cc9 commit 72786a0

File tree

11 files changed

+53
-46
lines changed

11 files changed

+53
-46
lines changed

common/src/main/java/generations/gg/generations/core/generationscore/common/client/model/GenerationsClientMolangFunctions.kt

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package generations.gg.generations.core.generationscore.common.client.model
22

33
import com.bedrockk.molang.runtime.MoParams
4+
import com.bedrockk.molang.runtime.value.MoValue
45
import com.cobblemon.mod.common.api.molang.ObjectValue
56
import com.cobblemon.mod.common.client.ClientMoLangFunctions
7+
import com.cobblemon.mod.common.client.render.models.blockbench.ExcludedLabels
68
import com.cobblemon.mod.common.client.render.models.blockbench.PosableModel
79
import com.cobblemon.mod.common.client.render.models.blockbench.animation.PrimaryAnimation
810
import com.cobblemon.mod.common.client.render.models.blockbench.wavefunction.WaveFunction
@@ -37,17 +39,27 @@ object GenerationsClientMolangFunctions {
3739
val anim = pkStateful(group, animation)
3840

3941
val excludedLabels = mutableSetOf<String>()
40-
val curve: WaveFunction = { t ->
42+
var curve: WaveFunction = /*{ t ->
4143
if (t < 0.1) {
4244
t * 10
4345
} else if (t < 0.9) {
4446
1F
4547
} else {
4648
1F
4749
}
48-
}
49-
50+
}*/ { 1f } //TODO: revert once we get around to adding proper curve input to the resource packs.
5051
for (index in 2 until params.params.size) {
52+
val param = params.get<MoValue>(index)
53+
if (param is ObjectValue<*>) {
54+
val obj = param.obj
55+
if (obj is ExcludedLabels) {
56+
excludedLabels.addAll(obj.labels)
57+
} else {
58+
curve = param.obj as WaveFunction
59+
}
60+
continue
61+
}
62+
5163
val label = params.getString(index) ?: continue
5264
excludedLabels.add(label)
5365
}

common/src/main/java/generations/gg/generations/core/generationscore/common/client/model/RareCandyActiveAnimation.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ data class RareCandyActiveAnimation(private val animation: RareCandyAnimation):
1111
override var enduresPrimaryAnimations: Boolean = true
1212

1313
override val duration: Float
14-
get() = animation.animation?.animationDuration?.toFloat() ?: 0F
14+
get() = animation.animation?.animationDuration?.toFloat() ?: -0F
1515

1616
private var afterAction: (RenderContext, PosableState) -> Unit = { _, _ -> }
1717

@@ -37,7 +37,7 @@ data class RareCandyActiveAnimation(private val animation: RareCandyAnimation):
3737
headPitch: Float,
3838
intensity: Float
3939
): Boolean {
40-
return animation.run(context, state.animationSeconds - startedSeconds, false).also {
40+
return animation.run(context, state.animationSeconds - startedSeconds, intensity).also {
4141
if (!it) {
4242
afterAction(context, state)
4343
}

common/src/main/java/generations/gg/generations/core/generationscore/common/client/model/RareCandyAnimation.kt

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package generations.gg.generations.core.generationscore.common.client.model
33
import com.cobblemon.mod.common.client.render.models.blockbench.repository.RenderContext
44
import generations.gg.generations.core.generationscore.common.client.render.CobblemonInstanceProvider
55
import generations.gg.generations.core.generationscore.common.client.render.rarecandy.ModelRegistry
6-
import generations.gg.generations.core.generationscore.common.client.render.rarecandy.Pipelines
76
import gg.generations.rarecandy.renderer.animation.Animation
87
import gg.generations.rarecandy.renderer.components.AnimatedMeshObject
98
import net.minecraft.resources.ResourceLocation
@@ -23,14 +22,19 @@ data class RareCandyAnimation(private val model: ResourceLocation, private val n
2322
fun run(
2423
context: RenderContext,
2524
animationSeconds: Float,
26-
shouldLoop: Boolean
25+
intensity: Float
2726
): Boolean {
28-
val instance = context.request(Pipelines.INSTANCE) ?: context.request(RenderContext.ENTITY)?.takeIf { it is CobblemonInstanceProvider }?.let { it as CobblemonInstanceProvider }?.instance ?: return false
29-
val anim = animation ?: return false
27+
val instance = context.request(RenderContext.POSABLE_STATE)?.takeIf { it is CobblemonInstanceProvider }?.let { it as CobblemonInstanceProvider }?.instance ?: return false
28+
29+
val anim = animation ?: let {
30+
System.out.println("Warning! Animation $name is current not loaded or null")
31+
return false
32+
}
33+
34+
val duration = anim.animationDuration.div(anim.ticksPerSecond).toFloat()
3035

31-
val duration = anim.animationDuration.toFloat()
3236
var currentSeconds = animationSeconds
33-
if (shouldLoop) {
37+
if (anim.loops) {
3438
currentSeconds %= duration
3539
} else if (animationSeconds > duration && duration > 0) {
3640
return false

common/src/main/java/generations/gg/generations/core/generationscore/common/client/model/RareCandyBone.kt

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -66,17 +66,16 @@ class RareCandyBone /*Remove when cobblemon doesn't have parts of code that assu
6666
packedOverlay: Int,
6767
color: Int
6868
) {
69-
val model = objectSupplier.invoke()
70-
if (model?.renderObject == null) return
7169

72-
var instance = context.request(Pipelines.INSTANCE)
73-
if (instance == null) {
74-
val entity = context.request(RenderContext.Companion.POSABLE_STATE)
75-
if (entity is CobblemonInstanceProvider) {
76-
instance = entity.instance
77-
}
70+
val instance = context.request(RenderContext.Companion.POSABLE_STATE).instanceOrNull<CobblemonInstanceProvider>()?.instance
71+
72+
if(instance != null) {
73+
let { }
7874
}
7975

76+
val model = objectSupplier.invoke()
77+
if (model?.renderObject == null) return
78+
8079
var scale = model.renderObject!!.scale // / context.requires(RenderContext.SCALE)
8180
if (instance == null) {
8281
return
@@ -118,7 +117,7 @@ class RareCandyBone /*Remove when cobblemon doesn't have parts of code that assu
118117
override fun get(): Bone = this
119118

120119
companion object {
121-
val CUBE_LIST = listOf(Cube(0, 0, 0f, 0f, 0f, 1f, 1f, 1f, 0f, 0f, 0f, false, 1.0f, 1.0f, java.util.Set.of(Direction.NORTH))) //TODO: Remove when assumpt of Bone is always ModelPart is gone.
120+
val CUBE_LIST = listOf(Cube(0, 0, 0f, 0f, 0f, 1f, 1f, 1f, 0f, 0f, 0f, false, 1.0f, 1.0f, java.util.Set.of(Direction.NORTH))) //TODO: Remove when assumpt of Bone is always ModelPart is gone.
122121
private val BLANK_MAP = mapOf("root" to ModelPart(CUBE_LIST, mapOf()))
123122
private val temp = Vector3f()
124123
private val ROTATION_CORRECTION = Axis.YP.rotationDegrees(180f)

common/src/main/java/generations/gg/generations/core/generationscore/common/client/model/RareCandyPoseAnimation.kt

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,7 @@ import com.cobblemon.mod.common.client.render.models.blockbench.animation.PoseAn
66
import com.cobblemon.mod.common.client.render.models.blockbench.repository.RenderContext
77

88
class RareCandyPoseAnimation(private val animation: RareCandyAnimation) : PoseAnimation() {
9-
override fun setupAnim(
10-
context: RenderContext,
11-
model: PosableModel,
12-
state: PosableState,
13-
limbSwing: Float,
14-
limbSwingAmount: Float,
15-
ageInTicks: Float,
16-
headYaw: Float,
17-
headPitch: Float,
18-
intensity: Float,
19-
) {
20-
animation.run(context, state.animationSeconds, false)
9+
override fun setupAnim(context: RenderContext, model: PosableModel, state: PosableState, limbSwing: Float, limbSwingAmount: Float, ageInTicks: Float, headYaw: Float, headPitch: Float, intensity: Float, ) {
10+
animation.run(context, state.animationSeconds, intensity)
2111
}
2212
}

common/src/main/java/generations/gg/generations/core/generationscore/common/client/render/rarecandy/BlockObjectInstance.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ public class BlockObjectInstance extends ObjectInstance implements BlockLightVal
99
private int light = 0x000000;
1010
private Vector3f tint = null;
1111

12-
public BlockObjectInstance(Matrix4f transformationMatrix, Matrix4f viewMatrix, String variant) {
13-
super(transformationMatrix, viewMatrix, variant);
12+
public BlockObjectInstance(Matrix4f transformationMatrix, String variant) {
13+
super(transformationMatrix, variant);
1414
}
1515

1616

common/src/main/java/generations/gg/generations/core/generationscore/common/client/render/rarecandy/loading/VanilaRenderModel.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,17 +62,16 @@ public void render(VertexConsumer consumer, ObjectInstance instance, Transform t
6262

6363
if(tint == null) tint = WHITE;
6464
var modelMatrix = instance.transformationMatrix();
65-
var viewMatrix = instance.viewMatrix();
6665

6766
for (int i = 0; i < indexSize; i += 3) {
68-
addVertex(consumer, i, tint, light, modelMatrix, viewMatrix, transform, transforms);
69-
addVertex(consumer, i, tint, light, modelMatrix, viewMatrix, transform, transforms);
70-
addVertex(consumer, i + 1, tint, light, modelMatrix, viewMatrix, transform, transforms);
71-
addVertex(consumer, i + 2, tint, light, modelMatrix, viewMatrix, transform, transforms);
67+
addVertex(consumer, i, tint, light, modelMatrix, transform, transforms);
68+
addVertex(consumer, i, tint, light, modelMatrix, transform, transforms);
69+
addVertex(consumer, i + 1, tint, light, modelMatrix, transform, transforms);
70+
addVertex(consumer, i + 2, tint, light, modelMatrix, transform, transforms);
7271
}
7372
}
7473

75-
private void addVertex(VertexConsumer consumer, int i, Vector3f tint, int light, Matrix4f modelMatrix, Matrix4f viewMatrix, Transform transform, Matrix4f[] transforms) {
74+
private void addVertex(VertexConsumer consumer, int i, Vector3f tint, int light, Matrix4f modelMatrix, Transform transform, Matrix4f[] transforms) {
7675
var bufferIndex = indicies[i];
7776

7877
var posIndex = bufferIndex * 3;

common/src/main/java/generations/gg/generations/core/generationscore/common/client/render/rarecandy/loading/VanillaModelLoader.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ private static Map<String, Animation> processAnimations(AIScene scene, Skeleton
6767
var fps = animResource.fps();
6868
fps = config.animationFpsOverride != null && config.animationFpsOverride.containsKey(name) ? config.animationFpsOverride.get(name) : fps;
6969

70+
var loops = animResource.loops();
71+
loops = config.animationLoopsOverride != null && config.animationLoopsOverride.containsKey(name) ? config.animationLoopsOverride.get(name) : loops;
72+
7073
var offsets = animResource.getOffsets();
7174
offsets.forEach((trackName, offset) -> config.getMaterialsForAnimation(trackName).forEach(a -> offSetsToInsert.put(a, offset)));
7275
offsets.putAll(offSetsToInsert);
@@ -75,7 +78,7 @@ private static Map<String, Animation> processAnimations(AIScene scene, Skeleton
7578
var nodes = animResource.getNodes(skeleton);
7679
var ignoreScaling = config.ignoreScaleInAnimation != null && (config.ignoreScaleInAnimation.contains(name) || config.ignoreScaleInAnimation.contains("all"));
7780

78-
animations.put(name, new Animation(name, (int) fps, skeleton, nodes, offsets, ignoreScaling, config.offsets.getOrDefault(name, new SkeletalTransform()).scale(config.scale)));
81+
animations.put(name, new Animation(name, (int) fps, loops, skeleton, nodes, offsets, ignoreScaling, config.offsets.getOrDefault(name, new SkeletalTransform()).scale(config.scale)));
7982
});
8083

8184
return animations;
@@ -140,7 +143,7 @@ private static void extractAssimpAnimations(AIScene scene, Skeleton skeleton, Ma
140143
}
141144
}
142145

143-
animResources.putIfAbsent(animName, new GenericAnimResource((long) fps, animationNodes));
146+
animResources.putIfAbsent(animName, new GenericAnimResource((long) fps, false, animationNodes));
144147
}
145148
}
146149

common/src/main/java/generations/gg/generations/core/generationscore/common/world/entity/ZygardeCellEntity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import org.joml.Matrix4f
2323

2424
class ZygardeCellEntity : Entity {
2525
@JvmField
26-
var instance: BlockObjectInstance = BlockObjectInstance(Matrix4f(), Matrix4f(), null)
26+
var instance: BlockObjectInstance = BlockObjectInstance(Matrix4f(), null)
2727

2828
constructor(level: Level) : super(GenerationsEntities.ZYGARDE_CELL.get(), level)
2929

common/src/main/java/generations/gg/generations/core/generationscore/common/world/level/block/entities/ModelProvidingBlockEntity.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ abstract class ModelProvidingBlockEntity(
3939
override fun getVariant(): String? = blockState.block.instanceOrNull<VariantProvider>()?.variant
4040

4141
fun generateInstance(): ObjectInstance {
42-
return if (isAnimated) BlockAnimatedObjectInstance(Matrix4f(), Matrix4f(), null) else BlockObjectInstance(
43-
Matrix4f(), Matrix4f(), null
42+
return if (isAnimated) BlockAnimatedObjectInstance(Matrix4f(), null, null) else BlockObjectInstance(
43+
Matrix4f(), null
4444
)
4545
}
4646

0 commit comments

Comments
 (0)