mirror of
https://github.com/Creators-of-Create/Create.git
synced 2025-03-04 06:44:40 +01:00
Crank it!
- Fix valve handle visual rendering a ghost instance - Fix drills rendering garbage
This commit is contained in:
parent
73661845fe
commit
bbc30e41c7
3 changed files with 42 additions and 54 deletions
|
@ -3,18 +3,24 @@ package com.simibubi.create.content.contraptions.render;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import dev.engine_room.flywheel.api.visual.LightUpdatedVisual;
|
||||
|
||||
import dev.engine_room.flywheel.api.visual.ShaderLightVisual;
|
||||
import it.unimi.dsi.fastutil.longs.LongArraySet;
|
||||
import it.unimi.dsi.fastutil.longs.LongSet;
|
||||
|
||||
import org.apache.commons.lang3.tuple.MutablePair;
|
||||
|
||||
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.Contraption.RenderedBlocks;
|
||||
import com.simibubi.create.content.contraptions.behaviour.MovementBehaviour;
|
||||
import com.simibubi.create.content.contraptions.behaviour.MovementContext;
|
||||
import com.simibubi.create.foundation.utility.worldWrappers.WrappedBlockAndTintGetter;
|
||||
import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld;
|
||||
|
||||
import dev.engine_room.flywheel.api.model.Model;
|
||||
import dev.engine_room.flywheel.api.task.Plan;
|
||||
import dev.engine_room.flywheel.api.visual.BlockEntityVisual;
|
||||
import dev.engine_room.flywheel.api.visual.DynamicVisual;
|
||||
import dev.engine_room.flywheel.api.visual.LightUpdatedVisual;
|
||||
import dev.engine_room.flywheel.api.visual.ShaderLightVisual;
|
||||
import dev.engine_room.flywheel.api.visual.TickableVisual;
|
||||
import dev.engine_room.flywheel.api.visualization.BlockEntityVisualizer;
|
||||
import dev.engine_room.flywheel.api.visualization.VisualEmbedding;
|
||||
|
@ -28,16 +34,8 @@ import dev.engine_room.flywheel.lib.task.NestedPlan;
|
|||
import dev.engine_room.flywheel.lib.task.PlanMap;
|
||||
import dev.engine_room.flywheel.lib.task.RunnablePlan;
|
||||
import dev.engine_room.flywheel.lib.visual.AbstractEntityVisual;
|
||||
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.Contraption.RenderedBlocks;
|
||||
import com.simibubi.create.content.contraptions.behaviour.MovementBehaviour;
|
||||
import com.simibubi.create.content.contraptions.behaviour.MovementContext;
|
||||
import com.simibubi.create.foundation.utility.worldWrappers.WrappedBlockAndTintGetter;
|
||||
import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld;
|
||||
|
||||
import it.unimi.dsi.fastutil.longs.LongArraySet;
|
||||
import it.unimi.dsi.fastutil.longs.LongSet;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.SectionPos;
|
||||
import net.minecraft.util.Mth;
|
||||
|
@ -179,9 +177,6 @@ public class ContraptionVisual<E extends AbstractContraptionEntity> extends Abst
|
|||
}
|
||||
|
||||
if (hasMovedBlocks()) {
|
||||
// TODO: incremental light collection
|
||||
// TODO: optimize light collection for very large contraptions
|
||||
// by only collecting cuboids that contain faces
|
||||
updateLight(partialTick);
|
||||
}
|
||||
}
|
||||
|
@ -200,7 +195,6 @@ public class ContraptionVisual<E extends AbstractContraptionEntity> extends Abst
|
|||
|
||||
@Override
|
||||
public void updateLight(float partialTick) {
|
||||
super.update(partialTick);
|
||||
}
|
||||
|
||||
public LongSet collectLightSections() {
|
||||
|
|
|
@ -2,6 +2,11 @@ package com.simibubi.create.content.kinetics.crank;
|
|||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import com.simibubi.create.content.kinetics.base.KineticBlockEntityVisual;
|
||||
import com.simibubi.create.content.kinetics.base.RotatingInstance;
|
||||
import com.simibubi.create.foundation.render.AllInstanceTypes;
|
||||
import com.simibubi.create.foundation.render.VirtualRenderHelper;
|
||||
|
||||
import dev.engine_room.flywheel.api.instance.Instance;
|
||||
import dev.engine_room.flywheel.api.model.Model;
|
||||
import dev.engine_room.flywheel.api.visual.DynamicVisual;
|
||||
|
@ -9,13 +14,11 @@ 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.visual.SimpleDynamicVisual;
|
||||
import com.simibubi.create.content.kinetics.base.SingleRotatingVisual;
|
||||
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
|
||||
|
||||
public class HandCrankVisual extends SingleRotatingVisual<HandCrankBlockEntity> implements SimpleDynamicVisual {
|
||||
|
||||
public class HandCrankVisual extends KineticBlockEntityVisual<HandCrankBlockEntity> implements SimpleDynamicVisual {
|
||||
protected RotatingInstance rotatingModel;
|
||||
private final TransformedInstance crank;
|
||||
private final Direction facing;
|
||||
|
||||
|
@ -23,22 +26,21 @@ public class HandCrankVisual extends SingleRotatingVisual<HandCrankBlockEntity>
|
|||
super(modelManager, blockEntity, partialTick);
|
||||
facing = blockState.getValue(BlockStateProperties.FACING);
|
||||
Model model = blockEntity.getRenderedHandleInstance();
|
||||
|
||||
crank = instancerProvider.instancer(InstanceTypes.TRANSFORMED, model)
|
||||
.createInstance();
|
||||
|
||||
rotateCrank(partialTick);
|
||||
|
||||
if (blockEntity.shouldRenderShaft())
|
||||
if (blockEntity.shouldRenderShaft()) {
|
||||
rotatingModel = instancerProvider.instancer(AllInstanceTypes.ROTATING, VirtualRenderHelper.blockModel(blockState))
|
||||
.createInstance();
|
||||
setup(rotatingModel);
|
||||
|
||||
updateLight(partialTick);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beginFrame(DynamicVisual.Context ctx) {
|
||||
if (crank == null)
|
||||
return;
|
||||
|
||||
rotateCrank(ctx.partialTick());
|
||||
}
|
||||
|
||||
|
@ -56,31 +58,23 @@ public class HandCrankVisual extends SingleRotatingVisual<HandCrankBlockEntity>
|
|||
|
||||
@Override
|
||||
protected void _delete() {
|
||||
if (blockEntity.shouldRenderShaft())
|
||||
super._delete();
|
||||
if (crank != null)
|
||||
crank.delete();
|
||||
crank.delete();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(float pt) {
|
||||
if (blockEntity.shouldRenderShaft())
|
||||
super.update(pt);
|
||||
if (rotatingModel != null)
|
||||
updateRotation(rotatingModel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateLight(float partialTick) {
|
||||
if (blockEntity.shouldRenderShaft())
|
||||
super.updateLight(partialTick);
|
||||
if (crank != null)
|
||||
relight(pos, crank);
|
||||
relight(pos, crank, rotatingModel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collectCrumblingInstances(Consumer<Instance> consumer) {
|
||||
super.collectCrumblingInstances(consumer);
|
||||
if (crank != null) {
|
||||
consumer.accept(crank);
|
||||
}
|
||||
consumer.accept(crank);
|
||||
consumer.accept(rotatingModel);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,16 +4,16 @@ import static com.simibubi.create.Create.asResource;
|
|||
|
||||
import org.lwjgl.system.MemoryUtil;
|
||||
|
||||
import dev.engine_room.flywheel.api.instance.InstanceType;
|
||||
import dev.engine_room.flywheel.api.layout.FloatRepr;
|
||||
import dev.engine_room.flywheel.api.layout.IntegerRepr;
|
||||
import dev.engine_room.flywheel.api.layout.LayoutBuilder;
|
||||
import dev.engine_room.flywheel.lib.instance.SimpleInstanceType;
|
||||
import com.simibubi.create.content.contraptions.actors.ActorInstance;
|
||||
import com.simibubi.create.content.kinetics.base.RotatingInstance;
|
||||
import com.simibubi.create.content.kinetics.belt.BeltInstance;
|
||||
import com.simibubi.create.content.logistics.flwdata.FlapInstance;
|
||||
|
||||
import dev.engine_room.flywheel.api.instance.InstanceType;
|
||||
import dev.engine_room.flywheel.api.layout.FloatRepr;
|
||||
import dev.engine_room.flywheel.api.layout.IntegerRepr;
|
||||
import dev.engine_room.flywheel.api.layout.LayoutBuilder;
|
||||
import dev.engine_room.flywheel.lib.instance.SimpleInstanceType;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
|
||||
|
@ -117,11 +117,11 @@ public class AllInstanceTypes {
|
|||
MemoryUtil.memPutFloat(ptr + 24, instance.rotation.x);
|
||||
MemoryUtil.memPutFloat(ptr + 28, instance.rotation.y);
|
||||
MemoryUtil.memPutFloat(ptr + 32, instance.rotation.z);
|
||||
MemoryUtil.memPutFloat(ptr + 34, instance.rotation.w);
|
||||
MemoryUtil.memPutByte(ptr + 38, instance.rotationCenterX);
|
||||
MemoryUtil.memPutByte(ptr + 39, instance.rotationCenterY);
|
||||
MemoryUtil.memPutByte(ptr + 40, instance.rotationCenterZ);
|
||||
MemoryUtil.memPutFloat(ptr + 42, instance.speed);
|
||||
MemoryUtil.memPutFloat(ptr + 36, instance.rotation.w);
|
||||
MemoryUtil.memPutByte(ptr + 40, instance.rotationCenterX);
|
||||
MemoryUtil.memPutByte(ptr + 41, instance.rotationCenterY);
|
||||
MemoryUtil.memPutByte(ptr + 42, instance.rotationCenterZ);
|
||||
MemoryUtil.memPutFloat(ptr + 44, instance.speed);
|
||||
})
|
||||
.register();
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue