diff --git a/Game/Assets/Effects/BulletTracerMaterial.tres b/Game/Assets/Effects/BulletTracerMaterial.tres index d5afbf0..3d97b32 100644 --- a/Game/Assets/Effects/BulletTracerMaterial.tres +++ b/Game/Assets/Effects/BulletTracerMaterial.tres @@ -89,9 +89,8 @@ void fragment() { vec3 n_out4p0 = n_out15p0 * vec3(n_out5p0); // Fresnel:2 - bool n_in2p2 = true; float n_in2p3 = 0.50000; - float n_out2p0 = n_in2p2 ? (pow(clamp(dot(NORMAL, VIEW), 0.0, 1.0), n_in2p3)) : (pow(1.0 - clamp(dot(NORMAL, VIEW), 0.0, 1.0), n_in2p3)); + float n_out2p0 = pow(clamp(dot(NORMAL, VIEW), 0.0, 1.0), n_in2p3); // ScalarOp:12 float n_in12p1 = 0.50000; diff --git a/Game/Assets/Weapons/GrenadeLauncher/Grenade.gd b/Game/Assets/Weapons/GrenadeLauncher/Grenade.gd new file mode 100644 index 0000000..ea7dbc5 --- /dev/null +++ b/Game/Assets/Weapons/GrenadeLauncher/Grenade.gd @@ -0,0 +1,4 @@ +extends RigidBody + +func explode(): + queue_free() diff --git a/Game/Assets/Weapons/GrenadeLauncher/Grenade.tscn b/Game/Assets/Weapons/GrenadeLauncher/Grenade.tscn new file mode 100644 index 0000000..6f4d589 --- /dev/null +++ b/Game/Assets/Weapons/GrenadeLauncher/Grenade.tscn @@ -0,0 +1,31 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://Assets/Weapons/GrenadeLauncher/Grenade.gd" type="Script" id=1] + +[sub_resource type="PhysicsMaterial" id=3] +friction = 0.3 +bounce = 0.7 + +[sub_resource type="SphereShape" id=1] +radius = 0.1 + +[sub_resource type="SphereMesh" id=2] +radius = 0.1 +height = 0.2 + +[node name="Grenade" type="RigidBody"] +physics_material_override = SubResource( 3 ) +script = ExtResource( 1 ) + +[node name="CollisionShape" type="CollisionShape" parent="."] +shape = SubResource( 1 ) + +[node name="MeshInstance" type="MeshInstance" parent="."] +mesh = SubResource( 2 ) +material/0 = null + +[node name="Timer" type="Timer" parent="."] +wait_time = 2.0 +autostart = true + +[connection signal="timeout" from="Timer" to="." method="explode"] diff --git a/Game/Assets/Weapons/GrenadeLauncher/GrenadeLauncher.gd b/Game/Assets/Weapons/GrenadeLauncher/GrenadeLauncher.gd new file mode 100644 index 0000000..16fb83e --- /dev/null +++ b/Game/Assets/Weapons/GrenadeLauncher/GrenadeLauncher.gd @@ -0,0 +1,28 @@ +extends "res://Classes/Weapon/Weapon.gd" + +var grenade = preload("res://Assets/Weapons/GrenadeLauncher/Grenade.tscn") + +func set_trigger_held_primary(active:bool): + trigger_held_primary = active + + if active: + shoot(camera) + +func shoot(camera): + if is_reloading: + return + + if currently_fireing == true: + cached_fire = true + yield($Model/AnimationPlayer, "animation_finished") + + rpc("fire_weapon") + +sync func fire_weapon(): + var grenade_instance = grenade.instance() + var muzzle_transform = $Model/Muzzle.global_transform + grenade_instance.global_transform = muzzle_transform + + grenade_instance.linear_velocity = muzzle_transform.basis.y * 40 + player.velocity + + get_tree().root.call_deferred("add_child", grenade_instance) diff --git a/Game/Assets/Weapons/GrenadeLauncher/GranadeLauncher.gltf b/Game/Assets/Weapons/GrenadeLauncher/GrenadeLauncher.gltf similarity index 100% rename from Game/Assets/Weapons/GrenadeLauncher/GranadeLauncher.gltf rename to Game/Assets/Weapons/GrenadeLauncher/GrenadeLauncher.gltf diff --git a/Game/Assets/Weapons/GrenadeLauncher/GranadeLauncher.gltf.import b/Game/Assets/Weapons/GrenadeLauncher/GrenadeLauncher.gltf.import similarity index 99% rename from Game/Assets/Weapons/GrenadeLauncher/GranadeLauncher.gltf.import rename to Game/Assets/Weapons/GrenadeLauncher/GrenadeLauncher.gltf.import index 80ccc31..e4a89ab 100644 --- a/Game/Assets/Weapons/GrenadeLauncher/GranadeLauncher.gltf.import +++ b/Game/Assets/Weapons/GrenadeLauncher/GrenadeLauncher.gltf.import @@ -2,12 +2,12 @@ importer="scene" type="PackedScene" -path="res://.import/GranadeLauncher.gltf-ca56a6672dae21dfb777c46e15746d8e.scn" +path="res://.import/GrenadeLauncher.gltf-097e9ef9a1df3c2d00f87164cabfb0b1.scn" [deps] -source_file="res://Assets/Weapons/GrenadeLauncher/GranadeLauncher.gltf" -dest_files=[ "res://.import/GranadeLauncher.gltf-ca56a6672dae21dfb777c46e15746d8e.scn" ] +source_file="res://Assets/Weapons/GrenadeLauncher/GrenadeLauncher.gltf" +dest_files=[ "res://.import/GrenadeLauncher.gltf-097e9ef9a1df3c2d00f87164cabfb0b1.scn" ] [params] @@ -16,6 +16,7 @@ nodes/root_name="Scene Root" nodes/root_scale=1.0 nodes/custom_script="" nodes/storage=0 +nodes/use_legacy_names=true materials/location=1 materials/storage=1 materials/keep_on_reimport=true diff --git a/Game/Assets/Weapons/GrenadeLauncher/GrenadeLauncher.tscn b/Game/Assets/Weapons/GrenadeLauncher/GrenadeLauncher.tscn index ac01da4..8faa6eb 100644 --- a/Game/Assets/Weapons/GrenadeLauncher/GrenadeLauncher.tscn +++ b/Game/Assets/Weapons/GrenadeLauncher/GrenadeLauncher.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=10 format=2] -[ext_resource path="res://Assets/Weapons/GrenadeLauncher/GranadeLauncher.gltf" type="PackedScene" id=1] -[ext_resource path="res://Classes/Weapon/Weapon.gd" type="Script" id=2] +[ext_resource path="res://Assets/Weapons/GrenadeLauncher/GrenadeLauncher.gltf" type="PackedScene" id=1] +[ext_resource path="res://Assets/Weapons/GrenadeLauncher/GrenadeLauncher.gd" type="Script" id=2] [ext_resource path="res://Classes/Audio/LayeredSoundPlayer.gd" type="Script" id=3] [ext_resource path="res://Assets/Effects/CircleSoft.svg" type="Texture" id=4] [ext_resource path="res://Assets/Audio/SFX/Weapons_Empty.wav" type="AudioStream" id=5] @@ -24,9 +24,6 @@ size = Vector2( 0.3, 0.3 ) [node name="Weapon" type="Spatial"] script = ExtResource( 2 ) -Delay = 0.05 -Automatic = true -Rounds = 100 [node name="Model" parent="." instance=ExtResource( 1 )] diff --git a/Game/Assets/Weapons/GrenadeLauncher/Hand.material b/Game/Assets/Weapons/GrenadeLauncher/Hand.material index cc65822..3e8c6aa 100644 Binary files a/Game/Assets/Weapons/GrenadeLauncher/Hand.material and b/Game/Assets/Weapons/GrenadeLauncher/Hand.material differ diff --git a/Game/Assets/Weapons/GrenadeLauncher/HandgunMetal.material b/Game/Assets/Weapons/GrenadeLauncher/HandgunMetal.material index 0e12cdf..07b4daa 100644 Binary files a/Game/Assets/Weapons/GrenadeLauncher/HandgunMetal.material and b/Game/Assets/Weapons/GrenadeLauncher/HandgunMetal.material differ diff --git a/Game/Assets/Weapons/GrenadeLauncher/HandgunPlastic.material b/Game/Assets/Weapons/GrenadeLauncher/HandgunPlastic.material index ca513b7..e784cd8 100644 Binary files a/Game/Assets/Weapons/GrenadeLauncher/HandgunPlastic.material and b/Game/Assets/Weapons/GrenadeLauncher/HandgunPlastic.material differ diff --git a/Game/Assets/Weapons/Handgun/Handgun.gd b/Game/Assets/Weapons/Handgun/Handgun.gd index 9d4aa97..ef9a32a 100644 --- a/Game/Assets/Weapons/Handgun/Handgun.gd +++ b/Game/Assets/Weapons/Handgun/Handgun.gd @@ -4,14 +4,10 @@ func set_trigger_held_primary(active:bool): trigger_held_primary = active if active: - shoot(camera, true) + shoot(camera) print("trigger_active", active) -func shoot(camera, primary): - if not Automatic: - if cached_fire == true: - return - +func shoot(camera): if is_reloading: return @@ -62,3 +58,62 @@ func shoot(camera, primary): reload() return current_rounds + +sync func fire_weapon(var rounds_left): + show_muzzle_flash(rounds_left) + show_tracer() + spawn_casing() + yield($Model/AnimationPlayer, "animation_finished") + + if !cached_fire: + currently_fireing = false + +func show_muzzle_flash(var rounds_left): + $Model/AnimationPlayer.stop() + + if rounds_left == 1: + $Model/AnimationPlayer.play("Empty", -1, 2) + else: + $Model/AnimationPlayer.play("Shoot", -1, 2) + + $Effects/Flash.stop(true) + $Effects/Flash.play("Flash") + + $Effects/MuzzleFlash.emitting = true + yield(get_tree().create_timer(0.07),"timeout") + $Effects/MuzzleFlash.emitting = false + + $Sounds/Shoot.play() + +func show_tracer(): + var tracer_instance = tracer.instance() + tracer_instance.hide() + tracer_instance.global_transform = global_transform + tracer_instance.translation = $Model/Muzzle.global_transform.origin + + get_tree().root.call_deferred("add_child", tracer_instance) + tracer_instance.call_deferred("show") + +func spawn_casing(): + #while [ true ]: + #var casing_instance = load("res://Assets/Weapons/Handgun/Casing.tscn").instance() + var casing_instance = casing.instance() + casing_instance.global_transform = ejector.global_transform + + casing_instance.rotate_object_local(Vector3.FORWARD, deg2rad(90)) + + casing_instance.angular_velocity = - ejector.global_transform.basis[2] * rand_range(23, 37) + casing_instance.linear_velocity = ejector.global_transform.basis[0] * rand_range(3.2, 4.5) - ejector.global_transform.basis[2] * rand_range(2.6, 3.7) + + get_tree().root.call_deferred("add_child", casing_instance) + +remote func compute_bullet_flyby(): + var local_player = get_tree().root.get_node("Game").local_player + var transform = find_node("Muzzle").global_transform + + var from = global_transform.xform(Vector3()) + var to = global_transform.xform(Vector3(-1000, 0, 0)) + + if local_player: + local_player.on_bullet_flyby(from, to) + diff --git a/Game/Classes/Weapon/Weapon.gd b/Game/Classes/Weapon/Weapon.gd index f0a733f..42ae5cd 100644 --- a/Game/Classes/Weapon/Weapon.gd +++ b/Game/Classes/Weapon/Weapon.gd @@ -42,70 +42,9 @@ func _ready(): func switched_to_weapon(): emit_signal("ammo_changed", self) -sync func fire_weapon(var rounds_left): - show_muzzle_flash(rounds_left) - show_tracer() - spawn_casing() - yield($Model/AnimationPlayer, "animation_finished") - - if !cached_fire: - currently_fireing = false - sync func dry_fire(): pass -func show_muzzle_flash(var rounds_left): - $Model/AnimationPlayer.stop() - - if rounds_left == 1: - $Model/AnimationPlayer.play("Empty", -1, 2) - else: - $Model/AnimationPlayer.play("Shoot", -1, 2) - - $Effects/Flash.stop(true) - $Effects/Flash.play("Flash") - - $Effects/MuzzleFlash.emitting = true - yield(get_tree().create_timer(0.07),"timeout") - $Effects/MuzzleFlash.emitting = false - - $Sounds/Shoot.play() - -func show_tracer(): - var tracer_instance = tracer.instance() - tracer_instance.hide() - tracer_instance.global_transform = global_transform - tracer_instance.translation = $Model/Muzzle.global_transform.origin - - get_tree().root.call_deferred("add_child", tracer_instance) - tracer_instance.call_deferred("show") - -func spawn_casing(): - #while [ true ]: - #var casing_instance = load("res://Assets/Weapons/Handgun/Casing.tscn").instance() - var casing_instance = casing.instance() - casing_instance.global_transform = ejector.global_transform - - casing_instance.rotate_object_local(Vector3.FORWARD, deg2rad(90)) - - casing_instance.angular_velocity = - ejector.global_transform.basis[2] * rand_range(23, 37) - casing_instance.linear_velocity = ejector.global_transform.basis[0] * rand_range(3.2, 4.5) - ejector.global_transform.basis[2] * rand_range(2.6, 3.7) - - get_tree().root.call_deferred("add_child", casing_instance) - - #yield(get_tree().create_timer(1),"timeout") - - -remote func compute_bullet_flyby(): - var local_player = get_tree().root.get_node("Game").local_player - var transform = find_node("Muzzle").global_transform - - var from = global_transform.xform(Vector3()) - var to = global_transform.xform(Vector3(-1000, 0, 0)) - - if local_player: - local_player.on_bullet_flyby(from, to) - func reload(): rpc("play_reload_animation")