La-Torreta-del-Drac/scenes/dragon_editor/dragon_editor.gd
2025-04-23 01:28:41 +02:00

104 lines
2.5 KiB
GDScript

extends Window
class_name DragonEditor
@onready var hat: AnimatedSprite2D = $CanvasLayer/Dragon/Hat
@onready var shirt: AnimatedSprite2D = $CanvasLayer/Dragon/Shirt
@onready var decor: AnimatedSprite2D = $CanvasLayer/Dragon/Decor
@onready var dragon: AnimatedSprite2D = $CanvasLayer/Dragon
@export var hat_outfits: DragonOutfit
@export var shirt_outfits: DragonOutfit
@export var decor_outfits: DragonOutfit
@export var dragon_colors: DragonOutfit
var _save_load: SaveLoad
@onready var dragon_name: LineEdit = $CanvasLayer/NameLabel/LineEdit
@onready var dragger: DraggableWindow = $CanvasLayer/Dragger
signal on_create_dragon(properties: DragonProperties)
func set_save_load(save_load: SaveLoad):
_save_load = save_load
func _ready() -> void:
hat.visible = false
shirt.visible = false
decor.visible = false
dragon.play('idle')
hat_outfits.reset()
shirt_outfits.reset()
decor_outfits.reset()
dragon_colors.reset()
dragger.on_drag.connect(_on_drag)
func _on_drag(offset: Vector2i):
position += offset
func _on_next_color_pressed() -> void:
_pick_next_animation(dragon, dragon_colors)
func _on_previous_color_pressed() -> void:
_pick_previous_animation(dragon, dragon_colors)
func _on_change_hat_pressed() -> void:
_pick_next_animation(hat, hat_outfits)
func _on_change_shirt_pressed() -> void:
_pick_next_animation(shirt, shirt_outfits)
func _on_change_shoes_pressed() -> void:
_pick_next_animation(decor, decor_outfits)
func _pick_next_animation(sprite: AnimatedSprite2D, outfits: DragonOutfit):
var animation: SpriteFrames = outfits.pick_next()
if animation == null:
sprite.visible = false
return
sprite.visible = true
sprite.set_sprite_frames(animation)
_restart_animations()
func _restart_animations():
hat.set_frame(0)
hat.play('idle')
shirt.set_frame(0)
shirt.play('idle')
decor.set_frame(0)
decor.play('idle')
dragon.set_frame(0)
dragon.play('idle')
func _pick_previous_animation(sprite: AnimatedSprite2D, outfits: DragonOutfit):
var animation: SpriteFrames = outfits.pick_previous()
if animation == null:
sprite.visible = false
return
sprite.visible = true
sprite.set_sprite_frames(animation)
_restart_animations()
func _on_create_pressed() -> void:
if dragon_name.text.is_empty():
return
var properties = DragonProperties.new(dragon_name.text, _save_load.get_tower_name(), dragon_colors.get_current_index(), hat_outfits.get_current_index(), shirt_outfits.get_current_index(), decor_outfits.get_current_index())
on_create_dragon.emit(properties)
queue_free()
func _on_close_pressed() -> void:
queue_free()