forked from unfa/liblast
Added functioning grenade launcher
parent
1d0680eebf
commit
09be57ff20
|
@ -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;
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
extends RigidBody
|
||||
|
||||
func explode():
|
||||
queue_free()
|
|
@ -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"]
|
|
@ -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)
|
|
@ -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
|
|
@ -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 )]
|
||||
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -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)
|
||||
|
||||
|
|
|
@ -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")
|
||||
|
||||
|
|
Loading…
Reference in New Issue