Fog of war
This commit is contained in:
43
nodes/fog_renderer.gd
Normal file
43
nodes/fog_renderer.gd
Normal file
@@ -0,0 +1,43 @@
|
||||
class_name FogRenderer
|
||||
extends Node2D
|
||||
|
||||
## Renders a fog/cave texture over every tile inside the map's bounding rect
|
||||
## that is not part of any room. Future: drive visibility from map state.
|
||||
|
||||
const TILE_SIZE := 100.0
|
||||
const FOG_RECT := Rect2(53, 53, 100, 100)
|
||||
|
||||
@export var atlas_texture: Texture2D
|
||||
|
||||
|
||||
func draw_fog_for_layout(map_layout: MapLayout) -> void:
|
||||
_clear()
|
||||
if not map_layout or not atlas_texture:
|
||||
return
|
||||
for y in map_layout.size.y:
|
||||
for x in map_layout.size.x:
|
||||
var tile := Vector2i(x, y)
|
||||
if map_layout.is_tile_valid(tile):
|
||||
continue
|
||||
_create_fog_sprite(Vector2(tile) * TILE_SIZE)
|
||||
|
||||
|
||||
func _clear() -> void:
|
||||
for child in get_children():
|
||||
child.queue_free()
|
||||
|
||||
|
||||
func _create_fog_sprite(pos: Vector2) -> void:
|
||||
var atlas := AtlasTexture.new()
|
||||
atlas.atlas = atlas_texture
|
||||
atlas.region = FOG_RECT
|
||||
|
||||
var sprite := Sprite2D.new()
|
||||
sprite.texture = atlas
|
||||
sprite.centered = false
|
||||
sprite.position = pos
|
||||
sprite.scale = Vector2(
|
||||
TILE_SIZE / FOG_RECT.size.x,
|
||||
TILE_SIZE / FOG_RECT.size.y,
|
||||
)
|
||||
add_child(sprite)
|
||||
Reference in New Issue
Block a user