fixed moveables

This commit is contained in:
Derek
2025-03-06 19:59:34 -06:00
parent cba8e22fb4
commit f4375a51eb
16 changed files with 46 additions and 69 deletions

View File

@@ -88,12 +88,7 @@ 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
var held_item_collision_cache
var hold_offset
var held_item_cache = {}
var held_item_rotation : float = 0
var gamespeed_controlled = false
@@ -459,22 +454,16 @@ func _physics_process(delta):
controlled_elsewhere = false
#interact button
if Input.is_action_pressed("interact"):
held_key_check += delta
## IF HELD
if held_key_check >= HELD_BUTTON_AMT:
if interact_ray.is_colliding():
var body = interact_ray.get_collider()
if interact_ray.get_collider().has_method("interact"):
body.interact()
held_key_check = 0.0
elif Input.is_action_just_released("interact"):
if Input.is_action_just_pressed("interact"):
if held_item != null:
release_moveable()
elif interact_ray.is_colliding():
if interact_ray.is_colliding():
var body = interact_ray.get_collider()
if interact_ray.get_collider().get_class() == "RigidBody3D":
grab_moveable(body)
elif interact_ray.get_collider().has_method("interact"):
body.interact()
held_key_check = 0.0
#kick
if Input.is_action_just_pressed("kick"):
@@ -606,23 +595,6 @@ func aim_down_sights(delta):
else:
gun.position = lerp(gun.position, weapon_start_pos,(delta * 100)/Engine.time_scale)
func grab_moveable(body):
holster_gun(true)
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
held_item_collision_cache = held_item.get_collision_layer_value(1)
hold_offset = held_item.global_position - interact_ray.get_collision_point()
#change rigidbody settings
body.linear_damp = 0 #5
body.angular_damp = 0 #5
body.mass = 1
held_item.gravity_scale = 0
held_item.set_collision_layer_value(1,false)
func hud_wobble(delta):
var viewport_height_adj = (get_viewport().size.y/1080)
@@ -640,31 +612,32 @@ func hud_wobble(delta):
hud.position = offset
hud.crosshair.position = -offset
func grab_moveable(body):
held_item_cache = {
"gravity_scale" : body.gravity_scale
}
body.gravity_scale = 0
moveable_holder.add_child(body)
body.global_position = moveable_holder.global_position
for i in body.get_children():
if i.get_class() == "CollisionShape3D":
i.disabled = true
held_item = body
func hold_item(_delta):
# Move Held Items
if held_item != null:
interact_ray.look_at(held_item.global_position, Vector3.UP)
var held_dir = (moveable_holder.global_position - held_item.global_position)
held_item.linear_velocity = held_dir * 50
held_item.rotation = Vector3(0,held_item_rotation,0) + Vector3(0,camera.global_rotation.y,0)
#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()
if stand_check.is_colliding():
if stand_check.get_collider() == held_item:
release_moveable()
const FORCE = 10
var dir = moveable_holder.global_position - held_item.global_position
held_item.linear_velocity = dir * FORCE + self.velocity
held_item.look_at(camera.global_position,Vector3(0,1,0))
func release_moveable():
holster_gun(false)
if held_item != null:
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_collision_layer_value(1,held_item_collision_cache)
held_item = null
hold_offset = null
held_item.gravity_scale = held_item_cache["gravity_scale"]
for i in held_item.get_children():
if i.get_class() == "CollisionShape3D":
i.disabled = false
get_tree().current_scene.add_child(held_item)
held_item = null
## GUNS AND AMMO
func holster_gun(holster):