Review feedback from Hoshe + Tyre on PR #8: - Extract shared TILE_SIZE to Constants class_name (Tyre #5, Hoshe #7) - Fix tile invalidation: detect tile/visibility count changes instead of one-shot dirty flag, supports chunk loading (Tyre #3, #4) - Fog dirty tracking: only re-render when visible_positions changes - Add bounds warning for unknown tile types (Hoshe #1) - Add player-not-found warning in GameState (Hoshe #5) - Use Image.fill_rect() instead of pixel loops (Tyre #10) - Document _player_pos as reserved for fog decay #113 (Tyre #6) - Add TODO(#130) for D-033 relationship colors (Hoshe #3, Tyre #8) - Add class_name to EntityRenderer, FogRenderer, TileRenderer - 20 new rendering tests (D-030 Layer 1): entity lifecycle, fog registration, tile type mapping, snapshot completeness, constants - 65 total tests passing, 0 failures Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
39 lines
1.5 KiB
GDScript
39 lines
1.5 KiB
GDScript
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)
|