56 lines
1.1 KiB
GDScript
56 lines
1.1 KiB
GDScript
extends Node
|
|
class_name Room
|
|
|
|
#@export var visual: TextureRect
|
|
|
|
# One entry per valid combination
|
|
# Key = sorted list of enemy IDs + their pose index
|
|
#@export var render_map: Dictionary
|
|
|
|
@export var enemies: Array[cCharacter] # all AI that *could* appear here
|
|
@export var room_id: Global.LocationID
|
|
var last_key := ""
|
|
var texture: Texture2D
|
|
var render_map: Dictionary
|
|
|
|
#func _process(_delta):
|
|
#var key := _build_render_key()
|
|
#if key == last_key:
|
|
#return
|
|
#
|
|
#last_key = key
|
|
#
|
|
#
|
|
#if render_map.has(key):
|
|
#visual.texture = render_map[key]
|
|
#else:
|
|
#visual.texture = null # or fallback
|
|
|
|
func _process(_delta):
|
|
var key := _build_render_key()
|
|
if key == null: texture = render_map[""]
|
|
|
|
if key == last_key:
|
|
return
|
|
#
|
|
last_key = key
|
|
#
|
|
if render_map.has(key):
|
|
texture = render_map[key]
|
|
else:
|
|
texture = render_map["default"]
|
|
|
|
func getTexture() -> Texture2D:
|
|
return texture
|
|
|
|
func _build_render_key() -> String:
|
|
var entries := []
|
|
|
|
for enemy in enemies:
|
|
var presence : int = enemy.get_room_presence(room_id)
|
|
if presence >= 0:
|
|
entries.append("%s:%d" % [enemy.name, presence])
|
|
|
|
entries.sort()
|
|
return "|".join(entries)
|