diff --git a/assets/boombox.tscn b/assets/boombox.tscn index 82e8ed7..e8e2340 100644 --- a/assets/boombox.tscn +++ b/assets/boombox.tscn @@ -81,7 +81,7 @@ shadow_mesh = SubResource("ArrayMesh_nxwjy") [sub_resource type="BoxShape3D" id="BoxShape3D_kg5u6"] size = Vector3(2.10059, 1.23395, 0.909241) -[node name="Boombox" type="RigidBody3D" groups=["breakable", "interact", "scene_rigidbody"]] +[node name="Boombox" type="RigidBody3D" groups=["breakable", "interact", "moveable", "scene_rigidbody"]] collision_layer = 32 collision_mask = 109 continuous_cd = true diff --git a/assets/bottle_1.tscn b/assets/bottle_1.tscn index 559388e..f6337b8 100644 --- a/assets/bottle_1.tscn +++ b/assets/bottle_1.tscn @@ -46,9 +46,10 @@ shadow_mesh = SubResource("ArrayMesh_31808") [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_cymse"] points = PackedVector3Array(0.202827, -0.297797, 0.00403334, -0.192761, -0.358884, -0.0287528, -0.173827, 0.327577, -0.0768052, -0.0122833, 0.378837, 0.200603, 0.138545, 0.401308, -0.147351, 0.0402858, -0.414367, -0.213567, 0.149043, -0.414367, 0.167233, 0.0765383, 0.746167, 0.0402858, -0.147295, -0.372155, 0.138494, -0.147351, 0.401308, 0.138544, -0.144509, 0.396888, -0.144509, 0.150261, 0.393288, 0.133962, -0.0684716, 0.746167, -0.0684716, -0.213567, -0.414367, 0.0402858, 0.200602, 0.378837, -0.0122833, -0.0289072, 0.396497, -0.193687, -0.143839, -0.359867, -0.143839, -0.0503667, 0.746167, 0.0765383, -0.193691, 0.396501, -0.0289078, 0.138495, -0.372156, -0.147295, 0.00403334, -0.297797, 0.202827, 0.0584333, 0.746167, -0.0684716, 0.167233, -0.414367, 0.149043, -0.190615, 0.392913, 0.036462, 0.036462, 0.392913, -0.190615, -0.0866191, 0.746167, 0.0220957, 0.0402858, 0.746167, 0.0765383, 0.0200816, 0.375335, 0.197369, 0.19737, 0.375336, 0.0200817, 0.133962, 0.393288, 0.15026, 0.0220957, 0.746167, -0.0866191, -0.0455433, -0.362918, 0.185802) -[node name="bottle1" type="RigidBody3D" groups=["breakable", "scene_rigidbody"]] +[node name="bottle1" type="RigidBody3D" groups=["breakable", "moveable", "scene_rigidbody"]] collision_layer = 32 collision_mask = 125 +continuous_cd = true script = ExtResource("1_sfpqr") broken_object = ExtResource("2_e3uhf") diff --git a/assets/crate1.tscn b/assets/crate1.tscn index 799ce72..d87eee7 100644 --- a/assets/crate1.tscn +++ b/assets/crate1.tscn @@ -48,9 +48,10 @@ shadow_mesh = SubResource("ArrayMesh_1l8qq") [sub_resource type="BoxShape3D" id="BoxShape3D_rhc2e"] size = Vector3(2.20142, 2.09351, 2.20142) -[node name="Crate1" type="RigidBody3D" groups=["scene_rigidbody", "weight"]] +[node name="Crate1" type="RigidBody3D" groups=["moveable", "scene_rigidbody", "weight"]] collision_layer = 33 collision_mask = 125 +continuous_cd = true [node name="Crate1" type="MeshInstance3D" parent="."] transform = Transform3D(0.102752, 0, 0, 0, 0.997525, 0, 0, 0, 0.102752, -0.000747025, -0.00163035, 7.72476e-05) diff --git a/assets/dead_cam.tscn b/assets/dead_cam.tscn index 6c9b674..d3414bf 100644 --- a/assets/dead_cam.tscn +++ b/assets/dead_cam.tscn @@ -57,6 +57,7 @@ script = ExtResource("1_qxtd8") collision_layer = 0 gravity_scale = 0.0 continuous_cd = true +linear_damp_mode = 1 [node name="CollisionShape3D" type="CollisionShape3D" parent="CameraRigid"] shape = SubResource("SphereShape3D_qnbpl") diff --git a/assets/player.tscn b/assets/player.tscn index 9ebcd59..4a5e145 100644 --- a/assets/player.tscn +++ b/assets/player.tscn @@ -193,6 +193,9 @@ material = SubResource("ShaderMaterial_ubnx7") offset_right = 3840.0 offset_bottom = 2160.0 +[node name="MoveableHolder" type="Node3D" parent="Head"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.287198, -2.1034) + [node name="pick_up_detection" type="Area3D" parent="."] collision_layer = 0 collision_mask = 16 diff --git a/assets/table1.tscn b/assets/table1.tscn index dcfab5d..1e5e56d 100644 --- a/assets/table1.tscn +++ b/assets/table1.tscn @@ -77,7 +77,7 @@ points = PackedVector3Array(0.531746, 0.031746, 0.888811, -0.515873, -0.031746, [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_ujyek"] points = PackedVector3Array(0.531746, 0.031746, 0.0951418, -0.515873, -0.031746, -0.888793, -0.515873, 0.031746, -0.888793, 0.531746, -0.031746, -0.888793, -0.515873, -0.031746, 0.0951418, -0.515873, 0.031746, 0.0951418, 0.531746, 0.031746, -0.888793, 0.531746, -0.031746, 0.0951418) -[node name="table1" type="RigidBody3D"] +[node name="table1" type="RigidBody3D" groups=["moveable"]] collision_layer = 32 collision_mask = 125 mass = 15.0 diff --git a/project.godot b/project.godot index 37bc749..affc351 100644 --- a/project.godot +++ b/project.godot @@ -42,6 +42,7 @@ weight="" switch_override="" magnet="" hud="" +moveable="" [input] diff --git a/scripts/dead_cam.gd b/scripts/dead_cam.gd index beba6fe..9018c03 100644 --- a/scripts/dead_cam.gd +++ b/scripts/dead_cam.gd @@ -95,7 +95,7 @@ func _process(delta): look_ray.global_position = target.global_position look_ray.look_at(Vector3(level_control.player.global_position), Vector3.UP) camera.rotation = lerp(camera.rotation,look_ray.rotation,delta * CAMERA_LOOK_SPEED) - camera.fov = lerp(camera.fov, 100.0, delta * 100) + camera.fov = lerp(camera.fov, 100.0, delta * 75) 2: var target_pos_adjusted = Vector3(target.position.x,target.position.y + 2.1,target.position.z) cam_target.global_position = lerp(cam_target.global_position,target_pos_adjusted,delta * MOVE_SPEED) diff --git a/scripts/player.gd b/scripts/player.gd index 4009d98..929b2f9 100644 --- a/scripts/player.gd +++ b/scripts/player.gd @@ -75,6 +75,11 @@ var current_weapon_index var recoiling = false var dead = false var hud_visible : bool = true +var held_item : Node +var held_item_linear_damp_cache +var held_item_angular_damp_cache +var held_item_gravity_cache +var held_item_mass_cache # Slow Down Variables var remaining_stamina = MAX_STAMINA @@ -105,6 +110,7 @@ var pickupmsg @onready var kick_audio: AudioStreamPlayer3D = $Head/Recoil/Camera3D/Audio/Kick @onready var weapon_pickup_audio: AudioStreamPlayer = $Audio/WeaponPickup @onready var crt_filter: ColorRect = $Head/Recoil/Camera3D/crtFilter +@onready var moveable_holder: Node3D = $Head/MoveableHolder func _ready(): @@ -318,13 +324,28 @@ func _physics_process(delta): if Input.is_action_just_pressed("numb_5") and !gun.anim_player.is_playing(): weapon_select(4) + # Move Held Items + if held_item != null: + var held_force_dir = moveable_holder.global_position - held_item.global_position + held_item.set_constant_force(held_force_dir * 30) + #held_item.rotation = lerp(held_item.rotation, rotation, delta) + + #break when moved too far away + var distance_from_player = abs(self.global_position - held_item.global_position) + if distance_from_player.length() > 5: + release_moveable() + #interact button if Input.is_action_just_pressed("interact"): - if interact_ray.is_colliding(): + if held_item != null: + release_moveable() + elif interact_ray.is_colliding(): + var body = interact_ray.get_collider() if interact_ray.get_collider().is_in_group("interact"): - var body = interact_ray.get_collider() body.get_parent().interact() - + if interact_ray.get_collider().is_in_group("moveable"): + grab_moveable(body) + #kick if Input.is_action_just_pressed("kick"): @@ -411,3 +432,26 @@ func toggle_hud(hud_on): ammo_counter.visible = hud_on stamina_counter.visible = hud_on +func grab_moveable(body): + moveable_holder.global_position = body.global_position + held_item = body + + #cache rigidbody settings + held_item_linear_damp_cache = body.linear_damp + held_item_angular_damp_cache = body.angular_damp + held_item_gravity_cache = body.gravity_scale + held_item_mass_cache = body.mass + + #change rigidbody settings + body.linear_damp = 5 + body.angular_damp = 5 + body.mass = 1 + held_item.gravity_scale = 0 + +func release_moveable(): + held_item.gravity_scale = held_item_gravity_cache + held_item.linear_damp = held_item_linear_damp_cache + held_item.angular_damp = held_item_angular_damp_cache + held_item.mass = held_item_mass_cache + held_item.set_constant_force(Vector3(0,0,0)) + held_item = null