extends Node2D # World renderer — manages all visual representation from GameState # Attached to the World node in main.tscn # Render order (scene tree): TileMapLayer -> FogOverlay -> Entities @onready var tile_renderer = $TileMapLayer @onready var fog_renderer = $FogOverlay @onready var entity_renderer = $Entities var _last_tick: int = -1 func _ready() -> void: print("WorldRenderer: Initialized") # Called each frame to update visuals from game state. # Uses tick-based invalidation — re-renders all layers when a new snapshot arrives. func update_from_state() -> void: var tick := GameState.current_tick if tick == _last_tick: return _last_tick = tick # Update tiles (may include new chunks or modified tiles) if tile_renderer and tile_renderer.has_method("update_tiles"): if GameState.visible_tiles.size() > 0: tile_renderer.update_tiles(GameState.visible_tiles) if fog_renderer and fog_renderer.has_method("register_tile_positions"): fog_renderer.register_tile_positions(GameState.visible_tiles) # Update fog overlay from visibility data if fog_renderer and fog_renderer.has_method("update_fog"): fog_renderer.update_fog(GameState.visible_positions, GameState.player_position) # Update entity sprites if entity_renderer and entity_renderer.has_method("update_entities"): entity_renderer.update_entities(GameState.visible_entities)