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_tile_count: int = 0 var _last_visible_count: int = 0 func _ready() -> void: print("WorldRenderer: Initialized") # Called each frame to update visuals from game state func update_from_state() -> void: var tile_count := GameState.visible_tiles.size() var visible_count := GameState.visible_positions.size() # Update tiles when tile data changes (new chunks loaded, D-012) if tile_renderer and tile_renderer.has_method("update_tiles"): if tile_count > 0 and tile_count != _last_tile_count: 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) _last_tile_count = tile_count # Update fog overlay when visibility changes if fog_renderer and fog_renderer.has_method("update_fog"): if visible_count != _last_visible_count: fog_renderer.update_fog(GameState.visible_positions, GameState.player_position) _last_visible_count = visible_count # Update entity sprites if entity_renderer and entity_renderer.has_method("update_entities"): entity_renderer.update_entities(GameState.visible_entities)