Fixed linear holding of items, still working on rotation
This commit is contained in:
@@ -1,8 +1,10 @@
|
|||||||
extends RigidBody3D
|
extends RigidBody3D
|
||||||
|
|
||||||
@export var broken_object : Resource
|
@export var broken_object : Resource
|
||||||
|
@export var break_velocity : float = 10
|
||||||
|
|
||||||
var break_on_land : bool = false
|
var break_on_land : bool = false
|
||||||
|
var held_currently : bool = false
|
||||||
|
|
||||||
# Called when the node enters the scene tree for the first time.
|
# Called when the node enters the scene tree for the first time.
|
||||||
func _ready():
|
func _ready():
|
||||||
@@ -11,7 +13,7 @@ func _ready():
|
|||||||
|
|
||||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
func _process(delta):
|
func _process(delta):
|
||||||
if linear_velocity.length() >= 10:
|
if linear_velocity.length() >= break_velocity and !held_currently:
|
||||||
break_on_land = true
|
break_on_land = true
|
||||||
|
|
||||||
func breaking(current_velocity):
|
func breaking(current_velocity):
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ func _physics_process(delta):
|
|||||||
|
|
||||||
if ray.is_colliding():
|
if ray.is_colliding():
|
||||||
var body = ray.get_collider()
|
var body = ray.get_collider()
|
||||||
if !body.is_in_group("player"):
|
if body != null and !body.is_in_group("player"):
|
||||||
|
|
||||||
mesh.visible = false
|
mesh.visible = false
|
||||||
ray.enabled = false
|
ray.enabled = false
|
||||||
|
|||||||
@@ -301,7 +301,7 @@ func _physics_process(delta):
|
|||||||
gun.anim_player.play("swap_out")
|
gun.anim_player.play("swap_out")
|
||||||
level_control.gun_spawn(level_control.current_gun_index + 1)
|
level_control.gun_spawn(level_control.current_gun_index + 1)
|
||||||
else:
|
else:
|
||||||
held_item_rotation.y += deg_to_rad(45)
|
held_item_rotation.y = clamp(held_item_rotation.y + deg_to_rad(45), deg_to_rad(0),deg_to_rad(360))
|
||||||
|
|
||||||
#Weapon Swap Down
|
#Weapon Swap Down
|
||||||
if Input.is_action_just_pressed("scroll_down") and !gun.anim_player.is_playing():
|
if Input.is_action_just_pressed("scroll_down") and !gun.anim_player.is_playing():
|
||||||
@@ -310,7 +310,7 @@ func _physics_process(delta):
|
|||||||
gun.anim_player.play("swap_out")
|
gun.anim_player.play("swap_out")
|
||||||
level_control.gun_spawn(level_control.current_gun_index - 1)
|
level_control.gun_spawn(level_control.current_gun_index - 1)
|
||||||
else:
|
else:
|
||||||
held_item_rotation.y -= deg_to_rad(45)
|
held_item_rotation.y = clamp(held_item_rotation.y - deg_to_rad(45), deg_to_rad(0),deg_to_rad(360))
|
||||||
|
|
||||||
# Weapon Swap by Numbers
|
# Weapon Swap by Numbers
|
||||||
if Input.is_action_just_pressed("numb_1"):
|
if Input.is_action_just_pressed("numb_1"):
|
||||||
@@ -333,20 +333,6 @@ func _physics_process(delta):
|
|||||||
weapon_select(8)
|
weapon_select(8)
|
||||||
if Input.is_action_just_pressed("numb_0"):
|
if Input.is_action_just_pressed("numb_0"):
|
||||||
weapon_select(9)
|
weapon_select(9)
|
||||||
|
|
||||||
# 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 = held_item_rotation #lerp(held_item.rotation, held_item_rotation, delta * 30)
|
|
||||||
|
|
||||||
#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()
|
|
||||||
|
|
||||||
#interact button
|
#interact button
|
||||||
if Input.is_action_just_pressed("interact"):
|
if Input.is_action_just_pressed("interact"):
|
||||||
@@ -376,6 +362,7 @@ func _physics_process(delta):
|
|||||||
if level_control.health <= 0:
|
if level_control.health <= 0:
|
||||||
level_control.die()
|
level_control.die()
|
||||||
|
|
||||||
|
hold_item()
|
||||||
move_and_slide()
|
move_and_slide()
|
||||||
weapon_tilt(input_dir.x, delta)
|
weapon_tilt(input_dir.x, delta)
|
||||||
weapon_sway(delta)
|
weapon_sway(delta)
|
||||||
@@ -459,18 +446,33 @@ func grab_moveable(body):
|
|||||||
held_item_gravity_cache = body.gravity_scale
|
held_item_gravity_cache = body.gravity_scale
|
||||||
held_item_mass_cache = body.mass
|
held_item_mass_cache = body.mass
|
||||||
#change rigidbody settings
|
#change rigidbody settings
|
||||||
body.linear_damp = 5
|
body.linear_damp = 0 #5
|
||||||
body.angular_damp = 5
|
body.angular_damp = 0 #5
|
||||||
body.mass = 1
|
body.mass = 1
|
||||||
held_item.gravity_scale = 0
|
held_item.gravity_scale = 0
|
||||||
|
|
||||||
|
func hold_item():
|
||||||
|
# Move Held Items
|
||||||
|
if held_item != null:
|
||||||
|
var held_dir = moveable_holder.global_position - held_item.global_position
|
||||||
|
var held_av = held_item_rotation - held_item.rotation
|
||||||
|
held_item.linear_velocity = held_dir * 30
|
||||||
|
held_item.angular_velocity = held_av * 10
|
||||||
|
|
||||||
|
#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()
|
||||||
|
|
||||||
func release_moveable():
|
func release_moveable():
|
||||||
held_item_rotation = Vector3(0,0,0)
|
held_item_rotation = Vector3(0,0,0)
|
||||||
held_item.gravity_scale = held_item_gravity_cache
|
held_item.gravity_scale = held_item_gravity_cache
|
||||||
held_item.linear_damp = held_item_linear_damp_cache
|
held_item.linear_damp = held_item_linear_damp_cache
|
||||||
held_item.angular_damp = held_item_angular_damp_cache
|
held_item.angular_damp = held_item_angular_damp_cache
|
||||||
held_item.mass = held_item_mass_cache
|
held_item.mass = held_item_mass_cache
|
||||||
held_item.set_constant_force(Vector3(0,0,0))
|
|
||||||
held_item = null
|
held_item = null
|
||||||
|
|
||||||
func hit(damage, fired_by, target_type):
|
func hit(damage, fired_by, target_type):
|
||||||
|
|||||||
Reference in New Issue
Block a user