feat: rotation is Good Enough I'd say

main
Sara 2024-12-02 23:18:08 +01:00
parent e522dfb364
commit 95375eae4a
5 changed files with 85 additions and 79 deletions

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=28 format=3 uid="uid://1kr3qqan3trk"]
[gd_scene load_steps=29 format=3 uid="uid://1kr3qqan3trk"]
[ext_resource type="PackedScene" uid="uid://vub54xgk5n0h" path="res://models/character.glb" id="1_mi4co"]
@ -17,9 +17,41 @@ animation = &"Aim"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_8rbkq"]
animation = &"Aim_Fire"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_dqnnp"]
[sub_resource type="AnimationNodeBlend2" id="AnimationNodeBlend2_4hmb8"]
filter_enabled = true
filters = ["Character/Skeleton3D:Foot.L", "Character/Skeleton3D:Foot.R", "Character/Skeleton3D:IKTarget.Foot.L", "Character/Skeleton3D:IKTarget.Foot.R", "Character/Skeleton3D:Neck", "Character/Skeleton3D:PoleTarget.Foot.L", "Character/Skeleton3D:PoleTarget.Foot.R", "Character/Skeleton3D:hip", "Character/Skeleton3D:lowerleg.L", "Character/Skeleton3D:lowerleg.R", "Character/Skeleton3D:root", "Character/Skeleton3D:spine.001", "Character/Skeleton3D:spine.002", "Character/Skeleton3D:spine.003", "Character/Skeleton3D:upperleg.L", "Character/Skeleton3D:upperleg.R"]
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_5n7ai"]
animation = &"RESET"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_cmc4t"]
animation = &"Turn_right"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_wfckx"]
animation = &"Turn_left"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_6neek"]
animation = &"RESET"
[sub_resource type="AnimationNodeBlendSpace1D" id="AnimationNodeBlendSpace1D_kxn5j"]
blend_point_0/node = SubResource("AnimationNodeAnimation_cmc4t")
blend_point_0/pos = -1.0
blend_point_1/node = SubResource("AnimationNodeAnimation_wfckx")
blend_point_1/pos = 1.0
blend_point_2/node = SubResource("AnimationNodeAnimation_6neek")
blend_point_2/pos = 0.0
[sub_resource type="AnimationNodeBlendTree" id="AnimationNodeBlendTree_p0hk7"]
graph_offset = Vector2(-599, 14)
nodes/BoneMask/node = SubResource("AnimationNodeBlend2_4hmb8")
nodes/BoneMask/position = Vector2(140, 140)
nodes/Rest/node = SubResource("AnimationNodeAnimation_5n7ai")
nodes/Rest/position = Vector2(-100, 160)
nodes/Turn/node = SubResource("AnimationNodeBlendSpace1D_kxn5j")
nodes/Turn/position = Vector2(-100, 380)
nodes/output/position = Vector2(380, 140)
node_connections = [&"BoneMask", 0, &"Rest", &"BoneMask", 1, &"Turn", &"output", 0, &"BoneMask"]
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_7ceai"]
animation = &"RESET"
@ -40,35 +72,13 @@ nodes/Walk/node = SubResource("AnimationNodeAnimation_psu0r")
nodes/Walk/position = Vector2(-140, 300)
node_connections = [&"Forward", 0, &"Base", &"Forward", 1, &"Walk", &"output", 0, &"Forward"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_3mk5o"]
xfade_time = 0.2
advance_mode = 2
advance_expression = "get_input_directions().y > 0.5"
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_mf4y3"]
xfade_time = 0.6
priority = 2
advance_mode = 2
advance_expression = "get_input_directions().y <= 0.5"
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_c81tj"]
advance_mode = 2
advance_expression = "get_input_directions().y < -0.9"
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_r26s5"]
advance_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_4lybd"]
switch_mode = 2
advance_mode = 2
advance_expression = "get_input_directions().y >= -0.9"
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_4im1q"]
priority = 2
switch_mode = 2
advance_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_5aafd"]
xfade_time = 0.3
switch_mode = 2
advance_mode = 2
advance_expression = "get_input_direction() > 0.f"
@ -88,52 +98,50 @@ advance_mode = 2
advance_mode = 2
advance_expression = "get_input_directions().y < -0.5"
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_n0ndr"]
priority = 2
switch_mode = 2
advance_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_0wc5e"]
xfade_time = 0.2
priority = 2
advance_mode = 2
advance_expression = "get_input_directions().y < 0.5"
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_4hisb"]
xfade_time = 0.2
advance_mode = 2
advance_expression = "get_input_directions().y >= 0.5"
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_333v8"]
advance_mode = 2
advance_expression = "get_input_directions().y < -0.9"
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_bmty6"]
advance_mode = 2
[sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_7smdg"]
"states/Aim Down [aim]/node" = SubResource("AnimationNodeAnimation_ukhqm")
"states/Aim Down [aim]/position" = Vector2(583.446, 263.781)
"states/Aim Down [aim]/position" = Vector2(706.171, 191.767)
"states/Aim [aim] [turn]/node" = SubResource("AnimationNodeAnimation_nhlru")
"states/Aim [aim] [turn]/position" = Vector2(583.364, 97.9174)
states/End/position = Vector2(204, 197.5)
"states/Aim [aim] [turn]/position" = Vector2(705.26, 88.389)
states/End/position = Vector2(195.182, 94.3447)
"states/Fire [aim]/node" = SubResource("AnimationNodeAnimation_8rbkq")
"states/Fire [aim]/position" = Vector2(798.864, 97.9174)
"states/Idle [turn_animated]/node" = SubResource("AnimationNodeAnimation_dqnnp")
"states/Idle [turn_animated]/position" = Vector2(384.364, 99.9174)
states/Start/position = Vector2(204, 100)
"states/Fire [aim]/position" = Vector2(706.18, 14.9346)
states/Start/position = Vector2(383.995, 14.954)
"states/Stationary [turn]/node" = SubResource("AnimationNodeBlendTree_p0hk7")
"states/Stationary [turn]/position" = Vector2(383.995, 94.3447)
"states/Walk [turn]/node" = SubResource("AnimationNodeBlendTree_2mbyh")
"states/Walk [turn]/position" = Vector2(384.446, 263.781)
transitions = ["Idle [turn_animated]", "Walk [turn]", SubResource("AnimationNodeStateMachineTransition_3mk5o"), "Walk [turn]", "Idle [turn_animated]", SubResource("AnimationNodeStateMachineTransition_mf4y3"), "Idle [turn_animated]", "Aim [aim] [turn]", SubResource("AnimationNodeStateMachineTransition_c81tj"), "Start", "Idle [turn_animated]", SubResource("AnimationNodeStateMachineTransition_r26s5"), "Aim [aim] [turn]", "Aim Down [aim]", SubResource("AnimationNodeStateMachineTransition_4lybd"), "Aim Down [aim]", "Idle [turn_animated]", SubResource("AnimationNodeStateMachineTransition_4im1q"), "Aim Down [aim]", "Walk [turn]", SubResource("AnimationNodeStateMachineTransition_5aafd"), "Aim [aim] [turn]", "Fire [aim]", SubResource("AnimationNodeStateMachineTransition_8f4gl"), "Fire [aim]", "Aim [aim] [turn]", SubResource("AnimationNodeStateMachineTransition_xnat3"), "Walk [turn]", "Aim [aim] [turn]", SubResource("AnimationNodeStateMachineTransition_12bos")]
graph_offset = Vector2(-151.601, -33.5439)
[sub_resource type="AnimationNodeBlend2" id="AnimationNodeBlend2_cwpxw"]
filter_enabled = true
filters = ["Character/Skeleton3D:Foot.L", "Character/Skeleton3D:Foot.R", "Character/Skeleton3D:IKTarget.Foot.L", "Character/Skeleton3D:IKTarget.Foot.R", "Character/Skeleton3D:Neck", "Character/Skeleton3D:PoleTarget.Foot.L", "Character/Skeleton3D:PoleTarget.Foot.R", "Character/Skeleton3D:hip", "Character/Skeleton3D:lowerleg.L", "Character/Skeleton3D:lowerleg.R", "Character/Skeleton3D:spine.001", "Character/Skeleton3D:spine.002", "Character/Skeleton3D:spine.003", "Character/Skeleton3D:upperleg.L", "Character/Skeleton3D:upperleg.R"]
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_ltmcj"]
animation = &"Turn_left"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_1g6a2"]
animation = &"Turn_right"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_dgkx8"]
animation = &"RESET"
[sub_resource type="AnimationNodeBlendSpace1D" id="AnimationNodeBlendSpace1D_ajqf0"]
blend_point_0/node = SubResource("AnimationNodeAnimation_ltmcj")
blend_point_0/pos = 1.0
blend_point_1/node = SubResource("AnimationNodeAnimation_1g6a2")
blend_point_1/pos = -1.0
blend_point_2/node = SubResource("AnimationNodeAnimation_dgkx8")
blend_point_2/pos = 0.0
"states/Walk [turn]/position" = Vector2(383.995, 191.767)
transitions = ["Aim [aim] [turn]", "Aim Down [aim]", SubResource("AnimationNodeStateMachineTransition_4lybd"), "Aim Down [aim]", "Walk [turn]", SubResource("AnimationNodeStateMachineTransition_5aafd"), "Aim [aim] [turn]", "Fire [aim]", SubResource("AnimationNodeStateMachineTransition_8f4gl"), "Fire [aim]", "Aim [aim] [turn]", SubResource("AnimationNodeStateMachineTransition_xnat3"), "Walk [turn]", "Aim [aim] [turn]", SubResource("AnimationNodeStateMachineTransition_12bos"), "Aim Down [aim]", "Stationary [turn]", SubResource("AnimationNodeStateMachineTransition_n0ndr"), "Walk [turn]", "Stationary [turn]", SubResource("AnimationNodeStateMachineTransition_0wc5e"), "Stationary [turn]", "Walk [turn]", SubResource("AnimationNodeStateMachineTransition_4hisb"), "Stationary [turn]", "Aim [aim] [turn]", SubResource("AnimationNodeStateMachineTransition_333v8"), "Start", "Stationary [turn]", SubResource("AnimationNodeStateMachineTransition_bmty6")]
graph_offset = Vector2(-98.007, -6.1553)
[sub_resource type="AnimationNodeBlendTree" id="AnimationNodeBlendTree_hiswf"]
graph_offset = Vector2(-380, 0)
nodes/Actions/node = SubResource("AnimationNodeStateMachine_7smdg")
nodes/Actions/position = Vector2(-80, 140)
nodes/TurnAnimation/node = SubResource("AnimationNodeBlend2_cwpxw")
nodes/TurnAnimation/position = Vector2(120, 140)
nodes/TurnDirection/node = SubResource("AnimationNodeBlendSpace1D_ajqf0")
nodes/TurnDirection/position = Vector2(-80, 300)
node_connections = [&"TurnAnimation", 0, &"Actions", &"TurnAnimation", 1, &"TurnDirection", &"output", 0, &"TurnAnimation"]
nodes/Actions/position = Vector2(90.9091, 145.455)
nodes/output/position = Vector2(327.273, 163.636)
node_connections = [&"output", 0, &"Actions"]
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_ewsvd"]
radius = 0.370388
@ -249,9 +257,9 @@ root_motion_track = NodePath("Character/Skeleton3D:root")
tree_root = SubResource("AnimationNodeBlendTree_hiswf")
advance_expression_base_node = NodePath("../..")
anim_player = NodePath("../AnimationPlayer")
"parameters/Actions/Stationary [turn]/BoneMask/blend_amount" = 1.0
"parameters/Actions/Stationary [turn]/Turn/blend_position" = 0
"parameters/Actions/Walk [turn]/Forward/blend_amount" = 1.0
parameters/TurnAnimation/blend_amount = 0
parameters/TurnDirection/blend_position = -1.0
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
@ -262,7 +270,7 @@ unique_name_in_owner = true
top_level = true
[node name="Camera" type="Camera3D" parent="CameraParent"]
transform = Transform3D(-0.99874, 0.00680423, -0.0497112, -1.86265e-08, 0.990762, 0.135611, 0.0501747, 0.13544, -0.989514, -0.510957, 1.68471, -1.00759)
transform = Transform3D(-0.999748, 0.00680423, -0.0213691, 0.00384561, 0.990762, 0.135556, 0.0220941, 0.13544, -0.990539, -0.434839, 1.68404, -1.00653)
fov = 42.5804
far = 100.0

View File

@ -41,13 +41,18 @@ dir_backward={
dir_left={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":2,"axis_value":-1.0,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":-1.0,"script":null)
]
}
dir_right={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":2,"axis_value":1.0,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":1.0,"script":null)
]
}
look_right={
"deadzone": 0.2,
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":2,"axis_value":1.0,"script":null)
]
}
look_left={
@ -60,11 +65,6 @@ look_up={
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":-1.0,"script":null)
]
}
look_right={
"deadzone": 0.2,
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":2,"axis_value":1.0,"script":null)
]
}
look_down={
"deadzone": 0.2,
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":1.0,"script":null)
@ -73,7 +73,7 @@ look_down={
fire={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":3,"pressure":0.0,"pressed":true,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":2,"pressure":0.0,"pressed":true,"script":null)
]
}

BIN
models/character.blend (Stored with Git LFS)

Binary file not shown.

Binary file not shown.

View File

@ -62,11 +62,9 @@ void Player::process_rotate(double delta) {
float const actual_speed{speed < gd::Math::abs(diff) ? gd::Math::sign(diff) * speed : diff};
// rotate by max allowed or full difference, whichever has the smaller magnitude
this->rotate_y(actual_speed);
this->anim_tree->set("parameters/TurnDirection/blend_position", diff * M_PI_2f);
this->anim_tree->set("parameters/TurnAnimation/blend_amount", this->fsm->get_current_node().contains("[turn_animated]") ? 1.f : 0.f);
this->anim_tree->set("parameters/Actions/Stationary [turn]/Turn/blend_position", diff * M_PI_2f);
} else {
this->anim_tree->set("parameters/TurnAnimation/blend_amount", 0.f);
this->anim_tree->set("parameters/TurnDirection/blend_position", 0.f);
this->anim_tree->set("parameters/Actions/Stationary [turn_animated]/blend_position", 0.f);
}
}