From 286d2a68ab1a0127f15f6d7591d7976c86b5dff1 Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Sun, 25 Feb 2024 13:04:31 -0800 Subject: [PATCH] As shrimple as that - Update to SimpleDynamicVisuals - Translate old context stuff to new api - Add contraption visual, doesn't fully work yet - Strip out more FlwContraption stuff --- gradle.properties | 2 +- .../com/simibubi/create/AllEntityTypes.java | 16 +- .../com/simibubi/create/CreateClient.java | 2 + .../ControlledContraptionEntity.java | 12 +- .../harvester/HarvesterActorVisual.java | 12 +- .../actors/psi/PSIActorVisual.java | 9 + .../contraptions/actors/psi/PSIVisual.java | 6 +- .../actors/roller/RollerActorVisual.java | 6 + .../contraptions/bearing/BearingVisual.java | 4 +- .../bearing/StabilizedBearingVisual.java | 11 + .../contraptions/chassis/StickerVisual.java | 4 +- .../elevator/ElevatorPulleyVisual.java | 4 +- .../gantry/GantryCarriageVisual.java | 4 +- .../pulley/AbstractPulleyVisual.java | 4 +- .../contraptions/render/ActorVisual.java | 26 ++- .../render/ContraptionEntityRenderer.java | 9 +- .../render/ContraptionRenderDispatcher.java | 10 - .../render/ContraptionVisual.java | 220 ++++++++++++++++++ .../contraptions/render/FlwContraption.java | 7 +- .../equipment/toolbox/ToolBoxVisual.java | 4 +- .../fluids/pipes/valve/FluidValveVisual.java | 4 +- .../content/fluids/pump/PumpCogVisual.java | 4 +- .../kinetics/crank/HandCrankVisual.java | 4 +- .../deployer/DeployerActorVisual.java | 12 + .../kinetics/deployer/DeployerVisual.java | 6 +- .../kinetics/drill/DrillActorVisual.java | 10 + .../kinetics/flywheel/FlywheelVisual.java | 7 +- .../content/kinetics/gauge/GaugeVisual.java | 4 +- .../kinetics/mechanicalArm/ArmVisual.java | 4 +- .../content/kinetics/mixer/MixerVisual.java | 4 +- .../content/kinetics/press/PressVisual.java | 4 +- .../steamEngine/SteamEngineVisual.java | 4 +- .../logistics/depot/EjectorVisual.java | 4 +- .../logistics/funnel/FunnelVisual.java | 4 +- .../logistics/tunnel/BeltTunnelVisual.java | 4 +- .../analogLever/AnalogLeverVisual.java | 4 +- .../redstone/diodes/BrassDiodeVisual.java | 4 +- .../cannon/SchematicannonVisual.java | 4 +- .../entity/CarriageContraptionVisual.java | 7 +- .../foundation/events/ClientEvents.java | 4 +- .../foundation/render/AllContextShaders.java | 24 ++ .../foundation/render/CreateContexts.java | 13 -- .../create/flywheel/context/contraption.frag | 10 + .../create/flywheel/context/contraption.glsl | 77 ------ .../create/flywheel/context/contraption.vert | 16 ++ 45 files changed, 438 insertions(+), 176 deletions(-) create mode 100644 src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java create mode 100644 src/main/java/com/simibubi/create/foundation/render/AllContextShaders.java delete mode 100644 src/main/java/com/simibubi/create/foundation/render/CreateContexts.java create mode 100644 src/main/resources/assets/create/flywheel/context/contraption.frag delete mode 100644 src/main/resources/assets/create/flywheel/context/contraption.glsl create mode 100644 src/main/resources/assets/create/flywheel/context/contraption.vert diff --git a/gradle.properties b/gradle.properties index dd78f8660..cb20af218 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,7 +23,7 @@ use_parchment = true # dependency versions registrate_version = MC1.20-1.3.3 flywheel_minecraft_version = 1.20.1 -flywheel_version = 1.0.0-alpha-43 +flywheel_version = 1.0.0-alpha-53 jei_minecraft_version = 1.20.1 jei_version = 15.2.0.22 curios_minecraft_version = 1.20.1 diff --git a/src/main/java/com/simibubi/create/AllEntityTypes.java b/src/main/java/com/simibubi/create/AllEntityTypes.java index e8967cbef..cd66c0e72 100644 --- a/src/main/java/com/simibubi/create/AllEntityTypes.java +++ b/src/main/java/com/simibubi/create/AllEntityTypes.java @@ -8,6 +8,7 @@ import com.simibubi.create.content.contraptions.gantry.GantryContraptionEntity; import com.simibubi.create.content.contraptions.glue.SuperGlueEntity; import com.simibubi.create.content.contraptions.glue.SuperGlueRenderer; import com.simibubi.create.content.contraptions.render.ContraptionEntityRenderer; +import com.simibubi.create.content.contraptions.render.ContraptionVisual; import com.simibubi.create.content.contraptions.render.OrientedContraptionEntityRenderer; import com.simibubi.create.content.equipment.blueprint.BlueprintEntity; import com.simibubi.create.content.equipment.blueprint.BlueprintRenderer; @@ -33,15 +34,22 @@ import net.minecraft.world.entity.MobCategory; public class AllEntityTypes { public static final EntityEntry ORIENTED_CONTRAPTION = contraption("contraption", - OrientedContraptionEntity::new, () -> OrientedContraptionEntityRenderer::new, 5, 3, true).register(); + OrientedContraptionEntity::new, () -> OrientedContraptionEntityRenderer::new, 5, 3, true) + .instance(() -> ContraptionVisual::new) + .register(); public static final EntityEntry CONTROLLED_CONTRAPTION = contraption("stationary_contraption", ControlledContraptionEntity::new, () -> ContraptionEntityRenderer::new, - 20, 40, false).register(); + 20, 40, false) + .instance(() -> ContraptionVisual::new) + .register(); public static final EntityEntry GANTRY_CONTRAPTION = contraption("gantry_contraption", - GantryContraptionEntity::new, () -> ContraptionEntityRenderer::new, 10, 40, false).register(); + GantryContraptionEntity::new, () -> ContraptionEntityRenderer::new, 10, 40, false) + .instance(() -> ContraptionVisual::new) + .register(); public static final EntityEntry CARRIAGE_CONTRAPTION = contraption("carriage_contraption", CarriageContraptionEntity::new, - () -> CarriageContraptionEntityRenderer::new, 15, 3, true).instance(() -> CarriageContraptionVisual::new) + () -> CarriageContraptionEntityRenderer::new, 15, 3, true) + .instance(() -> CarriageContraptionVisual::new) .register(); public static final EntityEntry SUPER_GLUE = diff --git a/src/main/java/com/simibubi/create/CreateClient.java b/src/main/java/com/simibubi/create/CreateClient.java index be27cae85..cd41bd8a1 100644 --- a/src/main/java/com/simibubi/create/CreateClient.java +++ b/src/main/java/com/simibubi/create/CreateClient.java @@ -18,6 +18,7 @@ import com.simibubi.create.foundation.blockEntity.behaviour.ValueSettingsClient; import com.simibubi.create.foundation.gui.UIRenderHelper; import com.simibubi.create.foundation.outliner.Outliner; import com.simibubi.create.foundation.ponder.element.WorldSectionElement; +import com.simibubi.create.foundation.render.AllContextShaders; import com.simibubi.create.foundation.render.AllInstanceTypes; import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.StitchedSprite; @@ -67,6 +68,7 @@ public class CreateClient { modEventBus.addListener(StitchedSprite::onTextureStitchPost); AllInstanceTypes.init(); + AllContextShaders.init(); MODEL_SWAPPER.registerListeners(modEventBus); diff --git a/src/main/java/com/simibubi/create/content/contraptions/ControlledContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/ControlledContraptionEntity.java index a3d2a321c..cf40c01cb 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/ControlledContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/ControlledContraptionEntity.java @@ -246,10 +246,12 @@ public class ControlledContraptionEntity extends AbstractContraptionEntity { float angle = getAngle(partialTicks); Axis axis = getRotationAxis(); - TransformStack.of(matrixStack) - .nudge(getId()) - .center() - .rotate(angle, axis) - .uncenter(); + if (axis != null) { + TransformStack.of(matrixStack) + .nudge(getId()) + .center() + .rotate(angle, axis) + .uncenter(); + } } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java index c94783088..412bb2ead 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterActorVisual.java @@ -94,7 +94,17 @@ public class HarvesterActorVisual extends ActorVisual { .setChanged(); } - protected double getRotation() { + @Override + protected void _delete() { + harvester.delete(); + } + + protected double getRotation() { return AngleHelper.angleLerp(AnimationTickHolder.getPartialTicks(), previousRotation, rotation); } + + @Override + public void init(float partialTick) { + + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorVisual.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorVisual.java index 04f905b83..7b9ce9c49 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIActorVisual.java @@ -28,4 +28,13 @@ public class PSIActorVisual extends ActorVisual { instance.beginFrame(lf.getValue(AnimationTickHolder.getPartialTicks())); } + @Override + protected void _delete() { + instance.remove(); + } + + @Override + public void init(float partialTick) { + + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java index 851ee24d7..8e5f3098f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/psi/PSIVisual.java @@ -3,15 +3,15 @@ package com.simibubi.create.content.contraptions.actors.psi; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; -import com.jozufozu.flywheel.api.visual.TickableVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleTickableVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visual.VisualTickContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; import com.simibubi.create.foundation.utility.AnimationTickHolder; -public class PSIVisual extends AbstractBlockEntityVisual implements DynamicVisual, TickableVisual { +public class PSIVisual extends AbstractBlockEntityVisual implements SimpleDynamicVisual, SimpleTickableVisual { private final PIInstance instance; diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerActorVisual.java b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerActorVisual.java index 73189c93c..a7e067009 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerActorVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerActorVisual.java @@ -61,4 +61,10 @@ public class RollerActorVisual extends HarvesterActorVisual { return 16.5; } + @Override + protected void _delete() { + super._delete(); + + frame.delete(); + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingVisual.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingVisual.java index fa4881b7e..3a60fd065 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingVisual.java @@ -5,7 +5,7 @@ import java.util.function.Consumer; import org.joml.Quaternionf; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -22,7 +22,7 @@ import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -public class BearingVisual extends BackHalfShaftVisual implements DynamicVisual { +public class BearingVisual extends BackHalfShaftVisual implements SimpleDynamicVisual { final OrientedInstance topInstance; final Axis rotationAxis; diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java index 967c7f8b7..7a915312e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/StabilizedBearingVisual.java @@ -64,4 +64,15 @@ public class StabilizedBearingVisual extends ActorVisual { topInstance.setRotation(rotation); } + + @Override + protected void _delete() { + topInstance.delete(); + shaft.delete(); + } + + @Override + public void init(float partialTick) { + + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java index 68485903e..9abfc1d77 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.contraptions.chassis; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -17,7 +17,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.core.Direction; import net.minecraft.util.Mth; -public class StickerVisual extends AbstractBlockEntityVisual implements DynamicVisual { +public class StickerVisual extends AbstractBlockEntityVisual implements SimpleDynamicVisual { float lastOffset = Float.NaN; final Direction facing; diff --git a/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java index 7199c7e06..537532ed5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorPulleyVisual.java @@ -1,12 +1,12 @@ package com.simibubi.create.content.contraptions.elevator; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.simibubi.create.content.kinetics.base.ShaftVisual; // TODO -public class ElevatorPulleyVisual extends ShaftVisual implements DynamicVisual { +public class ElevatorPulleyVisual extends ShaftVisual implements SimpleDynamicVisual { public ElevatorPulleyVisual(VisualizationContext context, ElevatorPulleyBlockEntity blockEntity) { super(context, blockEntity); diff --git a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java index c6435745f..2965b1b7f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.contraptions.gantry; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -19,7 +19,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.util.Mth; -public class GantryCarriageVisual extends ShaftVisual implements DynamicVisual { +public class GantryCarriageVisual extends ShaftVisual implements SimpleDynamicVisual { private final TransformedInstance gantryCogs; diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java index ebf48d643..fc5edbeb7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java @@ -4,7 +4,7 @@ import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.instance.Instancer; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.box.MutableBox; @@ -21,7 +21,7 @@ import com.simibubi.create.foundation.render.SelectInstance; import net.minecraft.core.Direction; import net.minecraft.util.Mth; -public abstract class AbstractPulleyVisual extends ShaftVisual implements DynamicVisual { +public abstract class AbstractPulleyVisual extends ShaftVisual implements SimpleDynamicVisual { final OrientedInstance coil; final SelectInstance magnet; diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ActorVisual.java b/src/main/java/com/simibubi/create/content/contraptions/render/ActorVisual.java index bcd68ea31..1742fb225 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ActorVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ActorVisual.java @@ -1,18 +1,21 @@ package com.simibubi.create.content.contraptions.render; import com.jozufozu.flywheel.api.instance.InstancerProvider; +import com.jozufozu.flywheel.api.visual.Visual; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.LightLayer; -public abstract class ActorVisual { +public abstract class ActorVisual implements Visual { protected final VisualizationContext visualizationContext; protected final InstancerProvider instancerProvider; protected final BlockAndTintGetter simulationWorld; protected final MovementContext context; + private boolean deleted; + public ActorVisual(VisualizationContext visualizationContext, BlockAndTintGetter world, MovementContext context) { this.visualizationContext = visualizationContext; this.instancerProvider = visualizationContext.instancerProvider(); @@ -27,4 +30,25 @@ public abstract class ActorVisual { protected int localBlockLight() { return simulationWorld.getBrightness(LightLayer.BLOCK, context.localPos); } + + @Override + public void update(float partialTick) { + } + + @Override + public boolean shouldReset() { + return false; + } + + protected abstract void _delete(); + + @Override + public final void delete() { + if (deleted) { + return; + } + + _delete(); + deleted = true; + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionEntityRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionEntityRenderer.java index 9005060ae..93e9a861e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionEntityRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionEntityRenderer.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.contraptions.render; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.contraptions.AbstractContraptionEntity; -import com.simibubi.create.content.contraptions.Contraption; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.culling.Frustum; @@ -39,10 +38,10 @@ public class ContraptionEntityRenderer exte int overlay) { super.render(entity, yaw, partialTicks, ms, buffers, overlay); - Contraption contraption = entity.getContraption(); - if (contraption != null) { - ContraptionRenderDispatcher.renderFromEntity(entity, contraption, buffers); - } +// Contraption contraption = entity.getContraption(); +// if (contraption != null) { +// ContraptionRenderDispatcher.renderFromEntity(entity, contraption, buffers); +// } } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderDispatcher.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderDispatcher.java index f07dcc9e7..7b31ab969 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderDispatcher.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionRenderDispatcher.java @@ -28,7 +28,6 @@ import net.minecraft.world.level.LightLayer; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; @OnlyIn(Dist.CLIENT) @@ -59,14 +58,12 @@ public class ContraptionRenderDispatcher { .tick(); } - @SubscribeEvent public static void beginFrame(BeginFrameEvent event) { WORLDS.get(event.getContext() .level()) .beginFrame(event); } - @SubscribeEvent public static void renderLayer(RenderStageEvent event) { WORLDS.get(event.getLevel()) .renderLayer(event); @@ -74,7 +71,6 @@ public class ContraptionRenderDispatcher { GlError.pollAndThrow(() -> "contraption layer: " + event.getStage()); } - @SubscribeEvent public static void onRendererReload(ReloadLevelRendererEvent event) { reset(); } @@ -177,13 +173,7 @@ public class ContraptionRenderDispatcher { } public static void reset() { - WORLDS.empty(ContraptionRenderingWorld::delete); -// if (Backend.isOn()) { -// WORLDS = new WorldAttached<>(FlwContraptionManager::new); -// } else { - WORLDS = new WorldAttached<>(SBBContraptionManager::new); -// } } public static boolean canInstance() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java new file mode 100644 index 000000000..ba78b6b12 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java @@ -0,0 +1,220 @@ +package com.simibubi.create.content.contraptions.render; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.LongConsumer; + +import org.apache.commons.lang3.tuple.MutablePair; + +import com.jozufozu.flywheel.api.context.Context; +import com.jozufozu.flywheel.api.context.ContextShader; +import com.jozufozu.flywheel.api.context.Shader; +import com.jozufozu.flywheel.api.context.TextureSource; +import com.jozufozu.flywheel.api.material.Material; +import com.jozufozu.flywheel.api.model.Model; +import com.jozufozu.flywheel.api.task.Plan; +import com.jozufozu.flywheel.api.visual.BlockEntityVisual; +import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.api.visual.LitVisual; +import com.jozufozu.flywheel.api.visual.TickableVisual; +import com.jozufozu.flywheel.api.visual.VisualFrameContext; +import com.jozufozu.flywheel.api.visual.VisualTickContext; +import com.jozufozu.flywheel.api.visualization.BlockEntityVisualizer; +import com.jozufozu.flywheel.api.visualization.VisualizationContext; +import com.jozufozu.flywheel.api.visualization.VisualizerRegistry; +import com.jozufozu.flywheel.lib.instance.InstanceTypes; +import com.jozufozu.flywheel.lib.instance.TransformedInstance; +import com.jozufozu.flywheel.lib.model.baked.MultiBlockModelBuilder; +import com.jozufozu.flywheel.lib.task.ForEachPlan; +import com.jozufozu.flywheel.lib.task.NestedPlan; +import com.jozufozu.flywheel.lib.task.PlanMap; +import com.jozufozu.flywheel.lib.task.RunnablePlan; +import com.jozufozu.flywheel.lib.visual.AbstractEntityVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleTickableVisual; +import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.AllMovementBehaviours; +import com.simibubi.create.content.contraptions.AbstractContraptionEntity; +import com.simibubi.create.content.contraptions.Contraption; +import com.simibubi.create.content.contraptions.behaviour.MovementBehaviour; +import com.simibubi.create.content.contraptions.behaviour.MovementContext; +import com.simibubi.create.foundation.render.AllContextShaders; +import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; + +import net.minecraft.core.Vec3i; +import net.minecraft.util.Mth; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; + +public class ContraptionVisual extends AbstractEntityVisual implements DynamicVisual, TickableVisual, LitVisual { + protected final ContraptionContext context; + protected final VisualizationContext visualizationContext; + private final List> children = new ArrayList<>(); + private final List actors = new ArrayList<>(); + private final PlanMap dynamicVisuals = new PlanMap<>(); + private final List simpleDynamicVisuals = new ArrayList<>(); + private final PlanMap tickableVisuals = new PlanMap<>(); + private final List simpleTickableVisuals = new ArrayList<>(); + private VirtualRenderWorld virtualRenderWorld; + private Notifier notifier; + private Model model; + private TransformedInstance structure; + + private final PoseStack contraptionMatrix = new PoseStack(); + + public ContraptionVisual(VisualizationContext ctx, E entity) { + super(ctx, entity); + context = new ContraptionContext(); + visualizationContext = ctx.withContext(context, Vec3i.ZERO); + } + + @Override + public void init(float partialTick) { + Contraption contraption = entity.getContraption(); + virtualRenderWorld = ContraptionRenderDispatcher.setupRenderWorld(level, contraption); + + model = new MultiBlockModelBuilder(contraption.getRenderedBlocks()) + .modelDataMap(contraption.modelData) + .renderWorld(virtualRenderWorld) + .build(); + + structure = visualizationContext.instancerProvider() + .instancer(InstanceTypes.TRANSFORMED, model) + .createInstance(); + + for (BlockEntity be : contraption.maybeInstancedBlockEntities) { + setupVisualizer(be, partialTick); + } + + for (var actor : contraption.getActors()) { + setupActor(actor, partialTick); + } + } + + private void setupActor(MutablePair actor, float partialTick) { + MovementContext context = actor.getRight(); + if (context == null) { + return; + } + if (context.world == null) { + context.world = level; + } + + StructureTemplate.StructureBlockInfo blockInfo = actor.getLeft(); + + MovementBehaviour movementBehaviour = AllMovementBehaviours.getBehaviour(blockInfo.state()); + if (movementBehaviour == null) { + return; + } + var instance = movementBehaviour.createInstance(this.visualizationContext, virtualRenderWorld, context); + + if (instance == null) { + return; + } + + instance.init(partialTick); + + actors.add(instance); + } + + @SuppressWarnings("unchecked") + protected void setupVisualizer(T be, float partialTicks) { + BlockEntityVisualizer visualizer = (BlockEntityVisualizer) VisualizerRegistry.getVisualizer(be.getType()); + if (visualizer == null) { + return; + } + + Level world = be.getLevel(); + be.setLevel(virtualRenderWorld); + BlockEntityVisual visual = visualizer.createVisual(this.visualizationContext, be); + + visual.init(partialTicks); + + children.add(visual); + + if (visual instanceof DynamicVisual dynamic) { + if (dynamic instanceof SimpleDynamicVisual simple) { + simpleDynamicVisuals.add(simple); + } else { + dynamicVisuals.add(dynamic, dynamic.planFrame()); + } + } + + be.setLevel(world); + } + + @Override + public Plan planTick() { + return NestedPlan.of( + ForEachPlan.of(() -> actors, ActorVisual::tick), + ForEachPlan.of(() -> simpleTickableVisuals, SimpleTickableVisual::tick), + tickableVisuals + ); + } + + @Override + public Plan planFrame() { + return NestedPlan.of( + RunnablePlan.of(this::beginFrame), + ForEachPlan.of(() -> actors, ActorVisual::beginFrame), + ForEachPlan.of(() -> simpleDynamicVisuals, SimpleDynamicVisual::beginFrame), + dynamicVisuals + ); + } + + @Override + protected void _delete() { + children.forEach(BlockEntityVisual::delete); + + actors.forEach(ActorVisual::delete); + + if (model != null) { + model.delete(); + } + + if (structure != null) { + structure.delete(); + } + } + + @Override + public void updateLight() { + + } + + protected void beginFrame(VisualFrameContext context) { + double x = Mth.lerp(context.partialTick(), entity.xOld, entity.getX()); + double y = Mth.lerp(context.partialTick(), entity.yOld, entity.getY()); + double z = Mth.lerp(context.partialTick(), entity.zOld, entity.getZ()); + + contraptionMatrix.setIdentity(); + contraptionMatrix.translate(x, y, z); + entity.applyLocalTransforms(contraptionMatrix, context.partialTick()); + } + + @Override + public void collectLightSections(LongConsumer consumer) { + var boundingBox = entity.getBoundingBox(); + } + + @Override + public void initLightSectionNotifier(Notifier notifier) { + this.notifier = notifier; + } + + public class ContraptionContext implements Context { + + @Override + public ContextShader contextShader() { + return AllContextShaders.CONTRAPTION; + } + + @Override + public void prepare(Material material, Shader shader, TextureSource textureSource) { +// shader.setVec3("create_oneOverLightBoxSize"); +// shader.setVec3("create_lightVolumeMin"); + shader.setMat4("create_model", contraptionMatrix.last().pose()); + } + } +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/FlwContraption.java b/src/main/java/com/simibubi/create/content/contraptions/render/FlwContraption.java index cc3163507..a852e8619 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/FlwContraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/FlwContraption.java @@ -11,7 +11,6 @@ import com.simibubi.create.content.contraptions.Contraption; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; -import net.minecraft.client.renderer.RenderType; import net.minecraft.util.Mth; import net.minecraft.world.phys.AABB; @@ -36,7 +35,7 @@ public class FlwContraption extends ContraptionRenderInfo { var restoreState = GlStateTracker.getRestoreState(); buildLayers(); if (ContraptionRenderDispatcher.canInstance()) { - buildInstancedBlockEntities(); + // buildInstancedBlockEntities(); buildActors(); } restoreState.restore(); @@ -133,7 +132,7 @@ public class FlwContraption extends ContraptionRenderInfo { // } } - private void buildInstancedBlockEntities() { +// private void buildInstancedBlockEntities() { // for (BlockEntity be : contraption.maybeInstancedBlockEntities) { // if (!InstancedRenderRegistry.canInstance(be.getType())) { // continue; @@ -144,7 +143,7 @@ public class FlwContraption extends ContraptionRenderInfo { // instanceWorld.blockEntityInstanceManager.add(be); // be.setLevel(world); // } - } +// } private void buildActors() { // contraption.getActors().forEach(instanceWorld.blockEntityInstanceManager::createActor); diff --git a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java index 0d92b444d..b883fdffc 100644 --- a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java +++ b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java @@ -4,7 +4,7 @@ import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.instance.Instancer; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -16,7 +16,7 @@ import com.simibubi.create.foundation.utility.Iterate; import net.minecraft.core.Direction; -public class ToolBoxVisual extends AbstractBlockEntityVisual implements DynamicVisual { +public class ToolBoxVisual extends AbstractBlockEntityVisual implements SimpleDynamicVisual { private final Direction facing; private TransformedInstance lid; diff --git a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java index c9f1bbbb4..3424760dc 100644 --- a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java +++ b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.fluids.pipes.valve; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -18,7 +18,7 @@ import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.core.Direction; import net.minecraft.util.Mth; -public class FluidValveVisual extends ShaftVisual implements DynamicVisual { +public class FluidValveVisual extends ShaftVisual implements SimpleDynamicVisual { protected TransformedInstance pointer; protected boolean settled; diff --git a/src/main/java/com/simibubi/create/content/fluids/pump/PumpCogVisual.java b/src/main/java/com/simibubi/create/content/fluids/pump/PumpCogVisual.java index 83590b8dc..8786c190d 100644 --- a/src/main/java/com/simibubi/create/content/fluids/pump/PumpCogVisual.java +++ b/src/main/java/com/simibubi/create/content/fluids/pump/PumpCogVisual.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.fluids.pump; import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.model.Models; @@ -12,7 +12,7 @@ import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -public class PumpCogVisual extends SingleRotatingVisual implements DynamicVisual { +public class PumpCogVisual extends SingleRotatingVisual implements SimpleDynamicVisual { public PumpCogVisual(VisualizationContext context, PumpBlockEntity blockEntity) { super(context, blockEntity); diff --git a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java index bae8235b4..2c4b125d3 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java @@ -4,7 +4,7 @@ import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -15,7 +15,7 @@ import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -public class HandCrankVisual extends SingleRotatingVisual implements DynamicVisual { +public class HandCrankVisual extends SingleRotatingVisual implements SimpleDynamicVisual { private TransformedInstance crank; private Direction facing; diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorVisual.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorVisual.java index e0db38b91..211d6b87a 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerActorVisual.java @@ -117,4 +117,16 @@ public class DeployerActorVisual extends ActorVisual { hand.setTransform(stack); } + + @Override + protected void _delete() { + pole.delete(); + hand.delete(); + shaft.delete(); + } + + @Override + public void init(float partialTick) { + + } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java index 20150c01b..1a23faa51 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerVisual.java @@ -8,8 +8,8 @@ import java.util.function.Consumer; import org.joml.Quaternionf; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; -import com.jozufozu.flywheel.api.visual.TickableVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleTickableVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visual.VisualTickContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; @@ -28,7 +28,7 @@ import net.minecraft.core.Direction; import net.minecraft.core.Vec3i; import net.minecraft.util.Mth; -public class DeployerVisual extends ShaftVisual implements DynamicVisual, TickableVisual { +public class DeployerVisual extends ShaftVisual implements SimpleDynamicVisual, SimpleTickableVisual { final Direction facing; final float yRot; diff --git a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillActorVisual.java b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillActorVisual.java index 4eb8dab7c..2a4c84ebf 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/drill/DrillActorVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/drill/DrillActorVisual.java @@ -59,4 +59,14 @@ public class DrillActorVisual extends ActorVisual { return context.getAnimationSpeed(); return 0; } + + @Override + protected void _delete() { + drillHead.delete(); + } + + @Override + public void init(float partialTick) { + + } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java index dba60d3b8..3ac8d6752 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java @@ -3,7 +3,8 @@ package com.simibubi.create.content.kinetics.flywheel; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.model.Models; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -19,7 +20,7 @@ import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.core.Direction; -public class FlywheelVisual extends KineticBlockEntityVisual implements DynamicVisual { +public class FlywheelVisual extends KineticBlockEntityVisual implements SimpleDynamicVisual { protected final RotatingInstance shaft; protected final TransformedInstance wheel; @@ -30,7 +31,7 @@ public class FlywheelVisual extends KineticBlockEntityVisual implements DynamicVisual { +public abstract class GaugeVisual extends ShaftVisual implements SimpleDynamicVisual { protected final ArrayList faces; diff --git a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java index 9220fe77c..a5aa94ea9 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java @@ -6,7 +6,7 @@ import java.util.function.Consumer; import com.google.common.collect.Lists; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.AbstractInstance; @@ -27,7 +27,7 @@ import net.minecraft.util.Mth; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.ItemStack; -public class ArmVisual extends SingleRotatingVisual implements DynamicVisual { +public class ArmVisual extends SingleRotatingVisual implements SimpleDynamicVisual { final TransformedInstance base; final TransformedInstance lowerBody; diff --git a/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java b/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java index ce2ca8ca0..9f6ddf961 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java @@ -4,7 +4,7 @@ import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.model.Model; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -18,7 +18,7 @@ import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.core.Direction; -public class MixerVisual extends EncasedCogVisual implements DynamicVisual { +public class MixerVisual extends EncasedCogVisual implements SimpleDynamicVisual { private final RotatingInstance mixerHead; private final OrientedInstance mixerPole; diff --git a/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java b/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java index 981fc83b4..7c2031785 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java @@ -5,7 +5,7 @@ import java.util.function.Consumer; import org.joml.Quaternionf; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -17,7 +17,7 @@ import com.simibubi.create.content.kinetics.base.ShaftVisual; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; -public class PressVisual extends ShaftVisual implements DynamicVisual { +public class PressVisual extends ShaftVisual implements SimpleDynamicVisual { private final OrientedInstance pressHead; diff --git a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java index 2c666a852..9f6912535 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.kinetics.steamEngine; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -18,7 +18,7 @@ import net.minecraft.core.Direction; import net.minecraft.core.Direction.Axis; import net.minecraft.util.Mth; -public class SteamEngineVisual extends AbstractBlockEntityVisual implements DynamicVisual { +public class SteamEngineVisual extends AbstractBlockEntityVisual implements SimpleDynamicVisual { protected final TransformedInstance piston; protected final TransformedInstance linkage; diff --git a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java index 2b5acf20a..d47f5bc79 100644 --- a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java +++ b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.logistics.depot; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -13,7 +13,7 @@ import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.ShaftVisual; import com.simibubi.create.foundation.utility.AnimationTickHolder; -public class EjectorVisual extends ShaftVisual implements DynamicVisual { +public class EjectorVisual extends ShaftVisual implements SimpleDynamicVisual { protected final TransformedInstance plate; diff --git a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java index df3fc4156..006d63d9f 100644 --- a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java +++ b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java @@ -5,7 +5,7 @@ import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.instance.Instancer; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.AbstractInstance; @@ -20,7 +20,7 @@ import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.core.Direction; import net.minecraft.world.level.LightLayer; -public class FunnelVisual extends AbstractBlockEntityVisual implements DynamicVisual { +public class FunnelVisual extends AbstractBlockEntityVisual implements SimpleDynamicVisual { private final ArrayList flaps; diff --git a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java index ce0711bc1..2718e71c8 100644 --- a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java +++ b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java @@ -8,7 +8,7 @@ import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.instance.Instancer; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.AbstractInstance; @@ -23,7 +23,7 @@ import com.simibubi.create.foundation.utility.animation.LerpedFloat; import net.minecraft.core.Direction; import net.minecraft.world.level.LightLayer; -public class BeltTunnelVisual extends AbstractBlockEntityVisual implements DynamicVisual { +public class BeltTunnelVisual extends AbstractBlockEntityVisual implements SimpleDynamicVisual { private final Map> tunnelFlaps; diff --git a/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverVisual.java b/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverVisual.java index 37d831102..e306ace85 100644 --- a/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverVisual.java +++ b/src/main/java/com/simibubi/create/content/redstone/analogLever/AnalogLeverVisual.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.redstone.analogLever; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -20,7 +20,7 @@ import com.simibubi.create.foundation.utility.Color; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.properties.AttachFace; -public class AnalogLeverVisual extends AbstractBlockEntityVisual implements DynamicVisual { +public class AnalogLeverVisual extends AbstractBlockEntityVisual implements SimpleDynamicVisual { protected final TransformedInstance handle; protected final TransformedInstance indicator; diff --git a/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeVisual.java b/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeVisual.java index 2a114eb75..b279ef782 100644 --- a/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeVisual.java +++ b/src/main/java/com/simibubi/create/content/redstone/diodes/BrassDiodeVisual.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.redstone.diodes; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.TickableVisual; +import com.jozufozu.flywheel.lib.visual.SimpleTickableVisual; import com.jozufozu.flywheel.api.visual.VisualTickContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -13,7 +13,7 @@ import com.jozufozu.flywheel.lib.visual.AbstractBlockEntityVisual; import com.simibubi.create.AllPartialModels; import com.simibubi.create.foundation.utility.Color; -public class BrassDiodeVisual extends AbstractBlockEntityVisual implements TickableVisual { +public class BrassDiodeVisual extends AbstractBlockEntityVisual implements SimpleTickableVisual { protected final TransformedInstance indicator; diff --git a/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonVisual.java b/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonVisual.java index 5df4a1be4..6e1ac481c 100644 --- a/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonVisual.java +++ b/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonVisual.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.schematics.cannon; import java.util.function.Consumer; import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.visual.DynamicVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.instance.InstanceTypes; @@ -16,7 +16,7 @@ import com.simibubi.create.AllPartialModels; import net.minecraft.core.Direction; -public class SchematicannonVisual extends AbstractBlockEntityVisual implements DynamicVisual { +public class SchematicannonVisual extends AbstractBlockEntityVisual implements SimpleDynamicVisual { private final TransformedInstance connector; private final TransformedInstance pipe; diff --git a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java index fc10aa376..032c6a79d 100644 --- a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java +++ b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java @@ -2,19 +2,19 @@ package com.simibubi.create.content.trains.entity; import org.joml.Vector3f; -import com.jozufozu.flywheel.api.visual.DynamicVisual; import com.jozufozu.flywheel.api.visual.VisualFrameContext; import com.jozufozu.flywheel.api.visualization.VisualizationContext; import com.jozufozu.flywheel.lib.transform.TransformStack; -import com.jozufozu.flywheel.lib.visual.AbstractEntityVisual; +import com.jozufozu.flywheel.lib.visual.SimpleDynamicVisual; import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.content.contraptions.render.ContraptionVisual; import com.simibubi.create.content.trains.bogey.BogeyRenderer; import com.simibubi.create.content.trains.bogey.BogeyVisual; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.Iterate; -public class CarriageContraptionVisual extends AbstractEntityVisual implements DynamicVisual { +public class CarriageContraptionVisual extends ContraptionVisual implements SimpleDynamicVisual { private final PoseStack ms = new PoseStack(); @@ -47,6 +47,7 @@ public class CarriageContraptionVisual extends AbstractEntityVisual