diff --git a/assets/casing.gd b/assets/casing.gd index c93458e..7a0f311 100644 --- a/assets/casing.gd +++ b/assets/casing.gd @@ -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 diff --git a/assets/revolver_1.tscn b/assets/revolver_1.tscn index 213d7d7..f244eee 100644 --- a/assets/revolver_1.tscn +++ b/assets/revolver_1.tscn @@ -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") diff --git a/scripts/weapon_uberscript.gd b/scripts/weapon_uberscript.gd index 7f9af5a..105f8e0 100644 --- a/scripts/weapon_uberscript.gd +++ b/scripts/weapon_uberscript.gd @@ -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}