small death animation and toolbox
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 35s
Create tag and build when new code gets to main / Test (push) Successful in 6m20s
Create tag and build when new code gets to main / Export (push) Successful in 7m20s

This commit is contained in:
2026-01-27 16:42:31 +01:00
parent f1f0febf29
commit 056a68b0ad
19 changed files with 413 additions and 48 deletions

View File

@@ -16,6 +16,8 @@ public partial class HeadSystem : Node3D
public delegate void HitTargetEventHandler();
[Signal]
public delegate void GotHitEventHandler();
[Signal]
public delegate void DeathAnimationFinishedEventHandler();
[Signal]
public delegate void StepFootEventHandler();
@@ -129,6 +131,15 @@ public partial class HeadSystem : Node3D
{
_animationTree.Set("parameters/OnHit/request", (int) AnimationNodeOneShot.OneShotRequest.Fire);
}
public void OnStartDeathAnimation()
{
_animationTree.Set("parameters/OnDie/request", (int) AnimationNodeOneShot.OneShotRequest.Fire);
}
public void OnDeathAnimationFinished()
{
EmitSignalDeathAnimationFinished();
}
public void OnHitTarget()
{

View File

@@ -1,10 +1,15 @@
[gd_resource type="AnimationNodeBlendTree" load_steps=11 format=3 uid="uid://c26yvcyyyj811"]
[gd_resource type="AnimationNodeBlendTree" load_steps=13 format=3 uid="uid://c26yvcyyyj811"]
[ext_resource type="AnimationNodeStateMachine" uid="uid://3r5oeg0ho0d4" path="res://systems/head/fp_state_machine.tres" id="1_knaxl"]
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_1hkum"]
animation = &"die"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_knaxl"]
animation = &"idle"
[sub_resource type="AnimationNodeOneShot" id="AnimationNodeOneShot_ao3u1"]
[sub_resource type="AnimationNodeOneShot" id="AnimationNodeOneShot_1hkum"]
[sub_resource type="AnimationNodeOneShot" id="AnimationNodeOneShot_knaxl"]
@@ -32,8 +37,8 @@ animation = &"jump_start"
animation = &"mantle"
[resource]
graph_offset = Vector2(-223.13931, -84.56735)
nodes/output/position = Vector2(1540, 0)
graph_offset = Vector2(-290.66962, -123.155754)
nodes/output/position = Vector2(1700, -40)
nodes/AnimationNodeStateMachine/node = ExtResource("1_knaxl")
nodes/AnimationNodeStateMachine/position = Vector2(-560, 180)
nodes/Idle/node = SubResource("AnimationNodeAnimation_knaxl")
@@ -54,4 +59,8 @@ nodes/OnMantle/node = SubResource("AnimationNodeOneShot_dlkjl")
nodes/OnMantle/position = Vector2(900, -60)
nodes/mantle/node = SubResource("AnimationNodeAnimation_lwjon")
nodes/mantle/position = Vector2(640, 320)
node_connections = [&"output", 0, &"OnHit", &"OnHit", 0, &"OnMantle", &"OnHit", 1, &"hit1", &"OnJumpStart", 0, &"Idle", &"OnJumpStart", 1, &"jump_start", &"OnJumpEnd", 0, &"OnJumpStart", &"OnJumpEnd", 1, &"jump_end", &"OnMantle", 0, &"OnJumpEnd", &"OnMantle", 1, &"mantle"]
nodes/OnDie/node = SubResource("AnimationNodeOneShot_ao3u1")
nodes/OnDie/position = Vector2(1500, -60)
nodes/Die/node = SubResource("AnimationNodeAnimation_1hkum")
nodes/Die/position = Vector2(1280, 340)
node_connections = [&"output", 0, &"OnDie", &"OnHit", 0, &"OnMantle", &"OnHit", 1, &"hit1", &"OnJumpStart", 0, &"Idle", &"OnJumpStart", 1, &"jump_start", &"OnJumpEnd", 0, &"OnJumpStart", &"OnJumpEnd", 1, &"jump_end", &"OnMantle", 0, &"OnJumpEnd", &"OnMantle", 1, &"mantle", &"OnDie", 0, &"OnHit", &"OnDie", 1, &"Die"]

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=29 format=3 uid="uid://0ysqmqphq6mq"]
[gd_scene load_steps=30 format=3 uid="uid://0ysqmqphq6mq"]
[ext_resource type="Script" uid="uid://dtkdrnsmlwm67" path="res://systems/head/HeadSystem.cs" id="1_8abgy"]
[ext_resource type="ArrayMesh" uid="uid://ckr26s4e3fj1m" path="res://assets/swords/resources/fp_sword23.tres" id="2_c5qep"]
@@ -133,6 +133,30 @@ tracks/4/keys = {
"update": 0,
"values": [Vector3(0, 0, 0)]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("../../FPRig:position")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(0, 0, 0)]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("../../FPRig:rotation")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(0, 0, 0)]
}
[sub_resource type="Animation" id="Animation_r0h40"]
resource_name = "hit1"
@@ -305,9 +329,76 @@ tracks/0/keys = {
"values": [Vector3(0, 0, 0.00011616433), Vector3(-0.5235988, 0, 0), Vector3(0, 0, 0)]
}
[sub_resource type="Animation" id="Animation_sdjj3"]
resource_name = "die"
length = 1.0000033
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("..:position")
tracks/0/interp = 2
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.7),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector3(0, 0, 0), Vector3(4.792308e-05, -0.4125456, 0.56061167)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("..:rotation")
tracks/1/interp = 2
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.3, 0.7),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Vector3(0, 0, 0.00011616433), Vector3(0, 0, 0), Vector3(-0.12217305, -0.090757124, 1.727876)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("../../FPRig:position")
tracks/2/interp = 2
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.33333334, 0.8333333),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Vector3(0, 0, 0), Vector3(-0.426, 10, 0.028), Vector3(-1.2110655, 0.36514676, 0.080477595)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("../../FPRig:rotation")
tracks/3/interp = 2
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.33333334, 0.8333333),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Vector3(0, 0, 0), Vector3(0.39806452, 0.17761895, 1.4115733), Vector3(-0.5466285, -1.1119838, -2.9170606)]
}
tracks/4/type = "method"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("../..")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(1),
"transitions": PackedFloat32Array(1),
"values": [{
"args": [],
"method": &"OnDeathAnimationFinished"
}]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_0hyrq"]
_data = {
&"RESET": SubResource("Animation_urko7"),
&"die": SubResource("Animation_sdjj3"),
&"hit1": SubResource("Animation_r0h40"),
&"idle": SubResource("Animation_0hyrq"),
&"jump_end": SubResource("Animation_1ay6d"),
@@ -322,6 +413,7 @@ DisplacedWeaponSway = 1.0
DisplacedWeaponAdjustmentSpeed = 8.0
[node name="FPRig" type="Node3D" parent="."]
transform = Transform3D(0.9999998, 0, 0, 0, 1.0000002, 0, 0, 0, 1.0000002, 0, 0, 0)
[node name="Sword" type="Node3D" parent="FPRig"]
transform = Transform3D(0.42791694, -0.008550272, -0.9037781, 0.19667713, 0.9768738, 0.0838801, 0.88215953, -0.2136461, 0.41970265, 0.53640664, -0.7880347, -1.9288678)
@@ -332,7 +424,7 @@ cast_shadow = 0
mesh = ExtResource("2_c5qep")
[node name="CameraSmooth" type="Node3D" parent="."]
transform = Transform3D(1, -0.00011616431, 0, 0.00011616433, 0.9999998, 0, 0, 0, 0.9999998, 0, 0, 0)
transform = Transform3D(0.99999994, -0.0001161643, 0, 0.00011616432, 0.99999976, 0, 0, 0, 0.9999998, 0, 0, 0)
[node name="Camera3D" type="Camera3D" parent="CameraSmooth"]
transform = Transform3D(1, -7.508787e-09, -1.4551914e-08, 7.508788e-09, 0.99999994, -1.5046679e-08, 1.4551915e-08, 1.5046679e-08, 0.99999994, -0.04610423, -0.02960227, -0.053528003)
@@ -382,6 +474,9 @@ parameters/OnJumpEnd/request = 0
parameters/OnMantle/active = false
parameters/OnMantle/internal_active = false
parameters/OnMantle/request = 0
parameters/OnDie/active = false
parameters/OnDie/internal_active = false
parameters/OnDie/request = 0
[connection signal="GotHit" from="." to="CameraSmooth/Camera3D/OnGetHitShaker" method="play_shake"]
[connection signal="HitTarget" from="." to="CameraSmooth/Camera3D/OnHitShaker" method="play_shake"]

View File

@@ -1,4 +1,4 @@
[gd_resource type="Resource" script_class="GUIDEMappingContext" load_steps=161 format=3 uid="uid://bl5crtu1gkrtr"]
[gd_resource type="Resource" script_class="GUIDEMappingContext" load_steps=163 format=3 uid="uid://bl5crtu1gkrtr"]
[ext_resource type="Script" uid="uid://cpplm41b5bt6m" path="res://addons/guide/guide_action_mapping.gd" id="1_qmhk6"]
[ext_resource type="Resource" uid="uid://htqvokm8mufq" path="res://systems/inputs/base_mode/move.tres" id="2_g6bbx"]
@@ -36,6 +36,7 @@
[ext_resource type="Resource" uid="uid://dxy0071ic1wdj" path="res://systems/inputs/base_mode/slam.tres" id="32_s8kjn"]
[ext_resource type="Resource" uid="uid://s1l0n1iitc6m" path="res://systems/inputs/base_mode/move_back.tres" id="33_fykw6"]
[ext_resource type="Resource" uid="uid://brswsknpgwal2" path="res://systems/inputs/base_mode/move_front.tres" id="34_rvpjj"]
[ext_resource type="Resource" uid="uid://ca68r7n3bwba3" path="res://systems/inputs/base_mode/toolbox.tres" id="34_s8kjn"]
[ext_resource type="Resource" uid="uid://f3vs6l4m623s" path="res://systems/inputs/base_mode/move_left.tres" id="35_s8kjn"]
[ext_resource type="Resource" uid="uid://t612lts1wi1s" path="res://systems/inputs/base_mode/move_right.tres" id="36_vibkn"]
@@ -479,23 +480,28 @@ script = ExtResource("3_yp12v")
input = SubResource("Resource_jjamb")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_4kb6s")])
[sub_resource type="Resource" id="Resource_weyro"]
script = ExtResource("1_qmhk6")
action = ExtResource("29_q86qg")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_ai85f"), SubResource("Resource_1ycft")])
metadata/_guide_input_mappings_collapsed = false
[sub_resource type="Resource" id="Resource_8e1uk"]
script = ExtResource("19_qkgmj")
button = 4
[sub_resource type="Resource" id="Resource_ilhhf"]
[sub_resource type="Resource" id="Resource_k8i2y"]
script = ExtResource("15_fykw6")
[sub_resource type="Resource" id="Resource_k8i2y"]
[sub_resource type="Resource" id="Resource_ilhhf"]
script = ExtResource("3_yp12v")
input = SubResource("Resource_8e1uk")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_ilhhf")])
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_k8i2y")])
[sub_resource type="Resource" id="Resource_weyro"]
[sub_resource type="Resource" id="Resource_o5fur"]
script = ExtResource("1_qmhk6")
action = ExtResource("29_q86qg")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_ai85f"), SubResource("Resource_1ycft"), SubResource("Resource_k8i2y")])
metadata/_guide_input_mappings_collapsed = false
action = ExtResource("34_s8kjn")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_ilhhf")])
[sub_resource type="Resource" id="Resource_kcylj"]
script = ExtResource("30_cvxqo")
@@ -551,5 +557,5 @@ input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_7io5e")])
[resource]
script = ExtResource("23_llfhp")
mappings = Array[ExtResource("1_qmhk6")]([SubResource("Resource_88x08"), SubResource("Resource_tgr2g"), SubResource("Resource_iarn8"), SubResource("Resource_cvxqo"), SubResource("Resource_tb8ii"), SubResource("Resource_iihs4"), SubResource("Resource_vibkn"), SubResource("Resource_2hs2y"), SubResource("Resource_d2r0d"), SubResource("Resource_xt1x5"), SubResource("Resource_ew1hw"), SubResource("Resource_3frwi"), SubResource("Resource_0qat1"), SubResource("Resource_vtk18"), SubResource("Resource_weyro"), SubResource("Resource_fjku4"), SubResource("Resource_odnhd"), SubResource("Resource_0eff7"), SubResource("Resource_gt77e")])
mappings = Array[ExtResource("1_qmhk6")]([SubResource("Resource_88x08"), SubResource("Resource_tgr2g"), SubResource("Resource_iarn8"), SubResource("Resource_cvxqo"), SubResource("Resource_tb8ii"), SubResource("Resource_iihs4"), SubResource("Resource_vibkn"), SubResource("Resource_2hs2y"), SubResource("Resource_d2r0d"), SubResource("Resource_xt1x5"), SubResource("Resource_ew1hw"), SubResource("Resource_3frwi"), SubResource("Resource_0qat1"), SubResource("Resource_vtk18"), SubResource("Resource_weyro"), SubResource("Resource_o5fur"), SubResource("Resource_fjku4"), SubResource("Resource_odnhd"), SubResource("Resource_0eff7"), SubResource("Resource_gt77e")])
metadata/_custom_type_script = "uid://dsa1dnifd6w32"

View File

@@ -0,0 +1,7 @@
[gd_resource type="Resource" script_class="GUIDEAction" load_steps=2 format=3 uid="uid://ca68r7n3bwba3"]
[ext_resource type="Script" uid="uid://cluhc11vixkf1" path="res://addons/guide/guide_action.gd" id="1_pmr0d"]
[resource]
script = ExtResource("1_pmr0d")
metadata/_custom_type_script = "uid://cluhc11vixkf1"

View File

@@ -1,28 +1,42 @@
@icon("res://assets/ui/IconGodotNode/white/icon_gear_2.png")
extends Node
@export_category("Scenes")
@export_group("General")
@export var main_menu_path : String = "res://menus/scenes/menus/main_menu/main_menu_with_animations.tscn"
@export_group("Levels")
@export_category("Menus")
@export_group("Overlaid")
@export var lost_menu : PackedScene = preload("uid://ciyq8eiv1mtie")
@export var lost_menu_scene : PackedScene = preload("uid://ciyq8eiv1mtie")
@export var toolbox_scene : PackedScene = preload("uid://bcn582q8qd4ns")
@export_category("Others")
@export var focused_viewport : Viewport
@export var toolbox_action:GUIDEAction = preload("uid://ca68r7n3bwba3")
# Debug
@onready var debug_layer: CanvasLayer = $"../DebugLayer"
@onready var player: PlayerController = $"../Player"
func on_player_died() -> void:
func _ready() -> void:
toolbox_action.triggered.connect(open_toolbox)
func open_overlaid_menu(menu: PackedScene) -> Node:
if not focused_viewport:
focused_viewport = get_viewport()
var _initial_focus_control = focused_viewport.gui_get_focus_owner()
var current_menu: LevelLostMenu = lost_menu.instantiate()
get_tree().current_scene.call_deferred("add_child", current_menu)
current_menu.restart_pressed.connect(restart_current_level)
current_menu.main_menu_pressed.connect(back_to_main_menu)
return menu.instantiate()
func open_toolbox() -> void:
var toolbox: Toolbox = open_overlaid_menu(toolbox_scene)
toolbox.player = player
debug_layer.call_deferred("add_child", toolbox)
func on_player_died() -> void:
var lost_menu: LevelLostMenu = open_overlaid_menu(lost_menu_scene)
get_tree().current_scene.call_deferred("add_child", lost_menu)
lost_menu.restart_pressed.connect(restart_current_level)
lost_menu.main_menu_pressed.connect(back_to_main_menu)
func back_to_main_menu():
SceneLoader.load_scene(main_menu_path)