48 lines
1.2 KiB
GDScript
48 lines
1.2 KiB
GDScript
@tool
|
|
class_name EntityLoader extends Node2D
|
|
|
|
@export var entity_config: EntityConfig:
|
|
set(value):
|
|
entity_config = value
|
|
_reload()
|
|
|
|
@onready var sprite2d = %AnimatedSprite2D as AnimatedSprite2D
|
|
|
|
|
|
func _ready() -> void:
|
|
if GlobalConfig.DEBUG:
|
|
var label = DebugLabel.new()
|
|
add_child(label)
|
|
label.name = "DebugLabel"
|
|
_reload()
|
|
|
|
|
|
func _reload() -> void:
|
|
if not entity_config or not sprite2d:
|
|
return
|
|
var success := false
|
|
# Load current state according to entity config
|
|
if entity_config.entity_state_default:
|
|
sprite2d.play(entity_config.entity_state_default.animation)
|
|
success = true
|
|
# 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
|
|
sprite2d.play("placeholder")
|
|
var frames = sprite2d.sprite_frames as SpriteFrames
|
|
var first_frame_size = frames.get_frame_texture("placeholder", 0).get_size()
|
|
sprite2d.scale = entity_config.placeholder_size / first_frame_size
|
|
print("scale:", sprite2d.scale)
|
|
sprite2d.offset = entity_config.offset
|
|
var label = get_node_or_null("DebugLabel")
|
|
if label:
|
|
label.text = ("[" + entity_config.entity_name + "]" + entity_config.entity_title)
|
|
label.modulate = Color.GREEN
|