mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-06-02 18:59:19 +02:00
9098002c17
- add flywheel as a dependency to catnip
67 lines
2.7 KiB
Java
67 lines
2.7 KiB
Java
package com.simibubi.create.content.trains.signal;
|
|
|
|
import com.jozufozu.flywheel.util.transform.TransformStack;
|
|
import com.mojang.blaze3d.vertex.PoseStack;
|
|
import com.simibubi.create.AllPartialModels;
|
|
import com.simibubi.create.content.trains.signal.SignalBlockEntity.OverlayState;
|
|
import com.simibubi.create.content.trains.signal.SignalBlockEntity.SignalState;
|
|
import com.simibubi.create.content.trains.track.ITrackBlock;
|
|
import com.simibubi.create.content.trains.track.TrackTargetingBehaviour;
|
|
import com.simibubi.create.content.trains.track.TrackTargetingBehaviour.RenderedTrackOverlayType;
|
|
import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer;
|
|
|
|
import net.createmod.catnip.render.CachedBuffers;
|
|
import net.createmod.ponder.utility.WorldTickHolder;
|
|
import net.minecraft.client.renderer.MultiBufferSource;
|
|
import net.minecraft.client.renderer.RenderType;
|
|
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
|
|
import net.minecraft.core.BlockPos;
|
|
import net.minecraft.world.level.Level;
|
|
import net.minecraft.world.level.block.Block;
|
|
import net.minecraft.world.level.block.state.BlockState;
|
|
|
|
public class SignalRenderer extends SafeBlockEntityRenderer<SignalBlockEntity> {
|
|
|
|
public SignalRenderer(BlockEntityRendererProvider.Context context) {}
|
|
|
|
@Override
|
|
protected void renderSafe(SignalBlockEntity be, float partialTicks, PoseStack ms, MultiBufferSource buffer,
|
|
int light, int overlay) {
|
|
BlockState blockState = be.getBlockState();
|
|
SignalState signalState = be.getState();
|
|
OverlayState overlayState = be.getOverlay();
|
|
|
|
float renderTime = WorldTickHolder.getRenderTime(be.getLevel());
|
|
if (signalState.isRedLight(renderTime))
|
|
CachedBuffers.partial(AllPartialModels.SIGNAL_ON, blockState)
|
|
.renderInto(ms, buffer.getBuffer(RenderType.solid()));
|
|
else
|
|
CachedBuffers.partial(AllPartialModels.SIGNAL_OFF, blockState)
|
|
.light(light)
|
|
.renderInto(ms, buffer.getBuffer(RenderType.solid()));
|
|
|
|
BlockPos pos = be.getBlockPos();
|
|
TrackTargetingBehaviour<SignalBoundary> target = be.edgePoint;
|
|
BlockPos targetPosition = target.getGlobalPosition();
|
|
Level level = be.getLevel();
|
|
BlockState trackState = level.getBlockState(targetPosition);
|
|
Block block = trackState.getBlock();
|
|
|
|
if (!(block instanceof ITrackBlock))
|
|
return;
|
|
if (overlayState == OverlayState.SKIP)
|
|
return;
|
|
|
|
ms.pushPose();
|
|
TransformStack.cast(ms)
|
|
.translate(targetPosition.subtract(pos));
|
|
RenderedTrackOverlayType type =
|
|
overlayState == OverlayState.DUAL ? RenderedTrackOverlayType.DUAL_SIGNAL : RenderedTrackOverlayType.SIGNAL;
|
|
TrackTargetingBehaviour.render(level, targetPosition, target.getTargetDirection(), target.getTargetBezier(), ms,
|
|
buffer, light, overlay, type, 1);
|
|
ms.popPose();
|
|
|
|
}
|
|
|
|
}
|