@@ -43,10 +43,32 @@ public SignalVisual(VisualizationContext ctx, SignalBlockEntity blockEntity, flo
4343 signalOverlay = ctx .instancerProvider ()
4444 .instancer (InstanceTypes .TRANSFORMED , Models .partial (AllPartialModels .TRACK_SIGNAL_OVERLAY ))
4545 .createInstance ();
46+
47+ setupVisual ();
4648 }
4749
4850 @ Override
4951 public void tick (Context context ) {
52+ setupVisual ();
53+ }
54+
55+ @ Override
56+ public void updateLight (float partialTick ) {
57+ relight (signalLight , signalOverlay );
58+ }
59+
60+ @ Override
61+ protected void _delete () {
62+ signalLight .delete ();
63+ signalOverlay .delete ();
64+ }
65+
66+ @ Override
67+ public void collectCrumblingInstances (Consumer <@ Nullable Instance > consumer ) {
68+ consumer .accept (signalLight );
69+ }
70+
71+ private void setupVisual () {
5072 {
5173 SignalState signalState = blockEntity .getState ();
5274
@@ -81,43 +103,36 @@ public void tick(Context context) {
81103 Block block = trackState .getBlock ();
82104
83105 if (!(block instanceof ITrackBlock trackBlock ) || overlayState == OverlayState .SKIP ) {
106+ previousOverlayState = null ;
84107 signalOverlay .setZeroTransform ()
85108 .setChanged ();
86109 return ;
87110 }
88111
89- signalOverlay .setIdentityTransform ()
90- .translate (targetPosition );
91-
92- RenderedTrackOverlayType type =
93- overlayState == OverlayState .DUAL ? RenderedTrackOverlayType .DUAL_SIGNAL : RenderedTrackOverlayType .SIGNAL ;
94- PartialModel partial = trackBlock .prepareTrackOverlay (signalOverlay , level , targetPosition , trackState , target .getTargetBezier (), target .getTargetDirection (), type );
95-
96112 if (overlayState != previousOverlayState ) {
113+ previousOverlayState = overlayState ;
114+
115+ PartialModel partial ;
116+ RenderedTrackOverlayType type ;
117+ if (overlayState == OverlayState .DUAL ) {
118+ type = RenderedTrackOverlayType .DUAL_SIGNAL ;
119+ partial = AllPartialModels .TRACK_SIGNAL_DUAL_OVERLAY ;
120+ } else {
121+ type = RenderedTrackOverlayType .SIGNAL ;
122+ partial = AllPartialModels .TRACK_SIGNAL_OVERLAY ;
123+ }
124+
97125 instancerProvider ()
98126 .instancer (InstanceTypes .TRANSFORMED , Models .partial (partial ))
99127 .stealInstance (signalOverlay );
100- }
101-
102- signalOverlay .setChanged ();
103-
104- previousOverlayState = overlayState ;
105- }
106- }
107128
108- @ Override
109- public void updateLight (float partialTick ) {
110- relight (signalLight , signalOverlay );
111- }
129+ signalOverlay .setIdentityTransform ()
130+ .translate (targetPosition .subtract (renderOrigin ()));
112131
113- @ Override
114- protected void _delete () {
115- signalLight .delete ();
116- signalOverlay .delete ();
117- }
132+ trackBlock .prepareTrackOverlay (signalOverlay , level , targetPosition , trackState , target .getTargetBezier (), target .getTargetDirection (), type );
118133
119- @ Override
120- public void collectCrumblingInstances ( Consumer < @ Nullable Instance > consumer ) {
121- consumer . accept ( signalLight );
134+ signalOverlay . setChanged ();
135+ }
136+ }
122137 }
123138}
0 commit comments