feat: added town name setting

This commit is contained in:
Gerard Gascón 2025-04-14 12:46:25 +02:00
parent a8b292aa03
commit fc177656c5
8 changed files with 134 additions and 24 deletions

View file

@ -1,7 +1,6 @@
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
@ -12,24 +11,26 @@ class_name DragonEditor
@export var decor_outfits: DragonOutfit
@export var dragon_colors: DragonOutfit
var _save_load: SaveLoad = SaveLoad.new()
@onready var dragon_name: LineEdit = $CanvasLayer/NameLabel/LineEdit
@onready var dragger: DraggableWindow = $CanvasLayer/Dragger
signal on_create_dragon(properties: DragonProperties)
func _ready() -> void:
_save_load.load()
hat.visible = false
shirt.visible = false
decor.visible = false
dragon.play('idle')
hat_outfits.index = 0
shirt_outfits.index = 0
decor_outfits.index = 0
dragon_colors.index = 0
hat_outfits.reset()
shirt_outfits.reset()
decor_outfits.reset()
dragon_colors.reset()
dragger.on_drag.connect(_on_drag)
@ -64,7 +65,18 @@ func _pick_next_animation(sprite: AnimatedSprite2D, outfits: DragonOutfit):
return
sprite.visible = true
sprite.set_sprite_frames(animation)
sprite.play('idle')
_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):
@ -74,14 +86,14 @@ func _pick_previous_animation(sprite: AnimatedSprite2D, outfits: DragonOutfit):
return
sprite.visible = true
sprite.set_sprite_frames(animation)
sprite.play('idle')
_restart_animations()
func _on_create_pressed() -> void:
if dragon_name.text.is_empty():
return
var properties = DragonProperties.new(dragon_name.text, "tower", hat_outfits.index, shirt_outfits.index, decor_outfits.index, dragon_colors.index)
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()

View file

@ -4,6 +4,7 @@ class_name GameManager
@export var dragon_template: PackedScene
@export var dragon_ingame: PackedScene
@export var name_setter: PackedScene
@export var dragon_spots: Array[Node2D]
@export var clock: PackedScene
@ -32,15 +33,31 @@ func _ready():
await get_tree().process_frame
move_window_to_bottom_right()
_load_game()
if _save_load.get_tower_name() == "":
_show_name_setter_screen()
_queue_dragon_instantiation()
var clock_window: Window = clock.instantiate()
add_child(clock_window)
func _show_name_setter_screen():
var setter: NameSetter = name_setter.instantiate()
setter.set_save_load(_save_load)
add_child(setter)
var display_index: int = DisplayServer.window_get_current_screen()
var work_area_position: Vector2i = DisplayServer.screen_get_usable_rect(display_index).position
var work_area_size: Vector2i = DisplayServer.screen_get_usable_rect(display_index).size
var new_position: Vector2i = work_area_position + Vector2i(work_area_size.x / 2.0 - setter.size.x / 2.0, work_area_size.y / 2.0 - setter.size.y / 2.0)
setter.position = new_position
func _queue_dragon_instantiation():
await get_tree().create_timer(rng.randf_range(min_dragon_instantiation_time, max_dragon_instantiation_time)).timeout
_instantiate_random_dragon()
if _save_load.get_tower_name() != "":
_instantiate_random_dragon()
_queue_dragon_instantiation()
@ -50,7 +67,7 @@ func _instantiate_random_dragon():
return
for i in range(5):
dragon_sharing.receive("potato")
dragon_sharing.receive(_save_load.get_tower_name())
var dragon: DragonProperties = await dragon_sharing.on_dragon_received
if dragon == null:
return

View file

@ -1,10 +1,11 @@
[gd_scene load_steps=13 format=3 uid="uid://ctytpqaed0yqx"]
[gd_scene load_steps=14 format=3 uid="uid://ctytpqaed0yqx"]
[ext_resource type="Script" uid="uid://3kyt3shje5r1" path="res://scenes/main.gd" id="1_sugp2"]
[ext_resource type="PackedScene" uid="uid://c7nfcgjxqeg7l" path="res://scenes/window/dragon_popup.tscn" id="2_jyhfs"]
[ext_resource type="PackedScene" uid="uid://bj5ptaniasaaj" path="res://scenes/clock/clock.tscn" id="4_a8y0u"]
[ext_resource type="PackedScene" uid="uid://miutbdsgccd1" path="res://scenes/dragons/dragon.tscn" id="4_jyhfs"]
[ext_resource type="Script" uid="uid://cj4l3a6a8ro0r" path="res://scenes/create_button.gd" id="4_tbgi4"]
[ext_resource type="PackedScene" uid="uid://cdlipr8l1k38a" path="res://scenes/name_setter/name_setter.tscn" id="4_trceg"]
[ext_resource type="PackedScene" uid="uid://fut42ruut302" path="res://scenes/dragon_editor/dragon_editor.tscn" id="5_tefeu"]
[ext_resource type="Script" uid="uid://oc6mw86npbii" path="res://scenes/list_button.gd" id="9_choun"]
[ext_resource type="PackedScene" uid="uid://tubxrqxjic6r" path="res://scenes/dragon_list/dragon_list.tscn" id="10_ya4ey"]
@ -17,6 +18,7 @@
script = ExtResource("1_sugp2")
dragon_template = ExtResource("2_jyhfs")
dragon_ingame = ExtResource("4_jyhfs")
name_setter = ExtResource("4_trceg")
dragon_spots = [NodePath("DragonSpot1"), NodePath("DragonSpot2"), NodePath("DragonSpot3")]
clock = ExtResource("4_a8y0u")
min_dragon_instantiation_time = 2.0

View file

@ -0,0 +1,20 @@
extends Window
class_name NameSetter
var save_load: SaveLoad
@onready var name_edit: LineEdit = $Name
func _ready() -> void:
pass
func set_save_load(save_load: SaveLoad) -> void:
self.save_load = save_load
func _on_submit_pressed() -> void:
if not name_edit.text.is_empty():
save_load.set_tower_name(name_edit.text)
queue_free()

View file

@ -0,0 +1 @@
uid://drulv5ptupx2w

View file

@ -0,0 +1,38 @@
[gd_scene load_steps=2 format=3 uid="uid://cdlipr8l1k38a"]
[ext_resource type="Script" uid="uid://drulv5ptupx2w" path="res://scenes/name_setter/name_setter.gd" id="1_f3gk5"]
[node name="NameSetter" type="Window"]
position = Vector2i(0, 36)
size = Vector2i(500, 250)
unresizable = true
always_on_top = true
script = ExtResource("1_f3gk5")
[node name="Instructions" type="Label" parent="."]
offset_right = 500.0
offset_bottom = 146.0
text = "En aquesta torreta, present a la cantonada del teu escriptori, hi viuran uns dracs que tacompanyaran en el teu dia a dia. Fins i tot et vindran a visitar dracs d'altres torretes!
Per començar, posa un nom a la teva torreta.
És el primer pas per fer-la teva."
horizontal_alignment = 1
autowrap_mode = 2
[node name="Name" type="LineEdit" parent="."]
offset_left = 84.0
offset_top = 163.0
offset_right = 423.0
offset_bottom = 214.0
placeholder_text = "Nom"
alignment = 1
max_length = 16
[node name="Button" type="Button" parent="."]
offset_left = 220.0
offset_top = 218.0
offset_right = 287.0
offset_bottom = 249.0
text = "Assigna"
[connection signal="pressed" from="Button" to="." method="_on_submit_pressed"]