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

@@ -16,17 +16,7 @@ func _ready():
level_control.particle_number += 1
particle_number = level_control.particle_number
if random_rotation == true:
var lv_x = rng.randf_range(5.0,7.0)
var lv_y = rng.randf_range(0.0,3.0)
var lv_z = rng.randf_range(0.0,2.0)
var av_x = rng.randf_range(-50.0,50.0)
var av_y = rng.randf_range(-50.0,50.0)
var av_z = rng.randf_range(-50.0,50.0)
linear_velocity += transform.basis * Vector3(lv_x, lv_y, lv_z) + player_velocity
angular_velocity += transform.basis * Vector3(av_x,av_y,av_z)
func _process(delta):
#once max particles reached delete from scene

View File

@@ -1135,10 +1135,16 @@ tracks/3/path = NodePath(".")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0.31, 1.4),
"transitions": PackedFloat32Array(1, 1),
"times": PackedFloat32Array(0.22, 0.29, 0.31, 1.4),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"values": [{
"args": [],
"method": &"mark_anim_rot"
}, {
"args": [],
"method": &"mark_anim_rot"
}, {
"args": [],
"method": &"spawn_revolver_casings"
}, {
"args": [],
@@ -1356,11 +1362,12 @@ _data = {
&"swap_out": SubResource("Animation_nvmxj")
}
[node name="revolver1" type="Node3D" node_paths=PackedStringArray("anim_player", "barrel_ray", "audio_fire", "audio_empty", "audio_reload", "casing_array", "chamber")]
[node name="revolver1" type="Node3D" node_paths=PackedStringArray("anim_player", "anim_rot_body", "barrel_ray", "audio_fire", "audio_empty", "audio_reload", "casing_array", "chamber")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.0718293, 0)
script = ExtResource("2_boy4r")
weapon_info = ExtResource("3_oxh61")
anim_player = NodePath("AnimationPlayer")
anim_rot_body = NodePath("revolver1")
barrel_ray = NodePath("revolver1/RayCastBarrel")
audio_fire = NodePath("Audio/Fire")
audio_empty = NodePath("Audio/Empty")

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}