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 _tiles_dirty: bool = true func _ready() -> void: print("WorldRenderer: Initialized") # Called each frame to update visuals from game state func update_from_state() -> void: # Update tiles (only when tile data changes) if tile_renderer and tile_renderer.has_method("update_tiles"): if _tiles_dirty and GameState.visible_tiles.size() > 0: tile_renderer.update_tiles(GameState.visible_tiles) # Register tile positions with fog renderer for coverage if fog_renderer and fog_renderer.has_method("register_tile_positions"): fog_renderer.register_tile_positions(GameState.visible_tiles) _tiles_dirty = false # Update fog overlay 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) # Mark tiles as needing re-render (call when tile data changes significantly) func invalidate_tiles() -> void: _tiles_dirty = true