From ca4959af32c5f6a3f985b18045afb60dac81b84b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gerard=20Gasc=C3=B3n?= <52170489+GerardGascon@users.noreply.github.com> Date: Tue, 8 Apr 2025 23:38:27 +0200 Subject: [PATCH] feat: add names to dragons --- scenes/dragon_editor/dragon_editor.gd | 7 +++++-- scenes/dragon_editor/dragon_editor.tscn | 13 +++++++++++- scenes/dragon_editor/line_edit.gd | 11 ++++++++++ scenes/dragon_editor/line_edit.gd.uid | 1 + scenes/dragons/dragon_entity_dragger.gd | 8 ++++++-- scenes/dragons/dragon_sprite.gd | 17 ++++++++++++++++ scenes/dragons/dragon_sprite.tscn | 27 +++++++++++++++++++++++-- scenes/main.gd | 11 +++++----- scenes/window/dragon.gd | 4 ++++ src/dragon_instantiator.gd | 7 ++++--- 10 files changed, 91 insertions(+), 15 deletions(-) create mode 100644 scenes/dragon_editor/line_edit.gd create mode 100644 scenes/dragon_editor/line_edit.gd.uid diff --git a/scenes/dragon_editor/dragon_editor.gd b/scenes/dragon_editor/dragon_editor.gd index e4c3a4f..2185701 100644 --- a/scenes/dragon_editor/dragon_editor.gd +++ b/scenes/dragon_editor/dragon_editor.gd @@ -10,8 +10,9 @@ class_name DragonEditor @export var shirt_outfits: DragonOutfit @export var shoes_outfits: DragonOutfit +@onready var dragon_name: LineEdit = $CanvasLayer/LineEdit -signal on_create_dragon(hat: Texture2D, shirt: Texture2D, shoes: Texture2D) +signal on_create_dragon(hat: Texture2D, shirt: Texture2D, shoes: Texture2D, dragon_name: String) func _ready() -> void: @@ -37,5 +38,7 @@ func _on_change_shoes_pressed() -> void: func _on_create_pressed() -> void: - on_create_dragon.emit(hat.texture, shirt.texture, shoes.texture) + if dragon_name.text.is_empty(): + return + on_create_dragon.emit(hat.texture, shirt.texture, shoes.texture, dragon_name.text) queue_free() diff --git a/scenes/dragon_editor/dragon_editor.tscn b/scenes/dragon_editor/dragon_editor.tscn index 7538f5e..d705d17 100644 --- a/scenes/dragon_editor/dragon_editor.tscn +++ b/scenes/dragon_editor/dragon_editor.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=9 format=3 uid="uid://fut42ruut302"] +[gd_scene load_steps=10 format=3 uid="uid://fut42ruut302"] [ext_resource type="Script" uid="uid://bfuos2kgfgber" path="res://scenes/dragon_editor/dragon_editor.gd" id="1_8vkll"] [ext_resource type="Texture2D" uid="uid://fdqnc2qrrvn1" path="res://assets/sprites/icon.svg" id="2_un5ur"] @@ -8,6 +8,7 @@ [ext_resource type="Resource" uid="uid://ba5684xylts3f" path="res://assets/outfits/shoes.tres" id="4_1ivi1"] [ext_resource type="Texture2D" uid="uid://dc2uk6tqtwl4n" path="res://assets/sprites/shirt.png" id="4_6sr44"] [ext_resource type="Texture2D" uid="uid://8srlwinjr3tt" path="res://assets/sprites/shoes.png" id="5_wby0j"] +[ext_resource type="Script" uid="uid://mhudiyt5gnt1" path="res://scenes/dragon_editor/line_edit.gd" id="9_xhgxf"] [node name="DragonEditor" type="Window"] title = "Dragon Editor" @@ -116,6 +117,16 @@ grow_vertical = 2 texture = ExtResource("5_wby0j") expand_mode = 1 +[node name="LineEdit" type="LineEdit" parent="CanvasLayer"] +offset_left = 59.0 +offset_top = 372.0 +offset_right = 250.0 +offset_bottom = 403.0 +placeholder_text = "NOM" +alignment = 1 +max_length = 8 +script = ExtResource("9_xhgxf") + [connection signal="close_requested" from="." to="." method="_on_close_requested"] [connection signal="pressed" from="CanvasLayer/VBoxContainer/change_hat" to="." method="_on_change_hat_pressed"] [connection signal="pressed" from="CanvasLayer/VBoxContainer/change_shirt" to="." method="_on_change_shirt_pressed"] diff --git a/scenes/dragon_editor/line_edit.gd b/scenes/dragon_editor/line_edit.gd new file mode 100644 index 0000000..32e90f0 --- /dev/null +++ b/scenes/dragon_editor/line_edit.gd @@ -0,0 +1,11 @@ +extends LineEdit + + +func _ready() -> void: + connect("text_changed", _text_to_upper) + + +func _text_to_upper(new_text: String): + var last_caret_column = caret_column + text = new_text.to_upper() + caret_column = last_caret_column diff --git a/scenes/dragon_editor/line_edit.gd.uid b/scenes/dragon_editor/line_edit.gd.uid new file mode 100644 index 0000000..e53df8b --- /dev/null +++ b/scenes/dragon_editor/line_edit.gd.uid @@ -0,0 +1 @@ +uid://mhudiyt5gnt1 diff --git a/scenes/dragons/dragon_entity_dragger.gd b/scenes/dragons/dragon_entity_dragger.gd index 3a614d7..04fe1ff 100644 --- a/scenes/dragons/dragon_entity_dragger.gd +++ b/scenes/dragons/dragon_entity_dragger.gd @@ -4,7 +4,7 @@ class_name DragonEntity @export var dragon: DragonSprite -signal on_pick(position: Vector2, hat: Texture2D, shirt: Texture2D, shoes: Texture2D) +signal on_pick(position: Vector2, hat: Texture2D, shirt: Texture2D, shoes: Texture2D, dragon_name: String) func _ready() -> void: @@ -15,9 +15,13 @@ func _input_event(viewport, event, shape_idx) -> void: if event is InputEventMouseButton \ and event.button_index == MOUSE_BUTTON_LEFT \ and event.is_pressed(): - on_pick.emit(position, dragon.hat.texture, dragon.shirt.texture, dragon.shoes.texture) + on_pick.emit(position, dragon.hat.texture, dragon.shirt.texture, dragon.shoes.texture, dragon.name_label.text) queue_free() func dress(hat: Texture2D, shirt: Texture2D, shoes: Texture2D): dragon.dress(hat, shirt, shoes) + + +func set_dragon_name(dragon_name: String): + dragon.set_dragon_name(dragon_name) diff --git a/scenes/dragons/dragon_sprite.gd b/scenes/dragons/dragon_sprite.gd index 238e714..b1ce12e 100644 --- a/scenes/dragons/dragon_sprite.gd +++ b/scenes/dragons/dragon_sprite.gd @@ -5,9 +5,26 @@ class_name DragonSprite @export var hat: Sprite2D @export var shirt: Sprite2D @export var shoes: Sprite2D +@export var name_label: Label + + +func _ready() -> void: + name_label.hide() func dress(hat: Texture2D, shirt: Texture2D, shoes: Texture2D): self.hat.texture = hat self.shirt.texture = shirt self.shoes.texture = shoes + + +func set_dragon_name(dragon_name: String): + name_label.text = dragon_name + + +func _on_area_2d_mouse_entered() -> void: + name_label.show() + + +func _on_area_2d_mouse_exited() -> void: + name_label.hide() diff --git a/scenes/dragons/dragon_sprite.tscn b/scenes/dragons/dragon_sprite.tscn index 49889d2..a14eaae 100644 --- a/scenes/dragons/dragon_sprite.tscn +++ b/scenes/dragons/dragon_sprite.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=6 format=3 uid="uid://baa8gpicw2yg0"] +[gd_scene load_steps=7 format=3 uid="uid://baa8gpicw2yg0"] [ext_resource type="Texture2D" uid="uid://fdqnc2qrrvn1" path="res://assets/sprites/icon.svg" id="1_ixu8j"] [ext_resource type="Script" uid="uid://bjiap06gs02j" path="res://scenes/dragons/dragon_sprite.gd" id="1_oaoux"] @@ -6,11 +6,21 @@ [ext_resource type="Texture2D" uid="uid://dc2uk6tqtwl4n" path="res://assets/sprites/shirt.png" id="3_oaoux"] [ext_resource type="Texture2D" uid="uid://8srlwinjr3tt" path="res://assets/sprites/shoes.png" id="4_yf7bj"] -[node name="Dragon" type="Node2D" node_paths=PackedStringArray("hat", "shirt", "shoes")] +[sub_resource type="RectangleShape2D" id="RectangleShape2D_oaoux"] +size = Vector2(128, 129) + +[node name="Dragon" type="Node2D" node_paths=PackedStringArray("hat", "shirt", "shoes", "name_label")] script = ExtResource("1_oaoux") hat = NodePath("Sprite/Hat") shirt = NodePath("Sprite/Shirt") shoes = NodePath("Sprite/Shoes") +name_label = NodePath("Label") + +[node name="Area2D" type="Area2D" parent="."] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] +position = Vector2(64, 64.5) +shape = SubResource("RectangleShape2D_oaoux") [node name="Sprite" type="Sprite2D" parent="."] position = Vector2(0, 1) @@ -34,3 +44,16 @@ position = Vector2(48, 39) scale = Vector2(0.353516, 0.353516) texture = ExtResource("4_yf7bj") offset = Vector2(64, 64) + +[node name="Label" type="Label" parent="."] +offset_top = 105.0 +offset_right = 128.0 +offset_bottom = 128.0 +theme_override_colors/font_color = Color(1, 1, 1, 1) +theme_override_colors/font_outline_color = Color(0, 0, 0, 1) +theme_override_constants/outline_size = 5 +text = "AAAAAAAA" +horizontal_alignment = 1 + +[connection signal="mouse_entered" from="Area2D" to="." method="_on_area_2d_mouse_entered"] +[connection signal="mouse_exited" from="Area2D" to="." method="_on_area_2d_mouse_exited"] diff --git a/scenes/main.gd b/scenes/main.gd index 78c2337..b72a140 100644 --- a/scenes/main.gd +++ b/scenes/main.gd @@ -30,22 +30,23 @@ func move_window_to_bottom_right(): DisplayServer.window_set_position(new_position) -func add_dragon(hat: Texture2D, shirt: Texture2D, shoes: Texture2D): +func add_dragon(hat: Texture2D, shirt: Texture2D, shoes: Texture2D, dragon_name: String): # TODO: Check for free positon - _instantiate_dragon_ingame(dragon_spots[0].position, hat, shirt, shoes) + _instantiate_dragon_ingame(dragon_spots[0].position, hat, shirt, shoes, dragon_name) # TODO: Add to dragon library -func _instantiate_dragon_ingame(position: Vector2, hat: Texture2D, shirt: Texture2D, shoes: Texture2D): +func _instantiate_dragon_ingame(position: Vector2, hat: Texture2D, shirt: Texture2D, shoes: Texture2D, dragon_name: String): var dragon: DragonEntity = dragon_ingame.instantiate() dragon.dress(hat, shirt, shoes) + dragon.set_dragon_name(dragon_name) add_child(dragon) dragon.position = position dragon.on_pick.connect(_pick_dragon) -func _pick_dragon(position: Vector2, hat: Texture2D, shirt: Texture2D, shoes: Texture2D): - var dragon: Dragon = _instantiator.instantiate(position, hat, shirt, shoes) +func _pick_dragon(position: Vector2, hat: Texture2D, shirt: Texture2D, shoes: Texture2D, dragon_name: String): + var dragon: Dragon = _instantiator.instantiate(position, hat, shirt, shoes, dragon_name) dragon.place_back.connect(_dragon_place_back) add_child(dragon) diff --git a/scenes/window/dragon.gd b/scenes/window/dragon.gd index 38261d4..6934233 100644 --- a/scenes/window/dragon.gd +++ b/scenes/window/dragon.gd @@ -44,6 +44,10 @@ func dress(hat: Texture2D, shirt: Texture2D, shoes: Texture2D): dragon.dress(hat, shirt, shoes) +func set_dragon_name(dragon_name: String): + dragon.set_dragon_name(dragon_name) + + func _move_to_target(delta: float): if _actual_position.distance_to(_target_pos) > 10.0: var direction: Vector2 = (_target_pos - _actual_position).normalized() diff --git a/src/dragon_instantiator.gd b/src/dragon_instantiator.gd index 1336999..cd6bd6d 100644 --- a/src/dragon_instantiator.gd +++ b/src/dragon_instantiator.gd @@ -10,9 +10,9 @@ func _init(dragon: PackedScene, viewport: Viewport, window: Window) -> void: _dragon_template = dragon -func instantiate(position: Vector2, hat: Texture2D, shirt: Texture2D, shoes: Texture2D) -> Node: +func instantiate(position: Vector2, hat: Texture2D, shirt: Texture2D, shoes: Texture2D, dragon_name: String) -> Node: var relative_position: Vector2i = _calculate_relative_position(position) - return _instantiate_dragon(relative_position, hat, shirt, shoes) + return _instantiate_dragon(relative_position, hat, shirt, shoes, dragon_name) func _calculate_window_scale() -> Vector2: @@ -27,7 +27,7 @@ func _calculate_relative_position(position: Vector2) -> Vector2i: return Vector2i(Vector2(position) * scale) -func _instantiate_dragon(relative_position: Vector2i, hat: Texture2D, shirt: Texture2D, shoes: Texture2D) -> Node: +func _instantiate_dragon(relative_position: Vector2i, hat: Texture2D, shirt: Texture2D, shoes: Texture2D, dragon_name: String) -> Node: var dragon: Dragon = _dragon_template.instantiate() var window_position: Vector2i = DisplayServer.window_get_position() @@ -35,6 +35,7 @@ func _instantiate_dragon(relative_position: Vector2i, hat: Texture2D, shirt: Tex dragon.position = window_position + relative_position - dragon.size / 2 dragon.dress(hat, shirt, shoes) + dragon.set_dragon_name(dragon_name) var size: float = _calculate_window_scale().y dragon.set_scale(size)