decent start on picking up objects
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user