Create/src/main/java/com/simibubi/create/content/trains/signal/SignalRenderer.java
zelophed 9098002c17 Wait it's all Flywheel? Always has been.
- add flywheel as a dependency to catnip
2023-08-13 23:39:10 +02:00

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();
}
}