Get grabbed idiot!!

This commit is contained in:
Rob Kelly 2025-04-19 12:08:16 -06:00
parent 028b59cddb
commit 127fb9be38
3 changed files with 231 additions and 7 deletions

View File

@ -35,6 +35,11 @@ func camera_motion(motion: Vector2) -> void:
) )
func reset_pitch(tween_duration: float) -> void:
var tween := create_tween()
tween.tween_property(self, "_target:x", 0, tween_duration)
func _physics_process(delta: float) -> void: func _physics_process(delta: float) -> void:
var mouse_accel: float = Game.settings.mouse_acceleration var mouse_accel: float = Game.settings.mouse_acceleration
if player.firing: if player.firing:

View File

@ -7,6 +7,13 @@ class_name Player extends CharacterBody3D
@export var activity_enabled := true @export var activity_enabled := true
@export var look_enabled := true @export var look_enabled := true
@export var camera_rumble: float:
set(value):
if Game.settings.enable_screen_shake:
cam_rumbler.intensity = value
get:
return cam_rumbler.intensity
@export_category("Movement") @export_category("Movement")
@export_group("Speed") @export_group("Speed")
@export var run_speed := 80.0 @export var run_speed := 80.0
@ -43,6 +50,7 @@ var _was_on_floor := false
@onready var hud: PlayerHUD = %PlayerHUD @onready var hud: PlayerHUD = %PlayerHUD
@onready var camera_pivot: CameraController = %CameraPivot @onready var camera_pivot: CameraController = %CameraPivot
@onready var cam_rumbler: Rumbler3D = %CamRumbler
@onready var interact_ray: RayCast3D = %InteractRay @onready var interact_ray: RayCast3D = %InteractRay
@ -53,6 +61,7 @@ var _was_on_floor := false
@onready var crouch_head_area: Area3D = %CrouchHeadArea @onready var crouch_head_area: Area3D = %CrouchHeadArea
@onready var crouch_animation: AnimationPlayer = %CrouchAnimation @onready var crouch_animation: AnimationPlayer = %CrouchAnimation
@onready var grab_animation: AnimationPlayer = %GrabAnimation
@onready var jump_game_sound_emitter: GameSoundEmitter = %JumpGameSoundEmitter @onready var jump_game_sound_emitter: GameSoundEmitter = %JumpGameSoundEmitter
@ -131,12 +140,33 @@ func toggle_crouch() -> void:
crouch() crouch()
## Get fuckign grabbed, idiot!
## Begin grab death sequence animation.
func get_grabbed(look_target: Vector3) -> void:
movement_enabled = false
activity_enabled = false
look_enabled = false
uncrouch()
grab_animation.play("get_grabbed")
camera_pivot.reset_pitch(0.4)
#endregion #endregion
#region _physics_process #region _physics_process
func _physics_process(delta: float) -> void: func _physics_process(delta: float) -> void:
# REMOVEME
if Input.is_action_just_pressed("ui_page_down"):
get_grabbed(Vector3.FORWARD)
if Input.is_action_just_pressed("ui_page_up"):
movement_enabled = true
activity_enabled = true
look_enabled = true
grab_animation.play("RESET")
# Will be null if no valid interactor is selected. # Will be null if no valid interactor is selected.
var interactive: Interactive = interact_ray.get_collider() as Interactive var interactive: Interactive = interact_ray.get_collider() as Interactive
hud.select_interactive(interactive) hud.select_interactive(interactive)

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=57 format=3 uid="uid://bwe2jdmvinhqd"] [gd_scene load_steps=62 format=3 uid="uid://bwe2jdmvinhqd"]
[ext_resource type="Script" uid="uid://buwh0g1ga2aka" path="res://src/player/player.gd" id="1_npueo"] [ext_resource type="Script" uid="uid://buwh0g1ga2aka" path="res://src/player/player.gd" id="1_npueo"]
[ext_resource type="Script" uid="uid://cx1yt0drthpw3" path="res://src/player/camera_controller.gd" id="2_veeqv"] [ext_resource type="Script" uid="uid://cx1yt0drthpw3" path="res://src/player/camera_controller.gd" id="2_veeqv"]
@ -7,6 +7,7 @@
[ext_resource type="Script" uid="uid://cwy3akimaeib" path="res://src/player/tool_mount.gd" id="3_jiejy"] [ext_resource type="Script" uid="uid://cwy3akimaeib" path="res://src/player/tool_mount.gd" id="3_jiejy"]
[ext_resource type="PackedScene" uid="uid://dq1x21tq06dud" path="res://src/ui/hud/player_hud.tscn" id="5_jvafu"] [ext_resource type="PackedScene" uid="uid://dq1x21tq06dud" path="res://src/ui/hud/player_hud.tscn" id="5_jvafu"]
[ext_resource type="PackedScene" uid="uid://qknkdy6aics1" path="res://src/equipment/toothbrush/toothbrush.tscn" id="6_o822w"] [ext_resource type="PackedScene" uid="uid://qknkdy6aics1" path="res://src/equipment/toothbrush/toothbrush.tscn" id="6_o822w"]
[ext_resource type="Script" uid="uid://b274q7uvn0cvp" path="res://src/ui/rumbler_3d.gd" id="7_p6grl"]
[ext_resource type="Script" uid="uid://b1vyq7e81nyt0" path="res://src/player/headbob_controller.gd" id="7_x42xx"] [ext_resource type="Script" uid="uid://b1vyq7e81nyt0" path="res://src/player/headbob_controller.gd" id="7_x42xx"]
[ext_resource type="Script" uid="uid://ecrhsueph7at" path="res://src/player/footsteps/footstep_controller.gd" id="9_hja65"] [ext_resource type="Script" uid="uid://ecrhsueph7at" path="res://src/player/footsteps/footstep_controller.gd" id="9_hja65"]
[ext_resource type="Script" uid="uid://brqa2wbtaspw4" path="res://src/player/footsteps/foot_controller.gd" id="9_l271a"] [ext_resource type="Script" uid="uid://brqa2wbtaspw4" path="res://src/player/footsteps/foot_controller.gd" id="9_l271a"]
@ -430,6 +431,175 @@ _data = {
[sub_resource type="SphereShape3D" id="SphereShape3D_p6grl"] [sub_resource type="SphereShape3D" id="SphereShape3D_p6grl"]
radius = 3.0 radius = 3.0
[sub_resource type="Animation" id="Animation_e7e1q"]
length = 0.001
tracks/0/type = "bezier"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:position:x")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"handle_modes": PackedInt32Array(0),
"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0),
"times": PackedFloat32Array(0)
}
tracks/1/type = "bezier"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:position:y")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"handle_modes": PackedInt32Array(0),
"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0),
"times": PackedFloat32Array(0)
}
tracks/2/type = "bezier"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:position:z")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"handle_modes": PackedInt32Array(0),
"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0),
"times": PackedFloat32Array(0)
}
tracks/3/type = "bezier"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:rotation:x")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"handle_modes": PackedInt32Array(0),
"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0),
"times": PackedFloat32Array(0)
}
tracks/4/type = "bezier"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:rotation:y")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"handle_modes": PackedInt32Array(0),
"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0),
"times": PackedFloat32Array(0)
}
tracks/5/type = "bezier"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:rotation:z")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"handle_modes": PackedInt32Array(0),
"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0),
"times": PackedFloat32Array(0)
}
tracks/6/type = "bezier"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath(".:camera_rumble")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"handle_modes": PackedInt32Array(0),
"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0),
"times": PackedFloat32Array(0)
}
[sub_resource type="Animation" id="Animation_p6grl"]
resource_name = "get_grabbed"
length = 6.0
tracks/0/type = "bezier"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:position:x")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"handle_modes": PackedInt32Array(0, 0),
"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0, 0, -0.25, 0, 0.25, 0),
"times": PackedFloat32Array(0, 0.5)
}
tracks/1/type = "bezier"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:position:y")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"handle_modes": PackedInt32Array(0, 0, 0, 0),
"points": PackedFloat32Array(0, -0.25, 0, 0.2, 0.00167316, -1.385, -0.0999666, 0.665918, 0.0333333, 0.566197, -1.385, -0.0416667, 0.6662, 0.0083333, 0.113592, -1.385, -0.0876723, -0.0501441, 0.25, 0),
"times": PackedFloat32Array(0, 0.333333, 0.566667, 0.8)
}
tracks/2/type = "bezier"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:position:z")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"handle_modes": PackedInt32Array(0, 0, 0, 0, 0, 0),
"points": PackedFloat32Array(0, -0.25, 0, 0.333333, -0.39514, -0.254137, -0.0666667, -0.000457972, 0.25, 0, -0.254137, -0.0666667, -0.000457972, 0.0601447, 0.231214, 0.304548, -0.563731, -0.0123209, 0.25, 0, 0.304548, -0.25, 0, 0.06, 0.231, 0.885, -0.563731, -0.0123209, 0.25, 0),
"times": PackedFloat32Array(0, 0.366667, 2.96667, 3.56667, 5.26667, 5.86667)
}
tracks/3/type = "bezier"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:rotation:x")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"handle_modes": PackedInt32Array(0, 0, 0, 0),
"points": PackedFloat32Array(0, -0.05, 0, 0.133333, 2.74114, 0, -0.1, 0.428854, 0.0666667, 0.168909, 0, -0.0666667, 0.178293, 0.0083333, 0.0844504, -1.20654e-08, -0.0876723, -0.0331565, 0.25, 0),
"times": PackedFloat32Array(0, 0.333333, 0.566667, 0.8)
}
tracks/4/type = "bezier"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:rotation:y")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"handle_modes": PackedInt32Array(0, 0, 0, 0, 0, 0),
"points": PackedFloat32Array(0, -0.25, 0, 0.333333, -0.0229232, -1.0426, -0.933333, -0.279974, 0.25, 0, -1.043, -0.25, 0, 0.0333333, 0.158983, -0.878928, -0.25, 0, 0.25, 0, -0.878928, -0.25, 0, 0.033, 0.159, -0.758089, -0.25, 0, 0.25, 0),
"times": PackedFloat32Array(0, 0.8, 2.96667, 3.56667, 5.26667, 5.86667)
}
tracks/5/type = "bezier"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:rotation:z")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"handle_modes": PackedInt32Array(0, 0, 0, 0, 0, 0, 0),
"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0, 1.5708, -0.0876722, 0.463211, 0.0344108, -0.0689299, 1.5708, -0.0322559, -0.00752902, 0.25, 0, 1.571, -0.25, 0, 0, 0.04, 1.68, -0.25, 0, 0.25, 0, 1.68, -0.25, 0, 0, 0.04, 1.71, -0.25, 0, 0.25, 0),
"times": PackedFloat32Array(0, 0.566667, 0.733333, 2.96667, 3.66667, 5.26667, 5.96667)
}
tracks/6/type = "bezier"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath(".:camera_rumble")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"handle_modes": PackedInt32Array(0, 0, 0, 0, 0, 0, 0),
"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0, 0, -0.25, 0, 0, 0.161517, 0, -0.767, 0, 0.25, 0, 0, -0.25, 0, 0, 0.02, 0, -0.5, 0, 0.25, 0, 0, -0.25, 0, 0, 0.02, 0, -0.5, 0, 0.25, 0),
"times": PackedFloat32Array(0, 0.3, 1, 2.96667, 3.66667, 5.26667, 5.96667)
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_e7e1q"]
_data = {
&"RESET": SubResource("Animation_e7e1q"),
&"get_grabbed": SubResource("Animation_p6grl")
}
[sub_resource type="PlaneMesh" id="PlaneMesh_p6grl"]
[node name="Player" type="CharacterBody3D"] [node name="Player" type="CharacterBody3D"]
collision_layer = 8 collision_layer = 8
collision_mask = 33 collision_mask = 33
@ -459,15 +629,23 @@ visible = false
unique_name_in_owner = true unique_name_in_owner = true
visible = false visible = false
[node name="Camera3D" type="Camera3D" parent="CameraPosition/CameraPivot"] [node name="TransformedPosition" type="Node3D" parent="CameraPosition/CameraPivot"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
[node name="CamRumbler" type="Node3D" parent="CameraPosition/CameraPivot/TransformedPosition"]
unique_name_in_owner = true
script = ExtResource("7_p6grl")
metadata/_custom_type_script = "uid://b274q7uvn0cvp"
[node name="Camera3D" type="Camera3D" parent="CameraPosition/CameraPivot/TransformedPosition/CamRumbler"]
current = true current = true
[node name="InteractRay" type="RayCast3D" parent="CameraPosition/CameraPivot/Camera3D"] [node name="InteractRay" type="RayCast3D" parent="CameraPosition/CameraPivot/TransformedPosition/CamRumbler/Camera3D"]
unique_name_in_owner = true unique_name_in_owner = true
target_position = Vector3(0, 0, -1.5) target_position = Vector3(0, 0, -1.5)
collision_mask = 2 collision_mask = 2
[node name="FarLight" type="OmniLight3D" parent="CameraPosition/CameraPivot/Camera3D"] [node name="FarLight" type="OmniLight3D" parent="CameraPosition/CameraPivot/TransformedPosition/CamRumbler/Camera3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.1) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.1)
light_energy = 0.05 light_energy = 0.05
light_specular = 0.01 light_specular = 0.01
@ -475,18 +653,18 @@ light_cull_mask = 4294967293
omni_range = 50.0 omni_range = 50.0
omni_attenuation = 0.0 omni_attenuation = 0.0
[node name="NearLight" type="OmniLight3D" parent="CameraPosition/CameraPivot/Camera3D"] [node name="NearLight" type="OmniLight3D" parent="CameraPosition/CameraPivot/TransformedPosition/CamRumbler/Camera3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.1) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.1)
light_specular = 0.01 light_specular = 0.01
light_cull_mask = 4294967293 light_cull_mask = 4294967293
omni_range = 2.0 omni_range = 2.0
[node name="HeadbobAnimation" type="AnimationPlayer" parent="CameraPosition/CameraPivot/Camera3D"] [node name="HeadbobAnimation" type="AnimationPlayer" parent="CameraPosition/CameraPivot/TransformedPosition/CamRumbler/Camera3D"]
libraries = { libraries = {
&"": SubResource("AnimationLibrary_l271a") &"": SubResource("AnimationLibrary_l271a")
} }
[node name="HeadbobController" type="AnimationTree" parent="CameraPosition/CameraPivot/Camera3D/HeadbobAnimation"] [node name="HeadbobController" type="AnimationTree" parent="CameraPosition/CameraPivot/TransformedPosition/CamRumbler/Camera3D/HeadbobAnimation"]
unique_name_in_owner = true unique_name_in_owner = true
root_node = NodePath("%HeadbobController/../..") root_node = NodePath("%HeadbobController/../..")
tree_root = SubResource("AnimationNodeBlendTree_ylhto") tree_root = SubResource("AnimationNodeBlendTree_ylhto")
@ -591,3 +769,14 @@ metadata/_custom_type_script = "uid://c5o1d2shq2qig"
[node name="CollisionShape3D" type="CollisionShape3D" parent="JumpGameSoundEmitter"] [node name="CollisionShape3D" type="CollisionShape3D" parent="JumpGameSoundEmitter"]
shape = SubResource("SphereShape3D_p6grl") shape = SubResource("SphereShape3D_p6grl")
[node name="GrabAnimation" type="AnimationPlayer" parent="."]
unique_name_in_owner = true
libraries = {
&"": SubResource("AnimationLibrary_e7e1q")
}
[node name="DebugFloor" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0)
visible = false
mesh = SubResource("PlaneMesh_p6grl")