mags are now ejected with the calculated av/lv of the animation
This commit is contained in:
@@ -3,6 +3,7 @@ class_name weapon
|
||||
|
||||
@export var weapon_info : weapon_resource
|
||||
@export var anim_player : AnimationPlayer
|
||||
@export var anim_rot_body : Node3D
|
||||
@export var barrel_ray : RayCast3D
|
||||
@export var casing_ejector : RayCast3D
|
||||
@export var mag_ejector : RayCast3D
|
||||
@@ -23,6 +24,9 @@ class_name weapon
|
||||
|
||||
@onready var player = get_tree().current_scene.player
|
||||
|
||||
#calculate spawn angular and linear velocity
|
||||
var spawn_av_lv = []
|
||||
|
||||
# Revolver vars
|
||||
var revolver_chamber_rot_amt = 0
|
||||
var casings_chamber_last
|
||||
@@ -158,9 +162,12 @@ func reload():
|
||||
|
||||
func spawn_mag():
|
||||
var instance_mag = weapon_info.mag.instantiate()
|
||||
var anim_velocity = solve_anim_av_lv()
|
||||
|
||||
instance_mag.position = mag_ejector.global_position
|
||||
instance_mag.transform.basis = mag_ejector.global_transform.basis
|
||||
instance_mag.linear_velocity += transform.basis * Vector3(0, -20, 0) + player.velocity
|
||||
instance_mag.linear_velocity += transform.basis * anim_velocity["lv"] * 5
|
||||
instance_mag.angular_velocity += transform.basis * anim_velocity["av"]
|
||||
get_tree().get_root().add_child(instance_mag)
|
||||
|
||||
func spawn_casing():
|
||||
@@ -293,6 +300,33 @@ func bullet_fire():
|
||||
SignalBus.emit_signal("shot_fired")
|
||||
|
||||
|
||||
func mark_anim_rot():
|
||||
if anim_rot_body != null:
|
||||
if spawn_av_lv.size() < 2:
|
||||
var time = anim_player.current_animation_position
|
||||
var rot = anim_rot_body.rotation
|
||||
var pos = anim_rot_body.position
|
||||
print("MARK STATS : ",{"time" : time,"rot" : rot,"pos" : pos})
|
||||
spawn_av_lv.append({"time" : time,"rot" : rot,"pos" : pos})
|
||||
|
||||
func solve_anim_av_lv():
|
||||
if spawn_av_lv.size() >= 2:
|
||||
print("SPAWN_AV_LV : ",spawn_av_lv)
|
||||
var start = spawn_av_lv[0]
|
||||
var end = spawn_av_lv[1]
|
||||
|
||||
var calculated_av = (end["rot"] - start["rot"]) / (end["time"] - start["time"])
|
||||
var calculated_lv = (end["pos"] - start["pos"]) / (end["time"] - start["time"])
|
||||
|
||||
#clear array
|
||||
#spawn_av_lv = []
|
||||
|
||||
print("CALCULATED AV: ",calculated_av, " - CALCULATED LV",calculated_lv)
|
||||
|
||||
return {"av" : calculated_av,"lv" : calculated_lv}
|
||||
else:
|
||||
return {"av" : Vector3.ZERO,"lv" : Vector3.ZERO}
|
||||
|
||||
func can_fire():
|
||||
if anim_player.is_playing() and anim_player.current_animation == "reload":
|
||||
return false
|
||||
|
||||
Reference in New Issue
Block a user