Add Sway and Bob

This commit is contained in:
2022-12-06 00:48:50 +01:00
parent 04a4ebc899
commit 825d86f271
26 changed files with 1513 additions and 116 deletions

81
scripts/player/Weapon.gd Normal file
View File

@@ -0,0 +1,81 @@
extends Node3D
class_name Weapon
const DEFAULT = 0
const INITIAL = 1
const SHOOT = 2
const RELOAD = 3
const DRAW_TIME = 0.35
#TODO: Load gun config from file
var MAX_CLIP : int
var DAMAGE : float
var MOMENTUM : Vector2
var ANGULAR_MOMENTUM : Vector3
var RECOIL_COOLDOWN : float
var RPM: float
var DRAW_POS : Vector3
var DRAW_ROT : Vector3
var MODEL : Node3D
var FIREMODE : int
var SHOOTING_SPEED: float
var can_shoot : bool
var clip = 444444
var state = DEFAULT
func init():
visible = true
SHOOTING_SPEED = 60.0 / RPM
var tween = create_tween()
MODEL.position = DRAW_POS
MODEL.rotation = DRAW_ROT
tween.set_trans(Tween.TRANS_CIRC)
tween.set_ease(Tween.EASE_IN_OUT)
can_shoot = true
tween.tween_callback(InitialPos).set_delay(DRAW_TIME)
func InitialPos():
var tween = create_tween()
tween.set_trans(Tween.TRANS_CIRC)
tween.set_ease(Tween.EASE_IN_OUT)
tween.set_parallel(true)
tween.tween_property(MODEL, "position", Vector3.ZERO, RECOIL_COOLDOWN / 2)
tween.tween_property(MODEL, "rotation", Vector3.ZERO, RECOIL_COOLDOWN / 2)
tween.tween_callback(func(): state = INITIAL).set_delay(SHOOTING_SPEED / 2)
func Shoot():
if clip > 0 && state == INITIAL && can_shoot:
if !FIREMODE:
can_shoot = false
clip -= 1
state = SHOOT;
var tween = create_tween()
tween.set_trans(Tween.TRANS_ELASTIC)
tween.set_ease(Tween.EASE_OUT)
tween.set_parallel(true)
tween.tween_property(MODEL, "position", Vector3(.0, MOMENTUM.x, MOMENTUM.y), RECOIL_COOLDOWN / 2)
var rand_rot_y = randi_range(-ANGULAR_MOMENTUM.y,ANGULAR_MOMENTUM.y)
var rand_rot_z = randi_range(-ANGULAR_MOMENTUM.z,ANGULAR_MOMENTUM.z)
tween.tween_property(MODEL, "rotation", Vector3(deg_to_rad(ANGULAR_MOMENTUM.x),deg_to_rad(rand_rot_y),deg_to_rad(rand_rot_z)),RECOIL_COOLDOWN /2)
tween.tween_callback(InitialPos).set_delay(SHOOTING_SPEED / 2)
return true
return false
func Release():
if !FIREMODE:
can_shoot = true
func Reload():
if(clip < MAX_CLIP && state == INITIAL):
state = RELOAD
return true
return false