Files
settled-reach/client/scripts/rendering/world_renderer.gd
T
jpmschweitzerandClaude Opus 4.6 dcf887cb49 feat(client): add tile rendering, fog overlay, and camera smoothing
Sprint 2 rendering pipeline: tiles (#129), fog (#131), camera (#116).

- tile_renderer.gd: programmatic TileSet with floor/wall/door/object
  placeholder tiles, renders from snapshot tile data
- fog_renderer.gd: TileMapLayer overlay with three visibility states
  (visible/fog-edge/hidden), computed from visible_positions data
- Camera2D: smoothing enabled (speed 6.0), 2x zoom, locked to player
- game_state.gd: stores visible_tiles and visible_positions from snapshots
- sim_bridge.gd: test data with 8x8 room, corridor, and Manhattan
  distance visibility for development without server
- Scene render order: Tiles -> FogOverlay -> Entities
- Background clear color set to near-black for unexplored areas

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 23:48:02 +01:00

38 lines
1.4 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 _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