Skip to content

Commit a150f60

Browse files
committed
Fixed PEI rendering
1 parent 9654c70 commit a150f60

File tree

5 files changed

+227
-206
lines changed

5 files changed

+227
-206
lines changed

src/main/java/com/mrh0/createaddition/blocks/portable_energy_interface/PEIActorVisual.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@
1010

1111
public class PEIActorVisual extends ActorVisual {
1212

13-
private final PortableEnergyInterfaceVisual.PIInstance instance;
13+
private final PEIInstance instance;
1414

1515
public PEIActorVisual(VisualizationContext context, VirtualRenderWorld world, MovementContext movementContext) {
1616
super(context, world, movementContext);
1717

18-
instance = new PortableEnergyInterfaceVisual.PIInstance(context.instancerProvider(), movementContext.state, movementContext.localPos, false);
18+
instance = new PEIInstance(context.instancerProvider(), movementContext.state, movementContext.localPos, false);
1919

2020
instance.middle.light(localBlockLight(), 0);
2121
instance.top.light(localBlockLight(), 0);
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package com.mrh0.createaddition.blocks.portable_energy_interface;
2+
3+
import java.util.function.Consumer;
4+
5+
import dev.engine_room.flywheel.api.instance.Instance;
6+
import dev.engine_room.flywheel.api.instance.InstancerProvider;
7+
import dev.engine_room.flywheel.lib.instance.InstanceTypes;
8+
import dev.engine_room.flywheel.lib.instance.TransformedInstance;
9+
import dev.engine_room.flywheel.lib.model.Models;
10+
import net.createmod.catnip.math.AngleHelper;
11+
import net.minecraft.core.BlockPos;
12+
import net.minecraft.core.Direction;
13+
import net.minecraft.world.level.block.state.BlockState;
14+
15+
public class PEIInstance {
16+
private final InstancerProvider instancerProvider;
17+
private final BlockState blockState;
18+
private final BlockPos instancePos;
19+
private final float angleX;
20+
private final float angleY;
21+
22+
private boolean lit;
23+
TransformedInstance middle;
24+
TransformedInstance top;
25+
26+
public PEIInstance(InstancerProvider instancerProvider, BlockState blockState, BlockPos instancePos, boolean lit) {
27+
this.instancerProvider = instancerProvider;
28+
this.blockState = blockState;
29+
this.instancePos = instancePos;
30+
Direction facing = blockState.getValue(PortableEnergyInterfaceBlock.FACING);
31+
angleX = facing == Direction.UP ? 0 : facing == Direction.DOWN ? 180 : 90;
32+
angleY = AngleHelper.horizontalAngle(facing);
33+
this.lit = lit;
34+
35+
middle = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(PortableEnergyInterfaceRenderer.getMiddleForState(blockState, lit)))
36+
.createInstance();
37+
top = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(PortableEnergyInterfaceRenderer.getTopForState(blockState)))
38+
.createInstance();
39+
}
40+
41+
public void beginFrame(float progress) {
42+
middle.setIdentityTransform()
43+
.translate(instancePos)
44+
.center()
45+
.rotateYDegrees(angleY)
46+
.rotateXDegrees(angleX)
47+
.uncenter();
48+
49+
top.setIdentityTransform()
50+
.translate(instancePos)
51+
.center()
52+
.rotateYDegrees(angleY)
53+
.rotateXDegrees(angleX)
54+
.uncenter();
55+
56+
middle.translate(0, progress * 0.5f + 0.375f, 0);
57+
top.translate(0, progress, 0);
58+
59+
middle.setChanged();
60+
top.setChanged();
61+
}
62+
63+
public void tick(boolean lit) {
64+
if (this.lit != lit) {
65+
this.lit = lit;
66+
instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(PortableEnergyInterfaceRenderer.getMiddleForState(blockState, lit)))
67+
.stealInstance(middle);
68+
}
69+
}
70+
71+
public void remove() {
72+
middle.delete();
73+
top.delete();
74+
}
75+
76+
public void collectCrumblingInstances(Consumer<Instance> consumer) {
77+
consumer.accept(middle);
78+
consumer.accept(top);
79+
}
80+
}
Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
package com.mrh0.createaddition.blocks.portable_energy_interface;
2+
3+
import dev.engine_room.flywheel.api.instance.Instance;
4+
import dev.engine_room.flywheel.api.visual.DynamicVisual;
5+
import dev.engine_room.flywheel.api.visual.TickableVisual;
6+
import dev.engine_room.flywheel.api.visualization.VisualizationContext;
7+
import dev.engine_room.flywheel.lib.visual.AbstractBlockEntityVisual;
8+
import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual;
9+
import dev.engine_room.flywheel.lib.visual.SimpleTickableVisual;
10+
11+
import java.util.function.Consumer;
12+
13+
public class PEIVisual extends AbstractBlockEntityVisual<PortableEnergyInterfaceBlockEntity> implements SimpleDynamicVisual, SimpleTickableVisual {
14+
15+
private final PEIInstance instance;
16+
17+
public PEIVisual(VisualizationContext visualizationContext, PortableEnergyInterfaceBlockEntity blockEntity, float partialTick) {
18+
super(visualizationContext, blockEntity, partialTick);
19+
20+
instance = new PEIInstance(visualizationContext.instancerProvider(), blockState, getVisualPosition(), isLit());
21+
instance.beginFrame(blockEntity.getExtensionDistance(partialTick));
22+
}
23+
24+
@Override
25+
public void tick(TickableVisual.Context ctx) {
26+
instance.tick(isLit());
27+
}
28+
29+
@Override
30+
public void beginFrame(DynamicVisual.Context ctx) {
31+
instance.beginFrame(blockEntity.getExtensionDistance(ctx.partialTick()));
32+
}
33+
34+
@Override
35+
public void updateLight(float partialTick) {
36+
relight(instance.middle, instance.top);
37+
}
38+
39+
@Override
40+
protected void _delete() {
41+
instance.remove();
42+
}
43+
44+
private boolean isLit() {
45+
return blockEntity.isConnected();
46+
}
47+
48+
@Override
49+
public void collectCrumblingInstances(Consumer<Instance> consumer) {
50+
instance.collectCrumblingInstances(consumer);
51+
}
52+
/*
53+
private final PIInstance instance;
54+
55+
public PortableEnergyInterfaceVisual(VisualizationContext visualizationContext, PortableEnergyInterfaceBlockEntity blockEntity, float partialTick) {
56+
super(visualizationContext, blockEntity, partialTick);
57+
58+
instance = new PIInstance(context.instancerProvider(), movementContext.state, movementContext.localPos, false);
59+
60+
instance.middle.light(localBlockLight(), 0);
61+
instance.top.light(localBlockLight(), 0);
62+
}
63+
64+
@Override
65+
public void beginFrame() {
66+
LerpedFloat lf = PortableEnergyInterfaceMovement.getAnimation(context);
67+
instance.tick(lf.settled());
68+
instance.beginFrame(lf.getValue(AnimationTickHolder.getPartialTicks()));
69+
}
70+
71+
@Override
72+
protected void _delete() {
73+
instance.remove();
74+
}
75+
76+
public static class PIInstance {
77+
private final InstancerProvider instancerProvider;
78+
private final BlockState blockState;
79+
private final BlockPos instancePos;
80+
private final float angleX;
81+
private final float angleY;
82+
83+
private boolean lit;
84+
TransformedInstance middle;
85+
TransformedInstance top;
86+
87+
public PIInstance(InstancerProvider instancerProvider, BlockState blockState, BlockPos instancePos, boolean lit) {
88+
this.instancerProvider = instancerProvider;
89+
this.blockState = blockState;
90+
this.instancePos = instancePos;
91+
Direction facing = blockState.getValue(PortableEnergyInterfaceBlock.FACING);
92+
angleX = facing == Direction.UP ? 0 : facing == Direction.DOWN ? 180 : 90;
93+
angleY = AngleHelper.horizontalAngle(facing);
94+
this.lit = lit;
95+
96+
middle = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(PortableEnergyInterfaceRenderer.getMiddleForState(blockState, lit)))
97+
.createInstance();
98+
top = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(PortableEnergyInterfaceRenderer.getTopForState(blockState)))
99+
.createInstance();
100+
}
101+
102+
public void beginFrame(float progress) {
103+
middle.setIdentityTransform()
104+
.translate(instancePos)
105+
.center()
106+
.rotateYDegrees(angleY)
107+
.rotateXDegrees(angleX)
108+
.uncenter();
109+
110+
top.setIdentityTransform()
111+
.translate(instancePos)
112+
.center()
113+
.rotateYDegrees(angleY)
114+
.rotateXDegrees(angleX)
115+
.uncenter();
116+
117+
middle.translate(0, progress * 0.5f + 0.375f, 0);
118+
top.translate(0, progress, 0);
119+
120+
middle.setChanged();
121+
top.setChanged();
122+
}
123+
124+
public void tick(boolean lit) {
125+
if (this.lit != lit) {
126+
this.lit = lit;
127+
instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(PortableEnergyInterfaceRenderer.getMiddleForState(blockState, lit)))
128+
.stealInstance(middle);
129+
}
130+
}
131+
132+
public void remove() {
133+
middle.delete();
134+
top.delete();
135+
}
136+
137+
public void collectCrumblingInstances(Consumer<Instance> consumer) {
138+
consumer.accept(middle);
139+
consumer.accept(top);
140+
}
141+
}
142+
*/
143+
}

0 commit comments

Comments
 (0)