@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