feat: menu overhaul
This commit is contained in:
parent
b17c7280ea
commit
f379dff516
16 changed files with 273 additions and 181 deletions
28
scenes/dragon_list/dragon/dragon.tscn
Normal file
28
scenes/dragon_list/dragon/dragon.tscn
Normal file
|
@ -0,0 +1,28 @@
|
|||
[gd_scene load_steps=6 format=3 uid="uid://cq3orf2ktmel0"]
|
||||
|
||||
[ext_resource type="SpriteFrames" uid="uid://duxxw4mfxql3c" path="res://assets/animations/dragons/verd.tres" id="1_o3jkx"]
|
||||
[ext_resource type="Script" uid="uid://b7knkhjgtdy4l" path="res://scenes/dragon_list/dragon/dragon_list_entry.gd" id="2_uckob"]
|
||||
[ext_resource type="SpriteFrames" uid="uid://ccxyplt2t7t6y" path="res://assets/animations/hats/barretina.tres" id="3_jl6px"]
|
||||
[ext_resource type="SpriteFrames" uid="uid://dsxhfu2ekw7j" path="res://assets/animations/shirts/traje.tres" id="4_v3rc7"]
|
||||
[ext_resource type="SpriteFrames" uid="uid://c5rqqy7b5ihi5" path="res://assets/animations/decor/rosa.tres" id="5_jpsrj"]
|
||||
|
||||
[node name="Dragon" type="AnimatedSprite2D" node_paths=PackedStringArray("color", "hat", "shirt", "decor")]
|
||||
sprite_frames = ExtResource("1_o3jkx")
|
||||
animation = &"idle"
|
||||
script = ExtResource("2_uckob")
|
||||
color = NodePath(".")
|
||||
hat = NodePath("Hat")
|
||||
shirt = NodePath("Shirt")
|
||||
decor = NodePath("Decor")
|
||||
|
||||
[node name="Hat" type="AnimatedSprite2D" parent="."]
|
||||
sprite_frames = ExtResource("3_jl6px")
|
||||
animation = &"idle"
|
||||
|
||||
[node name="Shirt" type="AnimatedSprite2D" parent="."]
|
||||
sprite_frames = ExtResource("4_v3rc7")
|
||||
animation = &"idle"
|
||||
|
||||
[node name="Decor" type="AnimatedSprite2D" parent="."]
|
||||
sprite_frames = ExtResource("5_jpsrj")
|
||||
animation = &"idle"
|
26
scenes/dragon_list/dragon/dragon_list_entry.gd
Normal file
26
scenes/dragon_list/dragon/dragon_list_entry.gd
Normal file
|
@ -0,0 +1,26 @@
|
|||
extends Node2D
|
||||
class_name DragonListEntry
|
||||
|
||||
|
||||
@export var color: AnimatedSprite2D
|
||||
@export var hat: AnimatedSprite2D
|
||||
@export var shirt: AnimatedSprite2D
|
||||
@export var decor: AnimatedSprite2D
|
||||
|
||||
|
||||
func play_animation(anim: String):
|
||||
color.set_frame(0)
|
||||
color.play(anim)
|
||||
hat.set_frame(0)
|
||||
hat.play(anim)
|
||||
shirt.set_frame(0)
|
||||
shirt.play(anim)
|
||||
decor.set_frame(0)
|
||||
decor.play(anim)
|
||||
|
||||
|
||||
func face_direction(left: bool):
|
||||
color.flip_h = not left
|
||||
hat.flip_h = not left
|
||||
shirt.flip_h = not left
|
||||
decor.flip_h = not left
|
1
scenes/dragon_list/dragon/dragon_list_entry.gd.uid
Normal file
1
scenes/dragon_list/dragon/dragon_list_entry.gd.uid
Normal file
|
@ -0,0 +1 @@
|
|||
uid://b7knkhjgtdy4l
|
|
@ -1,15 +1,9 @@
|
|||
[gd_scene load_steps=16 format=3 uid="uid://tubxrqxjic6r"]
|
||||
[gd_scene load_steps=10 format=3 uid="uid://tubxrqxjic6r"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://dm8d0ikf1n8qa" path="res://scenes/dragon_list/dragon_list_view.gd" id="1_q7g8i"]
|
||||
[ext_resource type="Resource" uid="uid://x063x858re3f" path="res://assets/outfits/hats.tres" id="2_1ytgk"]
|
||||
[ext_resource type="Texture2D" uid="uid://dceoy4417v83e" path="res://assets/sprites/ui/DP_UI_CharCreation_BG.png" id="3_3pkqp"]
|
||||
[ext_resource type="Resource" uid="uid://bsydervvb1jpe" path="res://assets/outfits/shirts.tres" id="3_74fyi"]
|
||||
[ext_resource type="SpriteFrames" uid="uid://duxxw4mfxql3c" path="res://assets/animations/dragons/verd.tres" id="4_1n46k"]
|
||||
[ext_resource type="Resource" uid="uid://dkm7d10c1lp2n" path="res://assets/outfits/decor.tres" id="4_b7eir"]
|
||||
[ext_resource type="Resource" uid="uid://c03ejnvavmcj5" path="res://assets/outfits/dragons.tres" id="5_cv2ce"]
|
||||
[ext_resource type="SpriteFrames" uid="uid://ccxyplt2t7t6y" path="res://assets/animations/hats/barretina.tres" id="5_u20w8"]
|
||||
[ext_resource type="SpriteFrames" uid="uid://dsxhfu2ekw7j" path="res://assets/animations/shirts/traje.tres" id="6_1ytgk"]
|
||||
[ext_resource type="SpriteFrames" uid="uid://c5rqqy7b5ihi5" path="res://assets/animations/decor/rosa.tres" id="7_74fyi"]
|
||||
[ext_resource type="PackedScene" uid="uid://cq3orf2ktmel0" path="res://scenes/dragon_list/dragon/dragon.tscn" id="2_h4iwm"]
|
||||
[ext_resource type="Texture2D" uid="uid://d27vpp71fe4de" path="res://assets/sprites/ui/DP_UI_CharList_Frame.png" id="6_74fyi"]
|
||||
[ext_resource type="FontFile" uid="uid://u1pey2ilx31c" path="res://assets/fonts/Montjuic.ttf" id="8_74fyi"]
|
||||
[ext_resource type="Script" path="res://src/draggable.gd" id="8_b7eir"]
|
||||
[ext_resource type="Texture2D" uid="uid://bdrm1nxydvf5t" path="res://assets/sprites/ui/DP_UI_Label_Big.png" id="9_cv2ce"]
|
||||
[ext_resource type="Texture2D" uid="uid://bu5xa7tgfk3h3" path="res://assets/sprites/ui/DP_UI_Buttons01.png" id="9_k4ppc"]
|
||||
|
@ -22,52 +16,63 @@ region = Rect2(0, 120, 38, 40)
|
|||
atlas = ExtResource("9_k4ppc")
|
||||
region = Rect2(0, 160, 38, 40)
|
||||
|
||||
[node name="DragonList" type="Window" node_paths=PackedStringArray("origin_name_label", "dragon_name_label", "hat", "shirt", "decor", "dragon")]
|
||||
[node name="DragonList" type="Window" node_paths=PackedStringArray("dragon_list_pivot", "origin_name_label", "dragon_name_label")]
|
||||
transparent_bg = true
|
||||
size = Vector2i(230, 332)
|
||||
size = Vector2i(300, 332)
|
||||
unresizable = true
|
||||
borderless = true
|
||||
always_on_top = true
|
||||
transparent = true
|
||||
script = ExtResource("1_q7g8i")
|
||||
origin_name_label = NodePath("CanvasLayer/TowerLabel/Label")
|
||||
dragon_list_entry_template = ExtResource("2_h4iwm")
|
||||
dragon_list_pivot = NodePath("CanvasLayer/SubViewportContainer/SubViewport/Pivot")
|
||||
origin_name_label = NodePath("CanvasLayer/TowerNameLabel/Label")
|
||||
dragon_name_label = NodePath("CanvasLayer/NameLabel/Label")
|
||||
hat = NodePath("CanvasLayer/Dragon/Hat")
|
||||
shirt = NodePath("CanvasLayer/Dragon/Shirt")
|
||||
decor = NodePath("CanvasLayer/Dragon/Decor")
|
||||
dragon = NodePath("CanvasLayer/Dragon")
|
||||
hat_outfits = ExtResource("2_1ytgk")
|
||||
shirt_outfits = ExtResource("3_74fyi")
|
||||
decor_outfits = ExtResource("4_b7eir")
|
||||
dragon_colors = ExtResource("5_cv2ce")
|
||||
|
||||
[node name="CanvasLayer" type="CanvasLayer" parent="."]
|
||||
|
||||
[node name="BG" type="TextureRect" parent="CanvasLayer"]
|
||||
offset_right = 40.0
|
||||
offset_bottom = 40.0
|
||||
texture = ExtResource("3_3pkqp")
|
||||
[node name="ColorRect" type="ColorRect" parent="CanvasLayer"]
|
||||
offset_left = 22.0
|
||||
offset_top = 38.0
|
||||
offset_right = 296.0
|
||||
offset_bottom = 308.0
|
||||
color = Color(0.176471, 0.227451, 0.239216, 1)
|
||||
|
||||
[node name="TowerLabel" type="TextureRect" parent="CanvasLayer"]
|
||||
[node name="Background" type="NinePatchRect" parent="CanvasLayer"]
|
||||
offset_left = 18.0
|
||||
offset_top = 32.0
|
||||
offset_right = 300.0
|
||||
offset_bottom = 314.0
|
||||
texture = ExtResource("6_74fyi")
|
||||
patch_margin_left = 32
|
||||
patch_margin_top = 32
|
||||
patch_margin_right = 32
|
||||
patch_margin_bottom = 32
|
||||
|
||||
[node name="TowerNameLabel" type="NinePatchRect" parent="CanvasLayer"]
|
||||
offset_left = 34.0
|
||||
offset_top = 50.0
|
||||
offset_right = 182.0
|
||||
offset_right = 284.0
|
||||
offset_bottom = 98.0
|
||||
texture = ExtResource("9_cv2ce")
|
||||
patch_margin_left = 74
|
||||
patch_margin_right = 74
|
||||
|
||||
[node name="Label" type="Label" parent="CanvasLayer/TowerLabel"]
|
||||
layout_mode = 0
|
||||
[node name="Label" type="Label" parent="CanvasLayer/TowerNameLabel"]
|
||||
offset_left = 2.0
|
||||
offset_top = 2.0
|
||||
offset_right = 148.0
|
||||
offset_right = 250.0
|
||||
offset_bottom = 48.0
|
||||
text = "La Seu d'Urgell"
|
||||
theme_override_fonts/font = ExtResource("8_74fyi")
|
||||
theme_override_font_sizes/font_size = 28
|
||||
text = "AAAAAAAAAAAAAAAA"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="NameLabel" type="TextureRect" parent="CanvasLayer"]
|
||||
offset_left = 34.0
|
||||
offset_left = 89.0
|
||||
offset_top = 228.0
|
||||
offset_right = 182.0
|
||||
offset_right = 237.0
|
||||
offset_bottom = 276.0
|
||||
texture = ExtResource("9_cv2ce")
|
||||
|
||||
|
@ -76,6 +81,8 @@ layout_mode = 0
|
|||
offset_top = 2.0
|
||||
offset_right = 148.0
|
||||
offset_bottom = 48.0
|
||||
theme_override_fonts/font = ExtResource("8_74fyi")
|
||||
theme_override_font_sizes/font_size = 28
|
||||
text = "DRAGONET"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
@ -85,31 +92,29 @@ layout_mode = 3
|
|||
anchors_preset = 0
|
||||
offset_left = 18.0
|
||||
offset_top = 32.0
|
||||
offset_right = 198.0
|
||||
offset_right = 307.0
|
||||
offset_bottom = 320.0
|
||||
script = ExtResource("8_b7eir")
|
||||
|
||||
[node name="Dragon" type="AnimatedSprite2D" parent="CanvasLayer"]
|
||||
position = Vector2(112, 154)
|
||||
sprite_frames = ExtResource("4_1n46k")
|
||||
animation = &"idle"
|
||||
[node name="SubViewportContainer" type="SubViewportContainer" parent="CanvasLayer"]
|
||||
offset_left = 24.0
|
||||
offset_top = 105.0
|
||||
offset_right = 224.0
|
||||
offset_bottom = 213.0
|
||||
|
||||
[node name="Hat" type="AnimatedSprite2D" parent="CanvasLayer/Dragon"]
|
||||
sprite_frames = ExtResource("5_u20w8")
|
||||
animation = &"idle"
|
||||
[node name="SubViewport" type="SubViewport" parent="CanvasLayer/SubViewportContainer"]
|
||||
transparent_bg = true
|
||||
handle_input_locally = false
|
||||
size = Vector2i(270, 108)
|
||||
render_target_update_mode = 4
|
||||
|
||||
[node name="Shirt" type="AnimatedSprite2D" parent="CanvasLayer/Dragon"]
|
||||
sprite_frames = ExtResource("6_1ytgk")
|
||||
animation = &"idle"
|
||||
|
||||
[node name="Decor" type="AnimatedSprite2D" parent="CanvasLayer/Dragon"]
|
||||
sprite_frames = ExtResource("7_74fyi")
|
||||
animation = &"idle"
|
||||
[node name="Pivot" type="Node2D" parent="CanvasLayer/SubViewportContainer/SubViewport"]
|
||||
position = Vector2(135, 54)
|
||||
|
||||
[node name="dragon_previous" type="Button" parent="CanvasLayer"]
|
||||
offset_left = 76.0
|
||||
offset_left = 127.0
|
||||
offset_top = 136.0
|
||||
offset_right = 122.0
|
||||
offset_right = 173.0
|
||||
offset_bottom = 184.0
|
||||
scale = Vector2(-1, 1)
|
||||
focus_mode = 0
|
||||
|
@ -117,22 +122,24 @@ icon = SubResource("AtlasTexture_1n46k")
|
|||
flat = true
|
||||
|
||||
[node name="dragon_next" type="Button" parent="CanvasLayer"]
|
||||
offset_left = 134.0
|
||||
offset_left = 185.0
|
||||
offset_top = 136.0
|
||||
offset_right = 180.0
|
||||
offset_right = 231.0
|
||||
offset_bottom = 184.0
|
||||
focus_mode = 0
|
||||
icon = SubResource("AtlasTexture_1n46k")
|
||||
flat = true
|
||||
|
||||
[node name="close" type="Button" parent="CanvasLayer"]
|
||||
offset_left = 178.0
|
||||
offset_top = 6.0
|
||||
offset_right = 224.0
|
||||
offset_bottom = 54.0
|
||||
offset_left = 264.0
|
||||
offset_top = 12.0
|
||||
offset_right = 310.0
|
||||
offset_bottom = 60.0
|
||||
focus_mode = 0
|
||||
icon = SubResource("AtlasTexture_u20w8")
|
||||
flat = true
|
||||
|
||||
[connection signal="close_requested" from="." to="." method="_on_close_requested"]
|
||||
[connection signal="pressed" from="CanvasLayer/dragon_previous" to="." method="_on_dragon_previous_pressed"]
|
||||
[connection signal="pressed" from="CanvasLayer/dragon_next" to="." method="_on_dragon_next_pressed"]
|
||||
[connection signal="pressed" from="CanvasLayer/close" to="." method="_on_close_pressed"]
|
||||
|
|
|
@ -2,24 +2,22 @@ extends Window
|
|||
class_name DragonList
|
||||
|
||||
var _library: DragonLibrary
|
||||
var _dragons: Array[DragonListEntry]
|
||||
@export var dragon_list_entry_template: PackedScene
|
||||
@export var dragon_list_pivot: Node2D
|
||||
|
||||
@onready var dragger: DraggableWindow = $CanvasLayer/Dragger
|
||||
|
||||
@export var origin_name_label: Label
|
||||
@export var dragon_name_label: Label
|
||||
|
||||
@export var hat: AnimatedSprite2D
|
||||
@export var shirt: AnimatedSprite2D
|
||||
@export var decor: AnimatedSprite2D
|
||||
@export var dragon: AnimatedSprite2D
|
||||
|
||||
@export var hat_outfits: DragonOutfit
|
||||
@export var shirt_outfits: DragonOutfit
|
||||
@export var decor_outfits: DragonOutfit
|
||||
@export var dragon_colors: DragonOutfit
|
||||
var _index_showing: int = 0
|
||||
var _pivot_start_pos: Vector2
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
dragger.on_drag.connect(_on_drag)
|
||||
_pivot_start_pos = dragon_list_pivot.position
|
||||
|
||||
|
||||
func _on_drag(offset: Vector2i):
|
||||
|
@ -28,30 +26,65 @@ func _on_drag(offset: Vector2i):
|
|||
|
||||
func set_library(library: DragonLibrary):
|
||||
_library = library
|
||||
for i in len(_library.dragons):
|
||||
_instantiate_dragon(_library.dragons[i], i)
|
||||
|
||||
_play_idle_animations()
|
||||
_show_dragon(library.dragons[0])
|
||||
|
||||
|
||||
func _instantiate_dragon(dragon: DragonProperties, offset_step: int):
|
||||
var instance: DragonListEntry = dragon_list_entry_template.instantiate()
|
||||
dragon_list_pivot.add_child(instance)
|
||||
instance.position.x += offset_step * 110
|
||||
_dragons.push_back(instance)
|
||||
|
||||
|
||||
func _show_dragon(dragon: DragonProperties):
|
||||
hat.sprite_frames = hat_outfits.get_texture(dragon.hat)
|
||||
shirt.sprite_frames = shirt_outfits.get_texture(dragon.shirt)
|
||||
decor.sprite_frames = decor_outfits.get_texture(dragon.decor)
|
||||
self.dragon.sprite_frames = dragon_colors.get_texture(dragon.color)
|
||||
_restart_animations()
|
||||
|
||||
origin_name_label.text = dragon.origin
|
||||
dragon_name_label.text = dragon.name
|
||||
|
||||
|
||||
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 _on_close_pressed() -> void:
|
||||
queue_free()
|
||||
|
||||
|
||||
func _on_dragon_previous_pressed() -> void:
|
||||
if _index_showing == 0:
|
||||
return
|
||||
_index_showing -= 1
|
||||
_move_to_position(-110 * _index_showing)
|
||||
_show_dragon(_library.dragons[_index_showing])
|
||||
|
||||
|
||||
func _on_dragon_next_pressed() -> void:
|
||||
if _index_showing == len(_library.dragons) - 1:
|
||||
return
|
||||
_index_showing += 1
|
||||
_move_to_position(-110 * _index_showing)
|
||||
_show_dragon(_library.dragons[_index_showing])
|
||||
|
||||
|
||||
func _move_to_position(target_position: int):
|
||||
var tween = create_tween()
|
||||
_play_walk_animations()
|
||||
var new_pos: Vector2 = _pivot_start_pos + Vector2(target_position, 0)
|
||||
_face_direction(new_pos.x < dragon_list_pivot.position.x)
|
||||
|
||||
tween.tween_property(dragon_list_pivot, "position", new_pos, 1.0).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT)
|
||||
tween.tween_callback(_play_idle_animations)
|
||||
|
||||
|
||||
func _play_idle_animations():
|
||||
for dragon in _dragons:
|
||||
dragon.play_animation('idle')
|
||||
|
||||
|
||||
func _play_walk_animations():
|
||||
for dragon in _dragons:
|
||||
dragon.play_animation('walk')
|
||||
|
||||
|
||||
func _face_direction(left: bool):
|
||||
for dragon in _dragons:
|
||||
dragon.face_direction(left)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue