revolver casings now spawn with animation rotation

This commit is contained in:
derek
2025-03-27 12:46:21 -05:00
parent 0297c7e9ae
commit 5cd0793efb
3 changed files with 37 additions and 28 deletions

View File

@@ -166,17 +166,21 @@ func spawn_mag():
instance_mag.position = mag_ejector.global_position
instance_mag.transform.basis = mag_ejector.global_transform.basis
instance_mag.linear_velocity += transform.basis * anim_velocity["lv"] * 5
instance_mag.angular_velocity += transform.basis * anim_velocity["av"]
instance_mag.linear_velocity += global_transform.basis * (anim_velocity["lv"] * 5) + player.velocity
instance_mag.angular_velocity += global_transform.basis * anim_velocity["av"]
get_tree().get_root().add_child(instance_mag)
func spawn_casing():
if weapon_info.casing != null and casing_ejector != null:
# Casing transform
var instance_casing = weapon_info.casing.instantiate()
var casing_random_velocity = random_rotation(true)
instance_casing.position = casing_ejector.global_position
instance_casing.transform.basis = casing_ejector.global_transform.basis
instance_casing.player_velocity = player.velocity * transform.basis
instance_casing.transform.basis = casing_ejector.transform.basis
instance_casing.linear_velocity += global_transform.basis * casing_random_velocity["lv"] + player.velocity
instance_casing.angular_velocity += global_transform.basis * casing_random_velocity["av"]
get_tree().get_root().add_child(instance_casing)
func ready_revolver_casings():
@@ -197,13 +201,15 @@ func spawn_revolver_casings():
bullet_array[index].visible = false
if index < casing_array.size():
casing_array[index].visible = false
var instance_casing = weapon_info.casing.instantiate()
var random_velocity = random_rotation(true)
var anim_velocity = solve_anim_av_lv()
instance_casing.position = casing_array[index].global_position
instance_casing.random_rotation = false
instance_casing.transform.basis = casing_array[index].global_transform.basis
instance_casing.player_velocity = player.velocity * transform.basis
instance_casing.rotation.x += deg_to_rad(90)
instance_casing.linear_velocity.y = -(8 + randf_range(0,3))
instance_casing.rotation.x += deg_to_rad(90) # casings were initially rotated with the assumption that they would spawn horizontally, realigning for revolvers
instance_casing.linear_velocity += transform.basis * (player.velocity + anim_velocity["lv"] + Vector3(0,random_velocity["lv"].y,0))
instance_casing.angular_velocity += transform.basis * anim_velocity["av"]
get_tree().get_root().add_child(instance_casing)
index += 1
@@ -300,6 +306,18 @@ func bullet_fire():
SignalBus.emit_signal("shot_fired")
func random_rotation(random_rotation):
if random_rotation:
var lv_x = randf_range(5.0,7.0)
var lv_y = randf_range(0.0,3.0)
var lv_z = randf_range(0.0,2.0)
var av_x = randf_range(-50.0,50.0)
var av_y = randf_range(-50.0,50.0)
var av_z = randf_range(-50.0,50.0)
return {"av" : Vector3(av_x,av_y,av_z),"lv" : Vector3(lv_x,lv_y,lv_z)}
else:
return {"av" : Vector3.ZERO,"lv" : Vector3.ZERO}
func mark_anim_rot():
if anim_rot_body != null:
if spawn_av_lv.size() < 2:
@@ -311,18 +329,12 @@ func mark_anim_rot():
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}