104 lines
2.5 KiB
GDScript
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()
|