xiandie/manager/deploy/entity/entity_loader.gd

75 lines
1.7 KiB
GDScript3
Raw Normal View History

2024-12-24 11:24:55 +00:00
@tool
class_name EntityLoader extends Node2D
@export var state: String:
set(value):
state = value
_init_state()
@export var entity_config: EntityConfig:
set(value):
entity_config = value
entity_config.changed.connect(_reload)
# Load the entity config
_reload()
@export
var sprite_frames = preload("res://config/animation/player_sprite_frames.tres") as SpriteFrames
@onready var sprite2d = %AnimatedSprite2D as AnimatedSprite2D
func _ready() -> void:
if GlobalConfig.DEBUG:
add_child(DebugLabel.new())
func _reload() -> void:
# rm children
state = entity_config.initial_state
_init_state()
func _init_state() -> void:
if not entity_config:
return
## free unused children
# TODO Load current state according to entity config
var success := false
# Add placeholder if state's missing
if not success:
_init_placeholder()
else:
sprite2d.scale = entity_config.scale
func _init_placeholder():
if not entity_config.placeholder_size:
return
var sprite = get_node_or_null("PlaceholderSprite") as Node2D
if sprite:
sprite.visible = true
else:
sprite = Sprite2D.new()
add_child(sprite)
sprite.texture = placeholder_pic
sprite.scale = entity_config.placeholder_size / sprite.texture.get_size()
sprite.offset = entity_config.offset
sprite.name = "PlaceholderSprite"
var label = get_node_or_null("PlaceholderLabel") as Node2D
if label:
label.visible = true
else:
label = Label.new()
add_child(label)
label.text = "[" + entity_config.entity_name + "]" + entity_config.entity_title + ":" + state
label.modulate = Color.GREEN
label.name = "PlaceholderLabel"
func switch_state(state_name: String) -> void:
state = state_name
_init_state()
func action(action_name: String) -> void:
# TODO
pass