decent start on picking up objects

This commit is contained in:
derek
2024-11-04 16:59:54 -06:00
parent 3dc841cf86
commit 6a36a53746
9 changed files with 59 additions and 8 deletions

View File

@@ -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

View File

@@ -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")

View File

@@ -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)

View File

@@ -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")

View File

@@ -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

View File

@@ -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

View File

@@ -42,6 +42,7 @@ weight=""
switch_override=""
magnet=""
hud=""
moveable=""
[input]

View File

@@ -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)

View File

@@ -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