Stop redrawing what only needs moving
Reviewed against the rule issues #6 and #10 set for the buildings: geometry is rasterised once and thereafter only moved, scaled or faded, because every NeonDraw call expands into four antialiased polylines. The planet visuals never got that refactor. The black hole rebuilt ten glowing paths of twenty-five points every frame - forty polylines - to spin five rings; each ring is a NeonPiece that rotates now. The research lab spent nine draw calls a frame, eight of them fixed geometry, to turn one dish and blink six lights; the dish is a child that rotates and the lights a child whose modulate breathes. The gas giant's bands genuinely deform, so they still draw, but its constant rim moved out to a child. NeonPiece gained add_path, which it needed for open arcs. And I had broken the rule myself. ScannerGuidance re-queued a redraw of its arrow every frame for a colour that changes only with the destination - and it runs with PROCESS_MODE_ALWAYS, so it was re-tessellating through every dialog that stops the rest of the game. Guarded, and pinned by a test that counts CanvasItem's own draw signal: 36 rasterisations in 0.6s before, one after. Two smaller things from the same pass: the station menu drew its condition bar by hand where the ship lab already uses a ProgressBar node, so it uses one now and its _draw is gone; and station/upkeep refreshes were wired into _refresh_garrison(), which nothing but a test calls, so both menus showed whatever was true when they opened. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019AJMdB7iuHuLFZM1aBu3GD
This commit is contained in:
parent
54b883d545
commit
7d1a584c15
11 changed files with 350 additions and 78 deletions
|
|
@ -160,6 +160,14 @@ func _process(delta: float) -> void:
|
|||
_refresh_lab()
|
||||
if transfer_menu.visible:
|
||||
transfer_menu.refresh()
|
||||
# Both of these move on their own while they are open - a transporter
|
||||
# wears down, an office starves, the fleet changes under the bill - so
|
||||
# they follow the same rule as the menus above: refreshed while visible,
|
||||
# untouched when not.
|
||||
if station_menu.visible:
|
||||
station_menu.refresh()
|
||||
if upkeep_menu.visible:
|
||||
upkeep_menu.refresh()
|
||||
if world_map.visible or _menu_is_open():
|
||||
_clear_detected_context()
|
||||
return
|
||||
|
|
@ -817,8 +825,6 @@ func _layout_hangar() -> void:
|
|||
|
||||
func _refresh_garrison() -> void:
|
||||
garrison_menu.refresh()
|
||||
station_menu.refresh()
|
||||
upkeep_menu.refresh()
|
||||
|
||||
|
||||
func _refresh_planning() -> void:
|
||||
|
|
|
|||
Loading…
Reference in a new issue