mirror of
https://github.com/Creators-of-Create/Create.git
synced 2025-03-04 06:44:40 +01:00
Method actor
- DrillsActorVisuals no longer use RotatingInstance - Instead manually animate by updating rotation in #tick and interpolating
This commit is contained in:
parent
b073ada21c
commit
484de7cc03
1 changed files with 34 additions and 28 deletions
|
@ -8,7 +8,10 @@ import com.simibubi.create.foundation.render.AllInstanceTypes;
|
|||
import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld;
|
||||
|
||||
import dev.engine_room.flywheel.api.visualization.VisualizationContext;
|
||||
import dev.engine_room.flywheel.lib.instance.InstanceTypes;
|
||||
import dev.engine_room.flywheel.lib.instance.TransformedInstance;
|
||||
import dev.engine_room.flywheel.lib.model.Models;
|
||||
import net.createmod.catnip.animation.AnimationTickHolder;
|
||||
import net.createmod.catnip.math.VecHelper;
|
||||
import net.createmod.catnip.math.AngleHelper;
|
||||
import net.minecraft.core.Direction;
|
||||
|
@ -17,9 +20,12 @@ import net.minecraft.world.level.block.state.BlockState;
|
|||
|
||||
public class DrillActorVisual extends ActorVisual {
|
||||
|
||||
RotatingInstance drillHead;
|
||||
TransformedInstance drillHead;
|
||||
private final Direction facing;
|
||||
|
||||
private double rotation;
|
||||
private double previousRotation;
|
||||
|
||||
public DrillActorVisual(VisualizationContext visualizationContext, VirtualRenderWorld contraption, MovementContext context) {
|
||||
super(visualizationContext, contraption, context);
|
||||
|
||||
|
@ -27,39 +33,39 @@ public class DrillActorVisual extends ActorVisual {
|
|||
|
||||
facing = state.getValue(DrillBlock.FACING);
|
||||
|
||||
Direction.Axis axis = facing.getAxis();
|
||||
float eulerX = AngleHelper.verticalAngle(facing);
|
||||
|
||||
float eulerY;
|
||||
if (axis == Direction.Axis.Y)
|
||||
eulerY = 0;
|
||||
else
|
||||
eulerY = facing.toYRot() + ((axis == Direction.Axis.X) ? 180 : 0);
|
||||
|
||||
drillHead = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.DRILL_HEAD))
|
||||
drillHead = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.DRILL_HEAD))
|
||||
.createInstance();
|
||||
}
|
||||
|
||||
drillHead.rotation.rotationXYZ(eulerX * Mth.DEG_TO_RAD, eulerY * Mth.DEG_TO_RAD, 0);
|
||||
@Override
|
||||
public void tick() {
|
||||
previousRotation = rotation;
|
||||
|
||||
drillHead.setPosition(context.localPos)
|
||||
.setRotationOffset(0)
|
||||
.setRotationAxis(0, 0, 1)
|
||||
.setRotationalSpeed(getSpeed(facing))
|
||||
.light(localBlockLight(), 0)
|
||||
if (context.contraption.stalled || context.disabled
|
||||
|| VecHelper.isVecPointingTowards(context.relativeMotion, facing.getOpposite()))
|
||||
return;
|
||||
|
||||
float deg = context.getAnimationSpeed();
|
||||
|
||||
rotation += deg / 20;
|
||||
|
||||
rotation %= 360;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beginFrame() {
|
||||
drillHead.setIdentityTransform()
|
||||
.translate(context.localPos)
|
||||
.center()
|
||||
.rotateToFace(facing.getOpposite())
|
||||
.rotateZDegrees((float) getRotation())
|
||||
.uncenter()
|
||||
.setChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beginFrame() {
|
||||
drillHead.setRotationalSpeed(getSpeed(facing))
|
||||
.setChanged();
|
||||
}
|
||||
|
||||
protected float getSpeed(Direction facing) {
|
||||
if (context.contraption.stalled || !VecHelper.isVecPointingTowards(context.relativeMotion, facing.getOpposite()))
|
||||
return context.getAnimationSpeed();
|
||||
return 0;
|
||||
}
|
||||
protected double getRotation() {
|
||||
return AngleHelper.angleLerp(AnimationTickHolder.getPartialTicks(), previousRotation, rotation);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void _delete() {
|
||||
|
|
Loading…
Add table
Reference in a new issue