From f344c228598ae44e7572c1d8614c37ef223ad5db Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Wed, 5 Mar 2025 14:09:56 +0100 Subject: [PATCH] Some minor changes --- .../src/scenes/player/aiming_modifier.gd.uid | 2 +- godot/src/scenes/player/player.gd | 5 ++ godot/src/scenes/player/player.tscn | 47 ++++++++++++---- godot/src/scenes/player/shooting_modifier.gd | 53 +++++++++++++++++++ .../scenes/player/shooting_modifier.gd.uid | 1 + 5 files changed, 96 insertions(+), 12 deletions(-) create mode 100644 godot/src/scenes/player/shooting_modifier.gd create mode 100644 godot/src/scenes/player/shooting_modifier.gd.uid diff --git a/godot/src/scenes/player/aiming_modifier.gd.uid b/godot/src/scenes/player/aiming_modifier.gd.uid index 10d7931..69a87a2 100644 --- a/godot/src/scenes/player/aiming_modifier.gd.uid +++ b/godot/src/scenes/player/aiming_modifier.gd.uid @@ -1 +1 @@ -uid://bbnh6vbh5cvtq +uid://btsjychrq887j diff --git a/godot/src/scenes/player/player.gd b/godot/src/scenes/player/player.gd index 41bdde8..cffe2b7 100644 --- a/godot/src/scenes/player/player.gd +++ b/godot/src/scenes/player/player.gd @@ -18,6 +18,11 @@ func _input(event: InputEvent) -> void: v_rotation.rotation.x = clamp( v_rotation.rotation.x - look_dir.y * camera_sens * 1.0, -1.5, 1.5 ) + if Input.is_action_pressed("shoot"): + $VisualsController/Model/Armature/Skeleton3D/ShootingModifier.shooting = true + else: + $VisualsController/Model/Armature/Skeleton3D/ShootingModifier.shooting = false + func _physics_process(delta: float) -> void: diff --git a/godot/src/scenes/player/player.tscn b/godot/src/scenes/player/player.tscn index 20bbd0f..0b0fe5d 100644 --- a/godot/src/scenes/player/player.tscn +++ b/godot/src/scenes/player/player.tscn @@ -1,11 +1,12 @@ -[gd_scene load_steps=43 format=4 uid="uid://b2ogo643mvror"] +[gd_scene load_steps=44 format=4 uid="uid://b2ogo643mvror"] [ext_resource type="Script" uid="uid://db5kuorgtnsmg" path="res://src/scenes/player/player.gd" id="1_ytbry"] [ext_resource type="Script" uid="uid://cqk3cp4t6sg1l" path="res://src/camera/camera_mount/camera_mount.gd" id="2_7uvid"] [ext_resource type="Script" uid="uid://fhu1ep8ym4ch" path="res://src/scenes/player/player_movement.gd" id="2_300um"] [ext_resource type="Script" uid="uid://y6hg3gyagmjh" path="res://src/scenes/player/look_forward_modifier.gd" id="2_hfvys"] [ext_resource type="Script" uid="uid://tf0b0xiedgvx" path="res://src/scenes/player/visuals_controller.gd" id="4_2fh3g"] -[ext_resource type="Script" uid="uid://bbnh6vbh5cvtq" path="res://src/scenes/player/aiming_modifier.gd" id="5_lh6av"] +[ext_resource type="Script" uid="uid://bbnh6vbh5cvtq" path="res://src/scenes/player/shooting_modifier.gd" id="5_lh6av"] +[ext_resource type="Script" uid="uid://btsjychrq887j" path="res://src/scenes/player/aiming_modifier.gd" id="6_6ap8y"] [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_4kq8i"] radius = 0.4 @@ -2961,7 +2962,7 @@ bones/5/parent = 4 bones/5/rest = Transform3D(1, -2.18268e-11, 3.38872e-13, 2.18268e-11, 1, 1.21453e-08, -3.38873e-13, -1.21453e-08, 1, 2.56128e-08, 0.103218, 0.0314243) bones/5/enabled = true bones/5/position = Vector3(2.98023e-08, 0.103218, 0.0314242) -bones/5/rotation = Quaternion(-0.0646294, -0.538836, 0.838791, -0.0436805) +bones/5/rotation = Quaternion(-0.0401185, 0.192201, 0.0901439, 0.976383) bones/5/scale = Vector3(1, 1, 1) bones/6/name = "mixamorig_HeadTop_End" bones/6/parent = 5 @@ -3401,7 +3402,7 @@ rotation_order = 2 top_level = false visible = true visibility_parent = NodePath("") -active = true +active = false influence = 1.0 script = ExtResource("2_hfvys") target_object = NodePath("../../../../../MovementController/VRotation/EyeMarker/TargetMarker") @@ -3415,7 +3416,7 @@ use_magnet = true target_node = NodePath("../../../../Weapon/Ak-47/SecondHand") max_iterations = 1 -[node name="AimingModifier" type="SkeletonModifier3D" parent="VisualsController/Model/Armature/Skeleton3D" node_paths=PackedStringArray("look_raycast", "aim_raycast")] +[node name="ShootingModifier" type="SkeletonModifier3D" parent="VisualsController/Model/Armature/Skeleton3D" node_paths=PackedStringArray("look_raycast", "aim_raycast")] _import_path = NodePath("") unique_name_in_owner = false process_mode = 0 @@ -3437,23 +3438,47 @@ script = ExtResource("5_lh6av") look_raycast = NodePath("../../../../Camera/CameraMount/Camera3D/RayCast3D") aim_raycast = NodePath("../../../../Weapon/Ak-47/RayCast3D") bone = "mixamorig_RightHand" -aiming = true metadata/_custom_type_script = "uid://bbnh6vbh5cvtq" +[node name="AimingModifier" type="SkeletonModifier3D" parent="VisualsController/Model/Armature/Skeleton3D" node_paths=PackedStringArray("look_raycast", "aim_raycast")] +_import_path = NodePath("") +unique_name_in_owner = false +process_mode = 0 +process_priority = 0 +process_physics_priority = 0 +process_thread_group = 0 +physics_interpolation_mode = 0 +auto_translate_mode = 0 +editor_description = "" +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) +rotation_edit_mode = 0 +rotation_order = 2 +top_level = false +visible = true +visibility_parent = NodePath("") +active = false +influence = 1.0 +script = ExtResource("6_6ap8y") +look_raycast = NodePath("../../../../Camera/CameraMount/Camera3D/RayCast3D") +aim_raycast = NodePath("../../../../Weapon/Ak-47/RayCast3D") +bone = "mixamorig_RightHand" +aiming = true +metadata/_custom_type_script = "uid://btsjychrq887j" + [node name="AnimationPlayer" type="AnimationPlayer" parent="VisualsController/Model"] libraries = { &"": SubResource("AnimationLibrary_2wvud") } [node name="Weapon" type="BoneAttachment3D" parent="VisualsController"] -transform = Transform3D(0.0508198, -0.0186759, -0.998443, 0.997092, 0.0573049, 0.0496806, 0.0562901, -0.998096, 0.0215334, 0.143142, 1.33176, -0.191155) +transform = Transform3D(0.101862, -0.0272939, -0.994332, 0.989693, 0.103634, 0.0985431, 0.10036, -0.994155, 0.037569, 0.143142, 1.33176, -0.191155) bone_name = "mixamorig_RightHand" bone_idx = 34 use_external_skeleton = true external_skeleton = NodePath("../Model/Armature/Skeleton3D") [node name="Ak-47" type="Node3D" parent="VisualsController/Weapon"] -transform = Transform3D(4.37115e-08, 1, -8.74227e-08, 1, -4.37124e-08, 2.97303e-13, -8.99497e-15, -8.74224e-08, -1, 0.0562181, 0.251002, 0.037343) +transform = Transform3D(-0.153692, 0.988114, -0.00300123, 0.987998, 0.153626, -0.0160673, -0.0154152, -0.00543465, -0.999867, 0.0417417, 0.249486, 0.0359016) [node name="Sketchfab_Scene" type="Node3D" parent="VisualsController/Weapon/Ak-47"] @@ -3539,14 +3564,14 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.156969, -0.0748217, 0) transform = Transform3D(-0.959214, -0.192555, -0.206956, -0.229, 0.958549, 0.169536, 0.165733, 0.210014, -0.963549, 0.172895, -0.00541341, 0) [node name="Camera" type="BoneAttachment3D" parent="VisualsController"] -transform = Transform3D(-0.999896, 2.67307e-05, -0.00528184, 2.30838e-10, 0.999959, 0.00511401, 0.00528105, 0.00511401, -0.999887, 0.0645052, 1.5075, -0.0727704) +transform = Transform3D(-0.882486, 0.444076, 0.154387, 0.384564, 0.870737, -0.306385, -0.270498, -0.211015, -0.939218, 0.0645053, 1.5075, -0.0727706) bone_name = "mixamorig_Head" bone_idx = 5 use_external_skeleton = true external_skeleton = NodePath("../Model/Armature/Skeleton3D") [node name="CameraMount" type="Node3D" parent="VisualsController/Camera"] -transform = Transform3D(-1, 0, -8.56817e-08, 2.32831e-10, 1, -1.86265e-09, 8.56817e-08, -7.45058e-09, -1, -0.00467635, 0.0690886, 0.200729) +transform = Transform3D(-0.883117, 0.336937, -0.326464, 0.392774, 0.911547, -0.1217, 0.256581, -0.235702, -0.937343, -0.00467628, 0.0690887, 0.200729) script = ExtResource("2_7uvid") camera_name = "ObservingCamera1" @@ -3556,5 +3581,5 @@ current = true near = 0.01 [node name="RayCast3D" type="RayCast3D" parent="VisualsController/Camera/CameraMount/Camera3D"] -transform = Transform3D(0.999912, -1.77636e-15, -4.54747e-13, -1.77636e-15, 0.99991, -2.32831e-10, 0, 0, 0.999932, 2.88431e-06, -0.0532352, -0.7775) +transform = Transform3D(0.999912, -1.77636e-15, -4.54747e-13, -1.77636e-15, 0.99991, -2.32831e-10, 0, 0, 0.999932, 0, 0, 0) target_position = Vector3(0, 0, -30) diff --git a/godot/src/scenes/player/shooting_modifier.gd b/godot/src/scenes/player/shooting_modifier.gd new file mode 100644 index 0000000..b8768b7 --- /dev/null +++ b/godot/src/scenes/player/shooting_modifier.gd @@ -0,0 +1,53 @@ +@tool + +class_name ShootingModifier +extends SkeletonModifier3D + +@export var look_raycast: RayCast3D +@export var aim_raycast: RayCast3D + +@export_enum(" ") var bone: String +@export var shooting: bool = false + +func _validate_property(property: Dictionary) -> void: + if property.name == "bone": + var skeleton: Skeleton3D = get_skeleton() + if skeleton: + property.hint = PROPERTY_HINT_ENUM + property.hint_string = skeleton.get_concatenated_bone_names() + +func _process_modification() -> void: + var skeleton: Skeleton3D = get_skeleton() + if !skeleton: + return + var bone_idx: int = skeleton.find_bone(bone) + if bone_idx == -1: + return + + var target_position = look_raycast.get_collision_point() if look_raycast.is_colliding() else look_raycast.global_transform.origin + - look_raycast.global_transform.basis.z * 30 + var target_position_local = to_local(target_position) + #aim_raycast.= target_position + + var bone_pose = skeleton.get_bone_global_pose(bone_idx) + #print(new_basis) + + #skeleton.set_bone_global_pose(bone_idx, Transform3D(bone_pose.basis, bone_pose.origin + Vector3(0, 0, 1))) + var gun_position = aim_raycast.global_transform.origin + var gun_direction = (target_position - gun_position).normalized() + if shooting: + var new_pose = bone_pose.looking_at(target_position_local, Vector3.FORWARD, true) + var new_basis: Basis + new_basis.y = new_pose.basis.z + #new_basis.y.y = -new_basis.y.y + new_basis.z = new_pose.basis.x + new_basis.x = new_pose.basis.y + new_pose.basis = new_basis + + skeleton.set_bone_global_pose(bone_idx, new_pose) + + +func z_and_y_inverse(v : Vector3) -> Vector3 : + var tmp: float = v.x + v.x = v.y + v.y = tmp + return v diff --git a/godot/src/scenes/player/shooting_modifier.gd.uid b/godot/src/scenes/player/shooting_modifier.gd.uid new file mode 100644 index 0000000..10d7931 --- /dev/null +++ b/godot/src/scenes/player/shooting_modifier.gd.uid @@ -0,0 +1 @@ +uid://bbnh6vbh5cvtq