46 lines
1.4 KiB
GDScript
46 lines
1.4 KiB
GDScript
extends Node3D
|
|
|
|
var snap_amount : float = 10
|
|
var speed : float = 10
|
|
var current_rotation : Vector3
|
|
var target_rotation : Vector3
|
|
|
|
var gun_recoil_target_rotation : float = 0
|
|
var gun_recoil
|
|
|
|
@onready var head: Node3D = $".."
|
|
|
|
|
|
# Called when the node enters the scene tree for the first time.
|
|
func _ready() -> void:
|
|
pass # Replace with function body.
|
|
|
|
|
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
func _process(delta: float) -> void:
|
|
target_rotation = lerp(target_rotation, Vector3.ZERO, speed * delta)
|
|
current_rotation = lerp(current_rotation, target_rotation, snap_amount * delta)
|
|
basis = Quaternion.from_euler(current_rotation)
|
|
|
|
#Handle Gun Recoil
|
|
gun_recoil = lerp(0.0,gun_recoil_target_rotation, delta * 30)
|
|
head.rotation.x = clamp(head.rotation.x + gun_recoil, deg_to_rad(-90), deg_to_rad(85))
|
|
gun_recoil_target_rotation -= gun_recoil
|
|
|
|
|
|
func add_recoil(recoil_amount,snap_change,speed_change) -> void:
|
|
#set to provided snap/speed changes
|
|
snap_amount = snap_change
|
|
speed = speed_change
|
|
|
|
#vertical recoil and random L+R recoil within given range
|
|
var recoil_x = recoil_amount.x
|
|
var recoil_y = randf_range(-recoil_amount.y,recoil_amount.y)
|
|
var recoil_z = randf_range(-recoil_amount.z,recoil_amount.z)
|
|
|
|
#add to target rotation
|
|
target_rotation += Vector3(recoil_x, recoil_y, recoil_z)
|
|
|
|
func add_gun_recoil(recoil_amount):
|
|
gun_recoil_target_rotation += recoil_amount
|