feat: updated rifle texture, turning animation

This commit is contained in:
Sara 2024-12-01 21:38:30 +01:00
parent 92f31aa85b
commit efc8006c66
28 changed files with 7376 additions and 114 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:dac3325bf581718e44b20aa4cd96fca882350e730218ac70da6efe669b5abb77 oid sha256:02bb57a7618cdb5a9710f81dda9d106fa65b42388ddfc54c4737d8892d80e811
size 974656 size 1557812

File diff suppressed because it is too large Load diff

View file

@ -2,15 +2,12 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://03bidmgkyu7x" uid="uid://bpbh6yad5us1u"
path.s3tc="res://.godot/imported/character_grid.png-2d0e906f71f3e26d2c036075a68637c9.s3tc.ctex" path.s3tc="res://.godot/imported/character_grid.png-2d0e906f71f3e26d2c036075a68637c9.s3tc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],
"vram_texture": true "vram_texture": true
} }
generator_parameters={
"md5": "5251a685620ecec968e08d819a2a66a5"
}
[deps] [deps]

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:da6fd2aa2650150467a3ec08d9bd37d7545057fce020e453354ddd3f3d643675
size 30156

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:da6fd2aa2650150467a3ec08d9bd37d7545057fce020e453354ddd3f3d643675
size 30156

View file

@ -1,38 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bfbggseqfivqg"
path.s3tc="res://.godot/imported/character_lee_enfield.jpg-6d1650ff6ac73c0058d6c5c97b6347e0.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "2f63e7aacd33f2b1b77cb71dd6821df5"
}
[deps]
source_file="res://models/character_lee_enfield.jpg"
dest_files=["res://.godot/imported/character_lee_enfield.jpg-6d1650ff6ac73c0058d6c5c97b6347e0.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a28ab4d7a0be49abfb5de55ed47c05dfa2778649794b37755e8afd71407e5ef8
size 381127

View file

@ -2,20 +2,17 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://bwq5navx6qi1l" uid="uid://b2y2j72db80od"
path.s3tc="res://.godot/imported/character_lee-enfield.jpg-8aa5d8a65848beefe70a765079e8bd2c.s3tc.ctex" path.s3tc="res://.godot/imported/character_rifle.png-59d3a7b80c91b62335b799778e2ab8de.s3tc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],
"vram_texture": true "vram_texture": true
} }
generator_parameters={
"md5": "2f63e7aacd33f2b1b77cb71dd6821df5"
}
[deps] [deps]
source_file="res://models/character_lee-enfield.jpg" source_file="res://models/character_rifle.png"
dest_files=["res://.godot/imported/character_lee-enfield.jpg-8aa5d8a65848beefe70a765079e8bd2c.s3tc.ctex"] dest_files=["res://.godot/imported/character_rifle.png-59d3a7b80c91b62335b799778e2ab8de.s3tc.ctex"]
[params] [params]

View file

@ -1,11 +1,10 @@
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://dibu06h02xpdh"] [gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://dibu06h02xpdh"]
[ext_resource type="Texture2D" uid="uid://bfbggseqfivqg" path="res://models/character_lee_enfield.jpg" id="1_8jtmf"] [ext_resource type="Texture2D" uid="uid://b2y2j72db80od" path="res://models/character_rifle.png" id="1_iex1v"]
[resource] [resource]
resource_name = "Material" resource_name = "Material"
cull_mode = 2 cull_mode = 2
specular_mode = 1 specular_mode = 1
albedo_texture = ExtResource("1_8jtmf") albedo_texture = ExtResource("1_iex1v")
metallic = 0.293814 metallic = 0.293814
roughness = 0.64433

View file

@ -1,6 +1,6 @@
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://c2ic02ndhqkod"] [gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://c2ic02ndhqkod"]
[ext_resource type="Texture2D" uid="uid://03bidmgkyu7x" path="res://models/character_grid.png" id="1_54a4n"] [ext_resource type="Texture2D" uid="uid://bpbh6yad5us1u" path="res://models/character_grid.png" id="1_54a4n"]
[resource] [resource]
resource_name = "Primary" resource_name = "Primary"

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=23 format=3 uid="uid://1kr3qqan3trk"] [gd_scene load_steps=28 format=3 uid="uid://1kr3qqan3trk"]
[ext_resource type="PackedScene" uid="uid://vub54xgk5n0h" path="res://models/character.glb" id="1_mi4co"] [ext_resource type="PackedScene" uid="uid://vub54xgk5n0h" path="res://models/character.glb" id="1_mi4co"]
@ -6,9 +6,9 @@
animation = &"Aim" animation = &"Aim"
play_mode = 1 play_mode = 1
use_custom_timeline = true use_custom_timeline = true
timeline_length = 0.6 timeline_length = 0.4
stretch_time_scale = false stretch_time_scale = false
start_offset = 0.4 start_offset = 0.0
loop_mode = 0 loop_mode = 0
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_nhlru"] [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_nhlru"]
@ -53,8 +53,7 @@ advance_expression = "get_input_directions().y <= 0.5"
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_c81tj"] [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_c81tj"]
advance_mode = 2 advance_mode = 2
advance_expression = "get_input_directions().y < -0.5 advance_expression = "get_input_directions().y < -0.9"
"
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_r26s5"] [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_r26s5"]
advance_mode = 2 advance_mode = 2
@ -62,7 +61,7 @@ advance_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_4lybd"] [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_4lybd"]
switch_mode = 2 switch_mode = 2
advance_mode = 2 advance_mode = 2
advance_expression = "get_input_directions().y >= -0.5" advance_expression = "get_input_directions().y >= -0.9"
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_4im1q"] [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_4im1q"]
priority = 2 priority = 2
@ -78,6 +77,7 @@ advance_expression = "get_input_direction() > 0.f"
priority = 2 priority = 2
switch_mode = 2 switch_mode = 2
advance_mode = 2 advance_mode = 2
advance_expression = "get_input_fire()"
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_xnat3"] [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_xnat3"]
reset = false reset = false
@ -89,25 +89,51 @@ advance_mode = 2
advance_expression = "get_input_directions().y < -0.5" advance_expression = "get_input_directions().y < -0.5"
[sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_7smdg"] [sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_7smdg"]
"states/Aim Down/node" = SubResource("AnimationNodeAnimation_ukhqm") "states/Aim Down [aim]/node" = SubResource("AnimationNodeAnimation_ukhqm")
"states/Aim Down/position" = Vector2(486, 196) "states/Aim Down [aim]/position" = Vector2(537, 197.5)
"states/Aim Up/node" = SubResource("AnimationNodeAnimation_nhlru") "states/Aim [aim] [turn]/node" = SubResource("AnimationNodeAnimation_nhlru")
"states/Aim Up/position" = Vector2(486, 98.5) "states/Aim [aim] [turn]/position" = Vector2(537, 98)
states/Aim_Fire/node = SubResource("AnimationNodeAnimation_8rbkq") states/End/position = Vector2(204, 197.5)
states/Aim_Fire/position = Vector2(647.5, 98) "states/Fire [aim]/node" = SubResource("AnimationNodeAnimation_8rbkq")
states/Idle/node = SubResource("AnimationNodeAnimation_dqnnp") "states/Fire [aim]/position" = Vector2(752.5, 98)
states/Idle/position = Vector2(338, 100) "states/Idle [turn_animated]/node" = SubResource("AnimationNodeAnimation_dqnnp")
"states/Idle [turn_animated]/position" = Vector2(338, 100)
states/Start/position = Vector2(204, 100) states/Start/position = Vector2(204, 100)
states/Walk/node = SubResource("AnimationNodeBlendTree_2mbyh") "states/Walk [turn]/node" = SubResource("AnimationNodeBlendTree_2mbyh")
states/Walk/position = Vector2(338, 197.5) "states/Walk [turn]/position" = Vector2(338, 197.5)
transitions = ["Idle", "Walk", SubResource("AnimationNodeStateMachineTransition_3mk5o"), "Walk", "Idle", SubResource("AnimationNodeStateMachineTransition_mf4y3"), "Idle", "Aim Up", SubResource("AnimationNodeStateMachineTransition_c81tj"), "Start", "Idle", SubResource("AnimationNodeStateMachineTransition_r26s5"), "Aim Up", "Aim Down", SubResource("AnimationNodeStateMachineTransition_4lybd"), "Aim Down", "Idle", SubResource("AnimationNodeStateMachineTransition_4im1q"), "Aim Down", "Walk", SubResource("AnimationNodeStateMachineTransition_5aafd"), "Aim Up", "Aim_Fire", SubResource("AnimationNodeStateMachineTransition_8f4gl"), "Aim_Fire", "Aim Up", SubResource("AnimationNodeStateMachineTransition_xnat3"), "Walk", "Aim Up", SubResource("AnimationNodeStateMachineTransition_12bos")] 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(-290.049, -113.5) graph_offset = Vector2(-351.759, -7)
[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: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: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
[sub_resource type="AnimationNodeBlendTree" id="AnimationNodeBlendTree_hiswf"] [sub_resource type="AnimationNodeBlendTree" id="AnimationNodeBlendTree_hiswf"]
graph_offset = Vector2(-510.4, 51.9) graph_offset = Vector2(-203, -3.5)
nodes/Actions/node = SubResource("AnimationNodeStateMachine_7smdg") nodes/Actions/node = SubResource("AnimationNodeStateMachine_7smdg")
nodes/Actions/position = Vector2(20, 140) nodes/Actions/position = Vector2(-80, 140)
node_connections = [&"output", 0, &"Actions"] 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"]
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_ewsvd"] [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_ewsvd"]
radius = 0.370388 radius = 0.370388
@ -126,7 +152,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.0337329, 0)
[node name="Skeleton3D" parent="CharacterModel/Character" index="0"] [node name="Skeleton3D" parent="CharacterModel/Character" index="0"]
bones/0/rotation = Quaternion(1.12928e-22, 1, 2.98023e-08, -1.94707e-07) bones/0/rotation = Quaternion(1.12928e-22, 1, 2.98023e-08, -1.94707e-07)
bones/1/position = Vector3(3.28472e-17, 0.826102, -2.26306e-09) bones/1/position = Vector3(3.28472e-17, 0.826102, -2.26306e-09)
bones/1/rotation = Quaternion(-0.0189873, -6.3066e-09, -1.08731e-09, 0.99982) bones/1/rotation = Quaternion(-0.0189874, -6.30661e-09, -1.08732e-09, 0.99982)
bones/2/rotation = Quaternion(0.0262842, 8.66579e-09, 1.56723e-09, 0.999655) bones/2/rotation = Quaternion(0.0262842, 8.66579e-09, 1.56723e-09, 0.999655)
bones/3/rotation = Quaternion(-0.013812, -0.124595, 8.42949e-05, 0.992112) bones/3/rotation = Quaternion(-0.013812, -0.124595, 8.42949e-05, 0.992112)
bones/4/rotation = Quaternion(0.0100466, -3.89644e-10, 6.78268e-10, 0.99995) bones/4/rotation = Quaternion(0.0100466, -3.89644e-10, 6.78268e-10, 0.99995)
@ -203,16 +229,18 @@ bones/51/scale = Vector3(1, 1, 1)
bones/52/rotation = Quaternion(-0.00225666, 0.00306653, -0.000453776, 0.999993) bones/52/rotation = Quaternion(-0.00225666, 0.00306653, -0.000453776, 0.999993)
bones/52/scale = Vector3(1, 1, 1) bones/52/scale = Vector3(1, 1, 1)
bones/53/rotation = Quaternion(0.665461, 0.000165138, -0.00238783, 0.746429) bones/53/rotation = Quaternion(0.665461, 0.000165138, -0.00238783, 0.746429)
bones/54/rotation = Quaternion(0.997309, 0.00549227, -0.0715033, -0.015225) bones/54/rotation = Quaternion(0.997309, 0.00549226, -0.0715033, -0.015225)
bones/54/scale = Vector3(1, 1, 1) bones/54/scale = Vector3(1, 1, 1)
bones/55/rotation = Quaternion(-0.00225666, -0.0030665, 0.000453778, 0.999993) bones/55/rotation = Quaternion(-0.00225666, -0.0030665, 0.000453778, 0.999993)
bones/55/scale = Vector3(1, 1, 1) bones/55/scale = Vector3(1, 1, 1)
bones/56/rotation = Quaternion(0.665461, -0.000165001, 0.00238774, 0.746429) bones/56/rotation = Quaternion(0.665461, -0.000165001, 0.00238774, 0.746429)
bones/56/scale = Vector3(1, 1, 1) bones/56/scale = Vector3(1, 1, 1)
bones/57/rotation = Quaternion(-0.707107, 8.33981e-07, 8.33981e-07, 0.707107) bones/57/rotation = Quaternion(-2.99921e-13, 0.707107, 0.707107, -2.99921e-13)
bones/58/rotation = Quaternion(-0.707107, -8.33981e-07, -8.33981e-07, 0.707107) bones/58/rotation = Quaternion(2.01446e-13, 0.707107, 0.707107, 2.01446e-13)
bones/59/rotation = Quaternion(-0.707107, 1.25097e-07, 1.25097e-07, 0.707107) bones/59/rotation = Quaternion(-0.707107, 1.25097e-07, 1.25097e-07, 0.707107)
bones/60/rotation = Quaternion(-0.707107, 1.25097e-07, 1.25097e-07, 0.707107) bones/60/rotation = Quaternion(-0.707107, 1.25097e-07, 1.25097e-07, 0.707107)
bones/61/rotation = Quaternion(-0.707107, 1.5189e-07, 1.5189e-07, 0.707107)
bones/62/rotation = Quaternion(-0.707107, 1.5189e-07, 1.5189e-07, 0.707107)
[node name="AnimationTree" type="AnimationTree" parent="CharacterModel"] [node name="AnimationTree" type="AnimationTree" parent="CharacterModel"]
unique_name_in_owner = true unique_name_in_owner = true
@ -221,16 +249,21 @@ root_motion_track = NodePath("Character/Skeleton3D:root")
tree_root = SubResource("AnimationNodeBlendTree_hiswf") tree_root = SubResource("AnimationNodeBlendTree_hiswf")
advance_expression_base_node = NodePath("../..") advance_expression_base_node = NodePath("../..")
anim_player = NodePath("../AnimationPlayer") anim_player = NodePath("../AnimationPlayer")
parameters/Actions/Walk/Forward/blend_amount = 1.0 "parameters/Actions/Walk [turn]/Forward/blend_amount" = 1.0
parameters/TurnAnimation/blend_amount = 0
[node name="Camera" type="Camera3D" parent="."] parameters/TurnDirection/blend_position = -1.0
unique_name_in_owner = true
transform = Transform3D(-1, -6.25962e-09, -8.71984e-08, -1.4325e-08, 0.995684, 0.0928047, 8.62412e-08, 0.0928047, -0.995684, -0.383042, 1.71014, -0.773267)
fov = 57.0005
far = 100.0
[node name="CollisionShape3D" type="CollisionShape3D" parent="."] [node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
shape = SubResource("CapsuleShape3D_ewsvd") shape = SubResource("CapsuleShape3D_ewsvd")
[node name="CameraParent" type="Node3D" parent="."]
unique_name_in_owner = true
top_level = true
[node name="Camera" type="Camera3D" parent="CameraParent"]
transform = Transform3D(-0.99874, 0.00857726, -0.0494361, -1.83936e-08, 0.98528, 0.170948, 0.0501747, 0.170733, -0.984039, -0.510957, 1.68471, -1.00759)
fov = 42.5804
far = 100.0
[editable path="CharacterModel"] [editable path="CharacterModel"]

View file

@ -41,13 +41,13 @@ dir_backward={
dir_left={ dir_left={
"deadzone": 0.2, "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) "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":0,"axis_value":-1.0,"script":null) , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":2,"axis_value":-1.0,"script":null)
] ]
} }
dir_right={ dir_right={
"deadzone": 0.2, "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) "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":0,"axis_value":1.0,"script":null) , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":2,"axis_value":1.0,"script":null)
] ]
} }
look_left={ look_left={
@ -70,6 +70,12 @@ look_down={
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":1.0,"script":null) "events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":1.0,"script":null)
] ]
} }
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)
]
}
[physics] [physics]

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:5ee6afa4a1a910d294d7de19ab4e26b4050d947297ada70b1f238439443855d5 oid sha256:3cbe2b511344382a9e2fdd63f3b066b54e181bfdf7c38543263bcfa227b12055
size 2332244 size 2501008

Binary file not shown.

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b0e11236244f62d387e703ee30887d3ba9076fd9b6b80f76d6a18086e1116a36
size 2256428

BIN
models/textures/rifle.kra~ Normal file

Binary file not shown.

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a28ab4d7a0be49abfb5de55ed47c05dfa2778649794b37755e8afd71407e5ef8
size 381127

BIN
models/textures/rifle.png~ Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 806 KiB

View file

@ -6,24 +6,30 @@
void Player::_bind_methods() { void Player::_bind_methods() {
#define CLASSNAME Player #define CLASSNAME Player
GDFUNCTION(get_input_directions); GDFUNCTION(get_input_directions);
GDFUNCTION(get_input_fire);
} }
void Player::_ready() { void Player::_ready() {
if(gd::Engine::get_singleton()->is_editor_hint()) if(gd::Engine::get_singleton()->is_editor_hint())
return; return;
this->anim_tree = this->get_node<gd::AnimationTree>("%AnimationTree"); this->anim_tree = this->get_node<gd::AnimationTree>("%AnimationTree");
this->sfm = gd::Object::cast_to<gd::AnimationNodeStateMachinePlayback>(this->anim_tree->get("parameters/Actions/playback")); this->fsm = gd::Object::cast_to<gd::AnimationNodeStateMachinePlayback>(this->anim_tree->get("parameters/Actions/playback"));
this->input = this->get_node<utils::PlayerInput>("%PlayerInput"); this->input = this->get_node<utils::PlayerInput>("%PlayerInput");
this->input->listen_to(utils::PlayerInput::Listener("dir_left", "dir_right", callable_mp(this, &Player::_on_dir_horizontal))); this->input->listen_to(utils::PlayerInput::Listener("dir_left", "dir_right", callable_mp(this, &Player::_on_dir_horizontal)));
this->input->listen_to(utils::PlayerInput::Listener("dir_backward", "dir_forward", callable_mp(this, &Player::_on_dir_vertical))); this->input->listen_to(utils::PlayerInput::Listener("dir_backward", "dir_forward", callable_mp(this, &Player::_on_dir_vertical)));
this->input->listen_to(utils::PlayerInput::Listener("fire", callable_mp(this, &Player::_on_fire)));
this->model_node = this->get_node<gd::Node3D>("%CharacterModel"); this->model_node = this->get_node<gd::Node3D>("%CharacterModel");
this->camera_parent = this->get_node<gd::Node3D>("%CameraParent");
this->camera_parent->set_global_rotation(this->get_global_rotation());
} }
void Player::_process(double delta) { void Player::_process(double delta) {
if(gd::Engine::get_singleton()->is_editor_hint()) if(gd::Engine::get_singleton()->is_editor_hint())
return; return;
this->anim_tree->set("parameters/Actions/Walk/Forward/blend_amount", gd::Math::clamp(this->input_directions.y, 0.5f, 1.f)); if(this->input_fire >= 0.0)
this->rotate_y(-this->input_directions.x * delta); this->input_fire -= delta;
this->process_rotate(delta);
this->process_transform_camera(delta);
} }
void Player::_physics_process(double delta [[maybe_unused]]) { void Player::_physics_process(double delta [[maybe_unused]]) {
@ -41,6 +47,29 @@ void Player::_physics_process(double delta [[maybe_unused]]) {
this->move_and_slide(); this->move_and_slide();
} }
void Player::process_transform_camera(double delta) {
this->camera_parent->set_global_position(this->get_global_position());
float const camera_speed{float(delta) * (this->fsm->get_current_node().contains("[aim]") ? this->AIMING_CAMERA_ROTATION_SPEED : this->CAMERA_ROTATION_SPEED)};
this->camera_parent->rotate_y(this->input_directions.x * -camera_speed);
}
void Player::process_rotate(double delta) {
if(this->fsm->get_current_node().contains("[turn]") || this->fsm->get_current_node().contains("[turn_animated]")) {
//! the signed angle difference between the left axes of the camera parent and Player
float const diff = -this->camera_parent->get_global_basis().get_column(0).signed_angle_to(this->get_global_basis().get_column(0), {0.f, 1.f, 0.f});
//! the maximum rotation to allow for this frame
float const speed{float(delta) * this->ROTATION_SPEED};
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 / (this->ROTATION_SPEED * .5f));
this->anim_tree->set("parameters/TurnAnimation/blend_amount", this->fsm->get_current_node().contains("[turn_animated]") ? 1.f : 0.f);
} else {
this->anim_tree->set("parameters/TurnAnimation/blend_amount", 0.f);
this->anim_tree->set("parameters/TurnDirection/blend_position", 0.f);
}
}
void Player::_on_dir_horizontal(gd::Ref<gd::InputEvent>, float value) { void Player::_on_dir_horizontal(gd::Ref<gd::InputEvent>, float value) {
this->input_directions.x = value; this->input_directions.x = value;
} }
@ -49,6 +78,18 @@ void Player::_on_dir_vertical(gd::Ref<gd::InputEvent>, float value) {
this->input_directions.y = value; this->input_directions.y = value;
} }
void Player::_on_fire(gd::Ref<gd::InputEvent>, float value) {
if(value > 0.f) {
this->input_fire = 0.5;
}
}
gd::Vector2 Player::get_input_directions() const { gd::Vector2 Player::get_input_directions() const {
return this->input_directions; return this->input_directions;
} }
bool Player::get_input_fire() {
bool const val = this->input_fire > 0.0;
this->input_fire = 0.0;
return val;
}

View file

@ -15,16 +15,27 @@ public:
virtual void _process(double delta) override; virtual void _process(double delta) override;
virtual void _physics_process(double delta) override; virtual void _physics_process(double delta) override;
void process_transform_camera(double delta);
void process_rotate(double delta);
void _on_dir_horizontal(gd::Ref<gd::InputEvent>, float value); void _on_dir_horizontal(gd::Ref<gd::InputEvent>, float value);
void _on_dir_vertical(gd::Ref<gd::InputEvent>, float value); void _on_dir_vertical(gd::Ref<gd::InputEvent>, float value);
void _on_fire(gd::Ref<gd::InputEvent>, float value);
gd::Vector2 get_input_directions() const; gd::Vector2 get_input_directions() const;
bool get_input_fire();
private: private:
gd::AnimationTree *anim_tree{nullptr}; gd::AnimationTree *anim_tree{nullptr};
gd::AnimationNodeStateMachinePlayback *sfm{nullptr}; gd::AnimationNodeStateMachinePlayback *fsm{nullptr};
gd::Node3D *camera_parent{nullptr};
utils::PlayerInput *input{nullptr}; utils::PlayerInput *input{nullptr};
gd::Node3D *model_node{nullptr}; gd::Node3D *model_node{nullptr};
gd::Vector2 input_directions{}; gd::Vector2 input_directions{0.f, 0.f};
double input_fire{0.0};
float const ROTATION_SPEED{1.5f};
float const CAMERA_ROTATION_SPEED{2.f};
float const AIMING_CAMERA_ROTATION_SPEED{1.f};
}; };
#endif // !TR_PLAYER_HPP #endif // !TR_PLAYER_HPP