@@ -36,9 +36,17 @@ public sealed class StationAiOverlay : Overlay
3636 private readonly NavMapControl _navMap = new ( ) ; // Carpmosia-edit - AI Navmap
3737
3838 private readonly OverlayResourceCache < CachedResources > _resources = new ( ) ;
39- private Dictionary < Color , Color > _sRGBLookUp = new ( ) ; // Carpmosia-edit - AI Navmap
4039
41- private float _updateRate = 1f / 30f ;
40+ // Carpmosia-start - AI Navmap
41+ private readonly Dictionary < Color , Color > _sRgbLookUp = new ( ) ;
42+ private static readonly RenderTargetFormatParameters RenderTargetFormatParameters = new ( RenderTargetColorFormat . Rgba8Srgb ) ;
43+
44+ private static readonly List < Vector2 > TileLinesToDraw = [ ] ;
45+ private static readonly List < Vector2 > TileRectsToDraw = [ ] ;
46+
47+ private const float UpdateRate = 1f / 30f ;
48+ // Carpmosia-end - AI Navmap
49+
4250 private float _accumulator ;
4351
4452 public StationAiOverlay ( )
@@ -59,30 +67,32 @@ protected override void Draw(in OverlayDrawArgs args)
5967 {
6068 res . StaticTexture ? . Dispose ( ) ;
6169 res . StencilTexture ? . Dispose ( ) ;
62- res . StencilTexture = _clyde . CreateRenderTarget ( args . Viewport . Size , new RenderTargetFormatParameters ( RenderTargetColorFormat . Rgba8Srgb ) , name : "station-ai-stencil" ) ;
70+
71+ // Carpmosia-start - AI Navmap
72+ res . StencilTexture = _clyde . CreateRenderTarget ( args . Viewport . Size , RenderTargetFormatParameters , name : "station-ai-stencil" ) ;
6373 res . StaticTexture = _clyde . CreateRenderTarget ( args . Viewport . Size ,
64- new RenderTargetFormatParameters ( RenderTargetColorFormat . Rgba8Srgb ) ,
74+ RenderTargetFormatParameters ,
6575 name : "station-ai-static" ) ;
76+ // Carpmosia-end - AI Navmap
6677 }
6778
6879 var worldHandle = args . WorldHandle ;
6980
7081 var worldBounds = args . WorldBounds ;
71- // var playerEnt = _player.LocalEntity;
7282
73- // Starlight-start: moved to be after new playerEnt definition with edit
74- var playerEnt = _player . LocalEntity ;
83+ // Starlight-start: moved to be after new playerEnt definition with edit
84+ var playerEnt = _player . LocalEntity ;
7585
7686 // Check for cross-grid viewing (e.g., Abductor remote eye) BEFORE getting gridUid
77- if ( _entManager . TryGetComponent ( playerEnt , out StationAiOverlayComponent ? stationAiOverlay )
78- && stationAiOverlay . AllowCrossGrid
87+ if ( _entManager . TryGetComponent ( playerEnt , out StationAiOverlayComponent ? stationAiOverlay )
88+ && stationAiOverlay . AllowCrossGrid
7989 && _entManager . TryGetComponent ( playerEnt , out RelayInputMoverComponent ? relay ) )
8090 playerEnt = relay . RelayEntity ;
8191
8292 // Starlight - start
8393 _entManager . TryGetComponent ( playerEnt , out StationAiOverlayComponent ? relayStationAiOverlay ) ;
8494 // Starlight - end
85-
95+
8696 _entManager . TryGetComponent ( playerEnt , out TransformComponent ? playerXform ) ;
8797 var gridUid = playerXform ? . GridUid ?? EntityUid . Invalid ;
8898 _entManager . TryGetComponent ( gridUid , out MapGridComponent ? grid ) ;
@@ -101,10 +111,10 @@ protected override void Draw(in OverlayDrawArgs args)
101111 if ( stationAiOverlay is not null ) // 🌟Starlight🌟
102112 color = color . WithAlpha ( stationAiOverlay . Alfa ) ; // 🌟Starlight🌟
103113
104- _navMap . AiFrameUpdate ( ( float ) _timing . FrameTime . TotalSeconds , gridUid ) ; // Carpmosia-edit - AI Navmap
114+ _navMap . AiFrameUpdate ( ( float ) _timing . FrameTime . TotalSeconds , gridUid ) ; // Carpmosia-edit - AI Navmap
105115 if ( _accumulator <= 0f )
106116 {
107- _accumulator = MathF . Max ( 0f , _accumulator + _updateRate ) ;
117+ _accumulator = MathF . Max ( 0f , _accumulator + UpdateRate ) ; // Carpmosia-edit - AI Navmap
108118 _visibleTiles . Clear ( ) ;
109119 // Starlight - start
110120 _visibleTileTags . Clear ( ) ;
@@ -212,65 +222,67 @@ public void Dispose()
212222 // Carpmosia-start - AI Navmap
213223 protected void DrawNavMap ( DrawingHandleWorld handle , MapGridComponent grid )
214224 {
215- if ( ! _sRGBLookUp . TryGetValue ( _navMap . WallColor , out var wallsRGB ) )
225+ if ( ! _sRgbLookUp . TryGetValue ( _navMap . WallColor , out var wallsRgb ) )
216226 {
217- wallsRGB = Color . ToSrgb ( _navMap . WallColor ) ;
218- _sRGBLookUp [ _navMap . WallColor ] = wallsRGB ;
227+ wallsRgb = Color . ToSrgb ( _navMap . WallColor ) ;
228+ _sRgbLookUp [ _navMap . WallColor ] = wallsRgb ;
219229 }
220230
221231 // Draw floor tiles
222- if ( _navMap . TilePolygons . Any ( ) )
232+ if ( _navMap . TilePolygons . Count != 0 )
223233 {
224234 foreach ( var ( polygonVerts , polygonColor ) in _navMap . TilePolygons )
225235 {
226- handle . DrawPrimitives ( DrawPrimitiveTopology . TriangleFan , polygonVerts [ ..polygonVerts . Length ] , polygonColor ) ;
236+ handle . DrawPrimitives ( DrawPrimitiveTopology . TriangleFan , polygonVerts . AsSpan ( ) [ ..] , polygonColor ) ;
227237 }
228238 }
229239
230240 // Draw map lines
231- if ( _navMap . TileLines . Any ( ) )
241+ if ( _navMap . TileLines . Count != 0 )
232242 {
233- var lines = new ValueList < Vector2 > ( _navMap . TileLines . Count * 2 ) ;
243+ TileLinesToDraw . Clear ( ) ;
244+ TileLinesToDraw . EnsureCapacity ( _navMap . TileLines . Count * 2 ) ;
234245
235246 foreach ( var ( o , t ) in _navMap . TileLines )
236247 {
237- var origin = new Vector2 ( o . X , - o . Y ) ;
238- var terminus = new Vector2 ( t . X , - t . Y ) ;
248+ var origin = o with { Y = - o . Y } ;
249+ var terminus = t with { Y = - t . Y } ;
239250
240- lines . Add ( origin ) ;
241- lines . Add ( terminus ) ;
251+ TileLinesToDraw . Add ( origin ) ;
252+ TileLinesToDraw . Add ( terminus ) ;
242253 }
243254
244- if ( lines . Count > 0 )
245- handle . DrawPrimitives ( DrawPrimitiveTopology . LineList , lines . Span , wallsRGB ) ;
255+ if ( TileLinesToDraw . Count > 0 )
256+ handle . DrawPrimitives ( DrawPrimitiveTopology . LineList , TileLinesToDraw , wallsRgb ) ;
246257 }
247258
248259 // Draw map rects
249- if ( _navMap . TileRects . Any ( ) )
260+ if ( _navMap . TileRects . Count != 0 )
250261 {
251- var rects = new ValueList < Vector2 > ( _navMap . TileRects . Count * 8 ) ;
262+ TileRectsToDraw . Clear ( ) ;
263+ TileRectsToDraw . EnsureCapacity ( _navMap . TileRects . Count * 8 ) ;
252264
253265 foreach ( var ( lt , rb ) in _navMap . TileRects )
254266 {
255- var leftTop = new Vector2 ( lt . X , - lt . Y ) ;
256- var rightBottom = new Vector2 ( rb . X , - rb . Y ) ;
267+ var leftTop = lt with { Y = - lt . Y } ;
268+ var rightBottom = rb with { Y = - rb . Y } ;
257269
258270 var rightTop = new Vector2 ( rightBottom . X , leftTop . Y ) ;
259271 var leftBottom = new Vector2 ( leftTop . X , rightBottom . Y ) ;
260272
261- rects . Add ( leftTop ) ;
262- rects . Add ( rightTop ) ;
263- rects . Add ( rightTop ) ;
264- rects . Add ( rightBottom ) ;
265- rects . Add ( rightBottom ) ;
266- rects . Add ( leftBottom ) ;
267- rects . Add ( leftBottom ) ;
268- rects . Add ( leftTop ) ;
273+ TileRectsToDraw . Add ( leftTop ) ;
274+ TileRectsToDraw . Add ( rightTop ) ;
275+ TileRectsToDraw . Add ( rightTop ) ;
276+ TileRectsToDraw . Add ( rightBottom ) ;
277+ TileRectsToDraw . Add ( rightBottom ) ;
278+ TileRectsToDraw . Add ( leftBottom ) ;
279+ TileRectsToDraw . Add ( leftBottom ) ;
280+ TileRectsToDraw . Add ( leftTop ) ;
269281 }
270282
271- if ( rects . Count > 0 )
272- handle . DrawPrimitives ( DrawPrimitiveTopology . LineList , rects . Span , wallsRGB ) ;
283+ if ( TileRectsToDraw . Count > 0 )
284+ handle . DrawPrimitives ( DrawPrimitiveTopology . LineList , TileRectsToDraw , wallsRgb ) ;
273285 }
274286 }
275287 // Carpmosia-end - AI Navmap
276- }
288+ }
0 commit comments