feat: add names to dragons

This commit is contained in:
Gerard Gascón 2025-04-08 23:38:27 +02:00
parent f07b28d2dc
commit ca4959af32
10 changed files with 91 additions and 15 deletions

View file

@ -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()

View file

@ -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"]

View file

@ -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

View file

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

View file

@ -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)

View file

@ -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()

View file

@ -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"]

View file

@ -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)

View file

@ -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()

View file

@ -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)