decent start on picking up objects
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -42,6 +42,7 @@ weight=""
|
||||
switch_override=""
|
||||
magnet=""
|
||||
hud=""
|
||||
moveable=""
|
||||
|
||||
[input]
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,12 +324,27 @@ 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
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user