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 @export var MAX_CLIP = 5 @export var DAMAGE = 25 @export var MOMENTUM : Vector2 @export var ANGULAR_MOMENTUM : Vector3 @export var RECOIL_COOLDOWN : float @export var RPM: float var SHOOTING_SPEED: float var clip = 444444 var state = DEFAULT func _ready(): SHOOTING_SPEED = 60.0 / RPM var tween = create_tween() tween.set_trans(Tween.TRANS_CIRC) tween.set_ease(Tween.EASE_IN_OUT) 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($Revolver, "position", Vector3.ZERO, RECOIL_COOLDOWN / 2) tween.tween_property($Revolver, "rotation", Vector3.ZERO, RECOIL_COOLDOWN / 2) tween.tween_callback(func(): state = INITIAL).set_delay(SHOOTING_SPEED / 2) func Shoot(): if clip > 0 && state == INITIAL: 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($Revolver, "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($Revolver, "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 Reload(): if(clip < MAX_CLIP && state == INITIAL): state = RELOAD return true return false