fixed moveables
This commit is contained in:
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user