75 lines
1.7 KiB
GDScript3
75 lines
1.7 KiB
GDScript3
|
@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
|