blergh
This commit is contained in:
29
player/enemy_detector.gd
Normal file
29
player/enemy_detector.gd
Normal file
@@ -0,0 +1,29 @@
|
||||
extends Area3D
|
||||
|
||||
var current_target: Node3D
|
||||
|
||||
signal new_target(value: Node3D)
|
||||
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
var candidate : Node3D
|
||||
for body in get_overlapping_bodies():
|
||||
if !is_instance_valid(candidate):
|
||||
candidate = body
|
||||
else:
|
||||
if global_position.distance_to(candidate.global_position) > global_position.distance_to(body.global_position):
|
||||
candidate = body
|
||||
if is_instance_valid(candidate):
|
||||
if candidate == current_target:
|
||||
return
|
||||
else:
|
||||
current_target = candidate
|
||||
new_target.emit(current_target)
|
||||
HudSignalBus.new_weapon_target.emit(current_target)
|
||||
else:
|
||||
if is_instance_valid(current_target):
|
||||
current_target = null
|
||||
new_target.emit(current_target)
|
||||
HudSignalBus.new_weapon_target.emit(current_target)
|
||||
|
||||
|
||||
1
player/pickup/HealthPickup.gltf
Normal file
1
player/pickup/HealthPickup.gltf
Normal file
File diff suppressed because one or more lines are too long
36
player/pickup/HealthPickup.gltf.import
Normal file
36
player/pickup/HealthPickup.gltf.import
Normal file
@@ -0,0 +1,36 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://btimsrtpykehv"
|
||||
path="res://.godot/imported/HealthPickup.gltf-2c1e7d646dfcc91839ef4b12b4b21b5a.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://player/pickup/HealthPickup.gltf"
|
||||
dest_files=["res://.godot/imported/HealthPickup.gltf-2c1e7d646dfcc91839ef4b12b4b21b5a.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
||||
BIN
player/pickup/HealthPickup_0.png
Normal file
BIN
player/pickup/HealthPickup_0.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 21 KiB |
38
player/pickup/HealthPickup_0.png.import
Normal file
38
player/pickup/HealthPickup_0.png.import
Normal file
@@ -0,0 +1,38 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ch3f7fgb8vjf"
|
||||
path.s3tc="res://.godot/imported/HealthPickup_0.png-d0226eab55f583d1ac8fd5099b1b8d03.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "bcba089f73d750a5aaea7e864d992542"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://player/pickup/HealthPickup_0.png"
|
||||
dest_files=["res://.godot/imported/HealthPickup_0.png-d0226eab55f583d1ac8fd5099b1b8d03.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
13
player/pickup/health_pickup.gd
Normal file
13
player/pickup/health_pickup.gd
Normal file
@@ -0,0 +1,13 @@
|
||||
extends Area3D
|
||||
class_name HealthPickup
|
||||
|
||||
@export var value : int = 500
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
pass # Replace with function body.
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
pass
|
||||
102
player/pickup/health_pickup.tscn
Normal file
102
player/pickup/health_pickup.tscn
Normal file
@@ -0,0 +1,102 @@
|
||||
[gd_scene load_steps=10 format=3 uid="uid://c6uobc6kd3v0t"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://btimsrtpykehv" path="res://player/pickup/HealthPickup.gltf" id="1_8xcsi"]
|
||||
[ext_resource type="Script" path="res://player/pickup/health_pickup.gd" id="1_ip3u3"]
|
||||
[ext_resource type="Texture2D" uid="uid://byda217s5cq8v" path="res://effects/light_01.png" id="2_2ivc6"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_sj4ns"]
|
||||
transparency = 1
|
||||
shading_mode = 0
|
||||
albedo_color = Color(0.623529, 1, 1, 1)
|
||||
albedo_texture = ExtResource("2_2ivc6")
|
||||
billboard_mode = 1
|
||||
|
||||
[sub_resource type="QuadMesh" id="QuadMesh_icasn"]
|
||||
material = SubResource("StandardMaterial3D_sj4ns")
|
||||
size = Vector2(3, 3)
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_2mnc6"]
|
||||
radius = 1.0
|
||||
|
||||
[sub_resource type="Animation" id="Animation_6bb8s"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("blockbench_export:position")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("blockbench_export:rotation")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_s83ec"]
|
||||
resource_name = "idle"
|
||||
length = 2.0
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("blockbench_export:position")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 1, 2),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(0, 0.5, 0), Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("blockbench_export:rotation")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 1, 2),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(0, -3.14159, 0), Vector3(0, -6.28319, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_mb1pw"]
|
||||
_data = {
|
||||
"RESET": SubResource("Animation_6bb8s"),
|
||||
"idle": SubResource("Animation_s83ec")
|
||||
}
|
||||
|
||||
[node name="HealthPickup" type="Area3D"]
|
||||
collision_layer = 128
|
||||
collision_mask = 0
|
||||
script = ExtResource("1_ip3u3")
|
||||
|
||||
[node name="blockbench_export" parent="." instance=ExtResource("1_8xcsi")]
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="blockbench_export"]
|
||||
transform = Transform3D(1, 0, 7.45058e-09, 0, 1, 0, -7.45058e-09, 0, 1, 0, 0, 0)
|
||||
mesh = SubResource("QuadMesh_icasn")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||
shape = SubResource("SphereShape3D_2mnc6")
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
"": SubResource("AnimationLibrary_mb1pw")
|
||||
}
|
||||
autoplay = "idle"
|
||||
126
player/pickup/minigun_pickup.tscn
Normal file
126
player/pickup/minigun_pickup.tscn
Normal file
@@ -0,0 +1,126 @@
|
||||
[gd_scene load_steps=11 format=3 uid="uid://cm2k4whjr4jbm"]
|
||||
|
||||
[ext_resource type="Script" path="res://player/pickup/weapon_pickup.gd" id="1_5nqsp"]
|
||||
[ext_resource type="PackedScene" uid="uid://copmw7akys6hi" path="res://player/pickup/minigunpickup.gltf" id="2_w18s1"]
|
||||
[ext_resource type="AudioStream" uid="uid://bo224qk0te7h3" path="res://player/pickup/reload.ogg" id="3_vrtw7"]
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_hyxwk"]
|
||||
radius = 1.0
|
||||
|
||||
[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_2b65r"]
|
||||
load_path = "res://.godot/imported/light_01.png-043e946f6df880e55d2a4615e19b1007.s3tc.ctex"
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_65ex1"]
|
||||
transparency = 1
|
||||
blend_mode = 1
|
||||
shading_mode = 0
|
||||
albedo_color = Color(1, 0.889936, 0.611993, 1)
|
||||
albedo_texture = SubResource("CompressedTexture2D_2b65r")
|
||||
billboard_mode = 1
|
||||
|
||||
[sub_resource type="QuadMesh" id="QuadMesh_6n3gu"]
|
||||
material = SubResource("StandardMaterial3D_65ex1")
|
||||
size = Vector2(3, 3)
|
||||
|
||||
[sub_resource type="Animation" id="Animation_unsla"]
|
||||
length = 0.001
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Node3D:position")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Node3D:rotation")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_gajwr"]
|
||||
resource_name = "idle"
|
||||
length = 2.0
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Node3D:position")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 1, 2),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(0, 0.5, 0), Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Node3D:rotation")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 1, 2),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(0, 3.14159, 0), Vector3(0, 6.28319, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_ah1ey"]
|
||||
_data = {
|
||||
"RESET": SubResource("Animation_unsla"),
|
||||
"idle": SubResource("Animation_gajwr")
|
||||
}
|
||||
|
||||
[node name="MinigunPickup" type="Area3D"]
|
||||
collision_layer = 256
|
||||
collision_mask = 0
|
||||
script = ExtResource("1_5nqsp")
|
||||
signal_name = "minigun"
|
||||
value = 100
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
shape = SubResource("SphereShape3D_hyxwk")
|
||||
|
||||
[node name="Node3D" type="Node3D" parent="."]
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Node3D"]
|
||||
transform = Transform3D(1, 0, 7.45058e-09, 0, 1, 0, -7.45058e-09, 0, 1, 0, 0, 0)
|
||||
mesh = SubResource("QuadMesh_6n3gu")
|
||||
|
||||
[node name="MeshInstance3D2" type="MeshInstance3D" parent="Node3D"]
|
||||
transform = Transform3D(1, 0, 7.45058e-09, 0, 1, 0, -7.45058e-09, 0, 1, 0, 0, 0)
|
||||
mesh = SubResource("QuadMesh_6n3gu")
|
||||
|
||||
[node name="blockbench_export" parent="Node3D" instance=ExtResource("2_w18s1")]
|
||||
transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 0, 0.3)
|
||||
|
||||
[node name="blockbench_export2" parent="Node3D" instance=ExtResource("2_w18s1")]
|
||||
transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 0, 0)
|
||||
|
||||
[node name="blockbench_export3" parent="Node3D" instance=ExtResource("2_w18s1")]
|
||||
transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 0, -0.3)
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
"": SubResource("AnimationLibrary_ah1ey")
|
||||
}
|
||||
autoplay = "idle"
|
||||
|
||||
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
|
||||
stream = ExtResource("3_vrtw7")
|
||||
max_polyphony = 2
|
||||
bus = &"SFX"
|
||||
1
player/pickup/minigunpickup.gltf
Normal file
1
player/pickup/minigunpickup.gltf
Normal file
File diff suppressed because one or more lines are too long
36
player/pickup/minigunpickup.gltf.import
Normal file
36
player/pickup/minigunpickup.gltf.import
Normal file
@@ -0,0 +1,36 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://copmw7akys6hi"
|
||||
path="res://.godot/imported/minigunpickup.gltf-66cb63de4f33114aea7012605e0bf320.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://player/pickup/minigunpickup.gltf"
|
||||
dest_files=["res://.godot/imported/minigunpickup.gltf-66cb63de4f33114aea7012605e0bf320.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
||||
BIN
player/pickup/minigunpickup_0.png
Normal file
BIN
player/pickup/minigunpickup_0.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
38
player/pickup/minigunpickup_0.png.import
Normal file
38
player/pickup/minigunpickup_0.png.import
Normal file
@@ -0,0 +1,38 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b76wr8vjkf2ag"
|
||||
path.s3tc="res://.godot/imported/minigunpickup_0.png-60892a2e6d681b078deba8302a471ada.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "0e260541caa6d26cf6b3b5f7065f12cf"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://player/pickup/minigunpickup_0.png"
|
||||
dest_files=["res://.godot/imported/minigunpickup_0.png-60892a2e6d681b078deba8302a471ada.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
126
player/pickup/missile_pickup.tscn
Normal file
126
player/pickup/missile_pickup.tscn
Normal file
@@ -0,0 +1,126 @@
|
||||
[gd_scene load_steps=11 format=3 uid="uid://b84kb2tvtcvvs"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://bqay3fxs1k6sp" path="res://player/weapons/missile/missile.gltf" id="1_252rl"]
|
||||
[ext_resource type="Script" path="res://player/pickup/weapon_pickup.gd" id="1_lfmny"]
|
||||
[ext_resource type="AudioStream" uid="uid://bo224qk0te7h3" path="res://player/pickup/reload.ogg" id="3_6gai8"]
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_hyxwk"]
|
||||
radius = 1.0
|
||||
|
||||
[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_2b65r"]
|
||||
load_path = "res://.godot/imported/light_01.png-043e946f6df880e55d2a4615e19b1007.s3tc.ctex"
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_65ex1"]
|
||||
transparency = 1
|
||||
blend_mode = 1
|
||||
shading_mode = 0
|
||||
albedo_color = Color(1, 0.435294, 0.0313726, 1)
|
||||
albedo_texture = SubResource("CompressedTexture2D_2b65r")
|
||||
billboard_mode = 1
|
||||
|
||||
[sub_resource type="QuadMesh" id="QuadMesh_6n3gu"]
|
||||
material = SubResource("StandardMaterial3D_65ex1")
|
||||
size = Vector2(3, 3)
|
||||
|
||||
[sub_resource type="Animation" id="Animation_unsla"]
|
||||
length = 0.001
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Node3D:position")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Node3D:rotation")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_gajwr"]
|
||||
resource_name = "idle"
|
||||
length = 2.0
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Node3D:position")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 1, 2),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(0, 0.5, 0), Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Node3D:rotation")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 1, 2),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(0, 3.14159, 0), Vector3(0, 6.28319, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_ah1ey"]
|
||||
_data = {
|
||||
"RESET": SubResource("Animation_unsla"),
|
||||
"idle": SubResource("Animation_gajwr")
|
||||
}
|
||||
|
||||
[node name="MissilePickup" type="Area3D"]
|
||||
collision_layer = 256
|
||||
collision_mask = 0
|
||||
script = ExtResource("1_lfmny")
|
||||
signal_name = "missile"
|
||||
value = 15
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
shape = SubResource("SphereShape3D_hyxwk")
|
||||
|
||||
[node name="Node3D" type="Node3D" parent="."]
|
||||
|
||||
[node name="blockbench_export" parent="Node3D" instance=ExtResource("1_252rl")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.2, 0, 0)
|
||||
|
||||
[node name="blockbench_export3" parent="Node3D" instance=ExtResource("1_252rl")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.3, 0)
|
||||
|
||||
[node name="blockbench_export2" parent="Node3D" instance=ExtResource("1_252rl")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.2, 0, 0)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Node3D"]
|
||||
transform = Transform3D(1, 0, 7.45058e-09, 0, 1, 0, -7.45058e-09, 0, 1, 0, 0, 0)
|
||||
mesh = SubResource("QuadMesh_6n3gu")
|
||||
|
||||
[node name="MeshInstance3D2" type="MeshInstance3D" parent="Node3D"]
|
||||
transform = Transform3D(1, 0, 7.45058e-09, 0, 1, 0, -7.45058e-09, 0, 1, 0, 0, 0)
|
||||
mesh = SubResource("QuadMesh_6n3gu")
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
"": SubResource("AnimationLibrary_ah1ey")
|
||||
}
|
||||
autoplay = "idle"
|
||||
|
||||
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
|
||||
stream = ExtResource("3_6gai8")
|
||||
max_polyphony = 2
|
||||
bus = &"SFX"
|
||||
BIN
player/pickup/reload.ogg
Normal file
BIN
player/pickup/reload.ogg
Normal file
Binary file not shown.
19
player/pickup/reload.ogg.import
Normal file
19
player/pickup/reload.ogg.import
Normal file
@@ -0,0 +1,19 @@
|
||||
[remap]
|
||||
|
||||
importer="oggvorbisstr"
|
||||
type="AudioStreamOggVorbis"
|
||||
uid="uid://bo224qk0te7h3"
|
||||
path="res://.godot/imported/reload.ogg-6a97a2c4d386ad5a6fbef255f5f91d2a.oggvorbisstr"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://player/pickup/reload.ogg"
|
||||
dest_files=["res://.godot/imported/reload.ogg-6a97a2c4d386ad5a6fbef255f5f91d2a.oggvorbisstr"]
|
||||
|
||||
[params]
|
||||
|
||||
loop=false
|
||||
loop_offset=0
|
||||
bpm=0
|
||||
beat_count=0
|
||||
bar_beats=4
|
||||
11
player/pickup/weapon_pickup.gd
Normal file
11
player/pickup/weapon_pickup.gd
Normal file
@@ -0,0 +1,11 @@
|
||||
extends Area3D
|
||||
class_name WeaponPickup
|
||||
|
||||
@export var signal_name : String
|
||||
@export var value : int
|
||||
|
||||
func activate():
|
||||
$AudioStreamPlayer.play()
|
||||
$Node3D.queue_free()
|
||||
$CollisionShape3D.queue_free()
|
||||
$AudioStreamPlayer.finished.connect(queue_free)
|
||||
76
player/player.gd
Normal file
76
player/player.gd
Normal file
@@ -0,0 +1,76 @@
|
||||
extends CharacterBody3D
|
||||
class_name Player
|
||||
|
||||
var input_dir := Vector2.ZERO
|
||||
@onready var animation_tree: AnimationTree = $AnimationTree
|
||||
@onready var pelvis: Node3D = $Node/base/pelvis
|
||||
var not_dead := true
|
||||
|
||||
@onready var weapon_slot_2: Area3D = $WeaponSlot2
|
||||
@onready var weapon_slot: Area3D = $WeaponSlot
|
||||
@onready var collision_shape_3d: CollisionShape3D = $CollisionShape3D
|
||||
@onready var player_hit_box: Area3D = $PlayerHitBox
|
||||
@onready var node: Node3D = $Node
|
||||
@onready var explosion: Node3D = $Explosion
|
||||
@onready var audio_stream_player: AudioStreamPlayer = $AudioStreamPlayer
|
||||
|
||||
@export_multiline var death_message : Array[String]
|
||||
@onready var color_rect: ColorRect = $CanvasLayer/ColorRect
|
||||
|
||||
func handle_dying():
|
||||
not_dead = false
|
||||
weapon_slot_2.queue_free()
|
||||
weapon_slot.queue_free()
|
||||
collision_shape_3d.queue_free()
|
||||
player_hit_box.queue_free()
|
||||
node.queue_free()
|
||||
explosion.play()
|
||||
HudSignalBus.roll_dialog.emit(death_message)
|
||||
audio_stream_player.play()
|
||||
get_tree().create_tween().tween_property(color_rect, "color", Color.BLACK, 5)
|
||||
get_tree().create_timer(5).timeout.connect(foo)
|
||||
|
||||
|
||||
func foo():
|
||||
get_tree().change_scene_to_file("res://mainmenu.tscn")
|
||||
|
||||
func handle_animations():
|
||||
if !not_dead:
|
||||
return
|
||||
animation_tree.set("parameters/walk_timescale/scale", (velocity.length())/3)
|
||||
|
||||
if velocity.length() > 0.1:
|
||||
pelvis.look_at(global_position+velocity)
|
||||
pelvis.rotation.x = 0
|
||||
pelvis.rotation.z = 0
|
||||
|
||||
if velocity.length() < 0.1 and animation_tree.get("parameters/idle_walk_blend/blend_amount") >= 1:
|
||||
var tween = get_tree().create_tween()
|
||||
tween.tween_property(animation_tree, "parameters/idle_walk_blend/blend_amount", 0, .5)
|
||||
#tween.connect("finished", $FootSoundPlayer.play)
|
||||
|
||||
if (velocity.length()) > 0.1 and animation_tree.get("parameters/idle_walk_blend/blend_amount") == 0:
|
||||
var tween = get_tree().create_tween()
|
||||
tween.tween_property(animation_tree, "parameters/idle_walk_blend/blend_amount", 1, .5)
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
|
||||
handle_animations()
|
||||
|
||||
var asd = Vector2.ZERO
|
||||
if not_dead:
|
||||
if Input.is_action_just_pressed("shoot3"):
|
||||
handle_dying()
|
||||
|
||||
asd = Input.get_vector("strafe_left", "strafe_right", "move_front", "move_back")*5
|
||||
rotation.y -= delta*Input.get_axis("turn_left","turn_right")*2
|
||||
|
||||
input_dir = lerp(input_dir, asd, .1)
|
||||
|
||||
var input_velocity = Vector3(input_dir.x, 0, input_dir.y).rotated(Vector3.UP, rotation.y)
|
||||
velocity.x = input_velocity.x
|
||||
velocity.z = input_velocity.z
|
||||
velocity = velocity + Vector3.DOWN*1
|
||||
|
||||
|
||||
move_and_slide()
|
||||
4
player/player_camera_3d.gd
Normal file
4
player/player_camera_3d.gd
Normal file
@@ -0,0 +1,4 @@
|
||||
extends Camera3D
|
||||
|
||||
func _ready() -> void:
|
||||
HudSignalBus.current_camera = self
|
||||
1
player/policerobot.gltf
Normal file
1
player/policerobot.gltf
Normal file
File diff suppressed because one or more lines are too long
1838
player/policerobot.gltf.import
Normal file
1838
player/policerobot.gltf.import
Normal file
File diff suppressed because it is too large
Load Diff
142
player/policerobot.tscn
Normal file
142
player/policerobot.tscn
Normal file
@@ -0,0 +1,142 @@
|
||||
[gd_scene load_steps=21 format=3 uid="uid://dumrr7a54i2oa"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://b578veviuyolk" path="res://player/policerobot.gltf" id="1_ixwro"]
|
||||
[ext_resource type="Script" path="res://player/player.gd" id="2_j1o06"]
|
||||
[ext_resource type="PackedScene" uid="uid://b65pxthbmyf36" path="res://player/weapon_slot.tscn" id="3_hxu8r"]
|
||||
[ext_resource type="Script" path="res://player/player_camera_3d.gd" id="3_igkrx"]
|
||||
[ext_resource type="Resource" uid="uid://cju6axrqorits" path="res://player/weapons/minigun/minigun.tres" id="4_dhwjp"]
|
||||
[ext_resource type="Resource" uid="uid://c0u1d6xstrjm1" path="res://player/weapons/missile/missile_launcher.tres" id="5_4yvmh"]
|
||||
[ext_resource type="Script" path="res://player/enemy_detector.gd" id="6_mhau2"]
|
||||
[ext_resource type="PackedScene" uid="uid://d2p86lb72dp61" path="res://components/healthcomponent.tscn" id="8_vkusc"]
|
||||
[ext_resource type="Script" path="res://components/hit_box.gd" id="9_mjhry"]
|
||||
[ext_resource type="PackedScene" uid="uid://5q0aw58r81vp" path="res://effects/explosion.tscn" id="10_t7674"]
|
||||
[ext_resource type="AudioStream" uid="uid://dk8hjcoex7mf7" path="res://player/weapons/missile/rocket_explosion.ogg" id="11_u8876"]
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_e04f4"]
|
||||
radius = 0.599865
|
||||
height = 1.68
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_mxqph"]
|
||||
animation = &"idle"
|
||||
|
||||
[sub_resource type="AnimationNodeBlend2" id="AnimationNodeBlend2_seikj"]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_pyb5s"]
|
||||
animation = &"walk"
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id="AnimationNodeTimeScale_l04rj"]
|
||||
|
||||
[sub_resource type="AnimationNodeBlendTree" id="AnimationNodeBlendTree_mn5ki"]
|
||||
nodes/idle/node = SubResource("AnimationNodeAnimation_mxqph")
|
||||
nodes/idle/position = Vector2(400, 80)
|
||||
nodes/idle_walk_blend/node = SubResource("AnimationNodeBlend2_seikj")
|
||||
nodes/idle_walk_blend/position = Vector2(900, 80)
|
||||
nodes/output/position = Vector2(1140, 80)
|
||||
nodes/walk/node = SubResource("AnimationNodeAnimation_pyb5s")
|
||||
nodes/walk/position = Vector2(391, 333)
|
||||
nodes/walk_timescale/node = SubResource("AnimationNodeTimeScale_l04rj")
|
||||
nodes/walk_timescale/position = Vector2(700, 320)
|
||||
node_connections = [&"idle_walk_blend", 0, &"idle", &"idle_walk_blend", 1, &"walk_timescale", &"output", 0, &"idle_walk_blend", &"walk_timescale", 0, &"walk"]
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_i41v0"]
|
||||
radius = 1.0
|
||||
|
||||
[sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_degdo"]
|
||||
points = PackedVector3Array(0, 0, 0, -7, -7, -15, 7, -7, -15, 7, 7, -15, -7, 7, -15)
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_5tjuj"]
|
||||
|
||||
[node name="policerobot" instance=ExtResource("1_ixwro")]
|
||||
collision_layer = 2
|
||||
collision_mask = 5
|
||||
script = ExtResource("2_j1o06")
|
||||
|
||||
[node name="PlayerCamera3D" type="Camera3D" parent="." index="2"]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.5, 0.866025, 0, -0.866025, 0.5, 0, 10, 1.75)
|
||||
current = true
|
||||
fov = 70.0
|
||||
script = ExtResource("3_igkrx")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." index="3"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.833356, 0)
|
||||
shape = SubResource("CapsuleShape3D_e04f4")
|
||||
|
||||
[node name="AnimationTree" type="AnimationTree" parent="." index="4"]
|
||||
tree_root = SubResource("AnimationNodeBlendTree_mn5ki")
|
||||
advance_expression_base_node = NodePath("../AnimationPlayer")
|
||||
anim_player = NodePath("../AnimationPlayer")
|
||||
parameters/idle_walk_blend/blend_amount = 0.0
|
||||
parameters/walk_timescale/scale = 1.0
|
||||
|
||||
[node name="WeaponSlot" parent="." index="5" instance=ExtResource("3_hxu8r")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 1.3, -0.3)
|
||||
weapon = ExtResource("4_dhwjp")
|
||||
max_ammo = 300
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="WeaponSlot" index="1"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, -0.5, 0)
|
||||
shape = SubResource("SphereShape3D_i41v0")
|
||||
|
||||
[node name="WeaponSlot2" parent="." index="6" instance=ExtResource("3_hxu8r")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 1.3, -0.3)
|
||||
weapon = ExtResource("5_4yvmh")
|
||||
weapon_key = "shoot2"
|
||||
weapon_signal_name = "missile"
|
||||
max_ammo = 40
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="WeaponSlot2" index="1"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, -0.5, 0)
|
||||
shape = SubResource("SphereShape3D_i41v0")
|
||||
|
||||
[node name="EnemyDetector" type="Area3D" parent="." index="7"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.14599, 0.673118)
|
||||
collision_layer = 0
|
||||
collision_mask = 4
|
||||
script = ExtResource("6_mhau2")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="EnemyDetector" index="0"]
|
||||
shape = SubResource("ConvexPolygonShape3D_degdo")
|
||||
|
||||
[node name="Healthcomponent" parent="." index="8" instance=ExtResource("8_vkusc")]
|
||||
collision_mask = 128
|
||||
max_health = 1000.0
|
||||
signal_name = "armor"
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Healthcomponent" index="0"]
|
||||
shape = SubResource("SphereShape3D_5tjuj")
|
||||
|
||||
[node name="PlayerHitBox" type="Area3D" parent="." index="9" node_paths=PackedStringArray("health_component")]
|
||||
collision_layer = 8
|
||||
collision_mask = 64
|
||||
script = ExtResource("9_mjhry")
|
||||
health_component = NodePath("../Healthcomponent")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="PlayerHitBox" index="0"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.833356, 0)
|
||||
shape = SubResource("CapsuleShape3D_e04f4")
|
||||
|
||||
[node name="Explosion" parent="." index="10" instance=ExtResource("10_t7674")]
|
||||
transform = Transform3D(4, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0)
|
||||
|
||||
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="." index="11"]
|
||||
stream = ExtResource("11_u8876")
|
||||
bus = &"SFX"
|
||||
|
||||
[node name="CanvasLayer" type="CanvasLayer" parent="." index="12"]
|
||||
layer = 2
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="CanvasLayer" index="0"]
|
||||
z_index = 10
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
color = Color(0, 0, 0, 0)
|
||||
|
||||
[connection signal="new_target" from="EnemyDetector" to="WeaponSlot" method="set_target"]
|
||||
[connection signal="new_target" from="EnemyDetector" to="WeaponSlot2" method="set_target"]
|
||||
[connection signal="area_entered" from="Healthcomponent" to="Healthcomponent" method="_on_area_entered"]
|
||||
[connection signal="start_dying" from="Healthcomponent" to="." method="handle_dying"]
|
||||
[connection signal="area_entered" from="PlayerHitBox" to="PlayerHitBox" method="_on_area_entered"]
|
||||
[connection signal="body_entered" from="PlayerHitBox" to="PlayerHitBox" method="_on_body_entered"]
|
||||
BIN
player/policerobot_0.png
Normal file
BIN
player/policerobot_0.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 45 KiB |
37
player/policerobot_0.png.import
Normal file
37
player/policerobot_0.png.import
Normal file
@@ -0,0 +1,37 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://drp73awjxgbex"
|
||||
path="res://.godot/imported/policerobot_0.png-2dff24e0ba20a854a50c59dfd7ffd55e.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "dfa09b1d58b47e26ffd51ba9c2ca4277"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://player/policerobot_0.png"
|
||||
dest_files=["res://.godot/imported/policerobot_0.png-2dff24e0ba20a854a50c59dfd7ffd55e.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=3
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
54
player/weapon_slot.gd
Normal file
54
player/weapon_slot.gd
Normal file
@@ -0,0 +1,54 @@
|
||||
extends Node3D
|
||||
|
||||
@export var weapon : Weapon
|
||||
@export var weapon_key : String = "shoot1"
|
||||
@export var weapon_signal_name = "minigun"
|
||||
@onready var audio_stream_player_3d: AudioStreamPlayer3D = $AudioStreamPlayer3D
|
||||
@export var max_ammo : int = 1000
|
||||
|
||||
var can_shoot := true
|
||||
|
||||
@onready var current_ammo : int = max_ammo
|
||||
|
||||
@export var target : Node3D
|
||||
|
||||
func set_target(value: Node3D):
|
||||
target = value
|
||||
|
||||
func _ready() -> void:
|
||||
if weapon.shooting_sound:
|
||||
audio_stream_player_3d.stream = weapon.shooting_sound
|
||||
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
if Input.is_action_pressed(weapon_key):
|
||||
shoot()
|
||||
if is_instance_valid(target) && target:
|
||||
look_at(target.global_position+Vector3(0,.5,0))
|
||||
else:
|
||||
rotation = Vector3.ZERO
|
||||
|
||||
|
||||
func reload():
|
||||
can_shoot = true
|
||||
|
||||
|
||||
func shoot():
|
||||
if can_shoot and current_ammo > 0:
|
||||
HudSignalBus.emit_signal(weapon_signal_name, current_ammo, max_ammo)
|
||||
current_ammo = current_ammo - 1
|
||||
print(current_ammo)
|
||||
audio_stream_player_3d.play()
|
||||
can_shoot = false
|
||||
get_tree().create_timer(weapon.cooldown).timeout.connect(reload)
|
||||
var new_projectile = weapon.projectile_scene.instantiate()
|
||||
new_projectile.global_transform = global_transform
|
||||
get_tree().root.add_child(new_projectile)
|
||||
|
||||
|
||||
func _on_area_entered(area: Area3D) -> void:
|
||||
if area is WeaponPickup:
|
||||
if area.signal_name == weapon_signal_name:
|
||||
current_ammo = clamp(current_ammo + area.value, 0, max_ammo)
|
||||
HudSignalBus.emit_signal(weapon_signal_name, current_ammo, max_ammo)
|
||||
area.activate()
|
||||
15
player/weapon_slot.tscn
Normal file
15
player/weapon_slot.tscn
Normal file
@@ -0,0 +1,15 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://b65pxthbmyf36"]
|
||||
|
||||
[ext_resource type="Script" path="res://player/weapon_slot.gd" id="1_1d75d"]
|
||||
|
||||
[node name="WeaponSlot" type="Area3D"]
|
||||
collision_layer = 0
|
||||
collision_mask = 256
|
||||
script = ExtResource("1_1d75d")
|
||||
|
||||
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="."]
|
||||
volume_db = -10.0
|
||||
max_polyphony = 10
|
||||
bus = &"SFX"
|
||||
|
||||
[connection signal="area_entered" from="." to="." method="_on_area_entered"]
|
||||
16
player/weapons/minigun/minigun.tres
Normal file
16
player/weapons/minigun/minigun.tres
Normal file
@@ -0,0 +1,16 @@
|
||||
[gd_resource type="Resource" script_class="Weapon" load_steps=5 format=3 uid="uid://cju6axrqorits"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://serk58t3v1t3" path="res://player/weapons/minigun/minigun_projectile.tscn" id="1_bckir"]
|
||||
[ext_resource type="Script" path="res://player/weapons/weapon.gd" id="1_yyole"]
|
||||
[ext_resource type="AudioStream" uid="uid://dl17wjco1lk1w" path="res://player/weapons/minigun/pistol-shot.ogg" id="3_j6kkp"]
|
||||
|
||||
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_yqqtq"]
|
||||
random_pitch = 1.1
|
||||
streams_count = 1
|
||||
stream_0/stream = ExtResource("3_j6kkp")
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_yyole")
|
||||
cooldown = 0.11
|
||||
projectile_scene = ExtResource("1_bckir")
|
||||
shooting_sound = SubResource("AudioStreamRandomizer_yqqtq")
|
||||
43
player/weapons/minigun/minigun_projectile.tscn
Normal file
43
player/weapons/minigun/minigun_projectile.tscn
Normal file
@@ -0,0 +1,43 @@
|
||||
[gd_scene load_steps=6 format=3 uid="uid://serk58t3v1t3"]
|
||||
|
||||
[ext_resource type="Script" path="res://components/projectile.gd" id="1_a3wmo"]
|
||||
[ext_resource type="Script" path="res://components/projectile_mover_linear.gd" id="2_ruvri"]
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_ulfb8"]
|
||||
radius = 0.1
|
||||
height = 0.5
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ql67j"]
|
||||
albedo_color = Color(1, 1, 0.427451, 1)
|
||||
emission_enabled = true
|
||||
emission = Color(1, 1, 0, 1)
|
||||
emission_energy_multiplier = 29.45
|
||||
disable_receive_shadows = true
|
||||
|
||||
[sub_resource type="CapsuleMesh" id="CapsuleMesh_3h1yl"]
|
||||
material = SubResource("StandardMaterial3D_ql67j")
|
||||
radius = 0.02
|
||||
height = 0.9
|
||||
|
||||
[node name="MinigunProjectile" type="CharacterBody3D"]
|
||||
collision_layer = 16
|
||||
collision_mask = 33
|
||||
motion_mode = 1
|
||||
safe_margin = 0.01
|
||||
script = ExtResource("1_a3wmo")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1.91069e-15, -4.37114e-08, 1, -1, -4.37114e-08, 0, 4.37114e-08, -1, -4.37114e-08, 0, 0, 0)
|
||||
shape = SubResource("CapsuleShape3D_ulfb8")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(1.91069e-15, -4.37114e-08, 1, -1, -4.37114e-08, 0, 4.37114e-08, -1, -4.37114e-08, 0, 0, -0.5)
|
||||
gi_mode = 0
|
||||
mesh = SubResource("CapsuleMesh_3h1yl")
|
||||
|
||||
[node name="ProjectileMoverLinear" type="Node3D" parent="."]
|
||||
script = ExtResource("2_ruvri")
|
||||
speed = 50.0
|
||||
|
||||
[connection signal="collided" from="." to="CollisionShape3D" method="free"]
|
||||
[connection signal="collided" from="." to="MeshInstance3D" method="free"]
|
||||
BIN
player/weapons/minigun/pistol-shot.ogg
Normal file
BIN
player/weapons/minigun/pistol-shot.ogg
Normal file
Binary file not shown.
19
player/weapons/minigun/pistol-shot.ogg.import
Normal file
19
player/weapons/minigun/pistol-shot.ogg.import
Normal file
@@ -0,0 +1,19 @@
|
||||
[remap]
|
||||
|
||||
importer="oggvorbisstr"
|
||||
type="AudioStreamOggVorbis"
|
||||
uid="uid://dl17wjco1lk1w"
|
||||
path="res://.godot/imported/pistol-shot.ogg-16d3d3f42751f44728a3f16f89fe2fda.oggvorbisstr"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://player/weapons/minigun/pistol-shot.ogg"
|
||||
dest_files=["res://.godot/imported/pistol-shot.ogg-16d3d3f42751f44728a3f16f89fe2fda.oggvorbisstr"]
|
||||
|
||||
[params]
|
||||
|
||||
loop=false
|
||||
loop_offset=0
|
||||
bpm=0
|
||||
beat_count=0
|
||||
bar_beats=4
|
||||
BIN
player/weapons/minigun/pistol-shot2.ogg
Normal file
BIN
player/weapons/minigun/pistol-shot2.ogg
Normal file
Binary file not shown.
19
player/weapons/minigun/pistol-shot2.ogg.import
Normal file
19
player/weapons/minigun/pistol-shot2.ogg.import
Normal file
@@ -0,0 +1,19 @@
|
||||
[remap]
|
||||
|
||||
importer="oggvorbisstr"
|
||||
type="AudioStreamOggVorbis"
|
||||
uid="uid://bvfof3p2pc6pi"
|
||||
path="res://.godot/imported/pistol-shot2.ogg-7aaa1cc2e0d5ccf082c461359363e4c2.oggvorbisstr"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://player/weapons/minigun/pistol-shot2.ogg"
|
||||
dest_files=["res://.godot/imported/pistol-shot2.ogg-7aaa1cc2e0d5ccf082c461359363e4c2.oggvorbisstr"]
|
||||
|
||||
[params]
|
||||
|
||||
loop=false
|
||||
loop_offset=0
|
||||
bpm=0
|
||||
beat_count=0
|
||||
bar_beats=4
|
||||
BIN
player/weapons/missile/521377__jarusca__rocket-launch.mp3
Normal file
BIN
player/weapons/missile/521377__jarusca__rocket-launch.mp3
Normal file
Binary file not shown.
@@ -0,0 +1,19 @@
|
||||
[remap]
|
||||
|
||||
importer="mp3"
|
||||
type="AudioStreamMP3"
|
||||
uid="uid://cwcxm1vnmhqgy"
|
||||
path="res://.godot/imported/521377__jarusca__rocket-launch.mp3-28b843d7fc5c02e3d9f9c7975beb70f2.mp3str"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://player/weapons/missile/521377__jarusca__rocket-launch.mp3"
|
||||
dest_files=["res://.godot/imported/521377__jarusca__rocket-launch.mp3-28b843d7fc5c02e3d9f9c7975beb70f2.mp3str"]
|
||||
|
||||
[params]
|
||||
|
||||
loop=false
|
||||
loop_offset=0
|
||||
bpm=0
|
||||
beat_count=0
|
||||
bar_beats=4
|
||||
1
player/weapons/missile/missile.gltf
Normal file
1
player/weapons/missile/missile.gltf
Normal file
File diff suppressed because one or more lines are too long
36
player/weapons/missile/missile.gltf.import
Normal file
36
player/weapons/missile/missile.gltf.import
Normal file
@@ -0,0 +1,36 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://bqay3fxs1k6sp"
|
||||
path="res://.godot/imported/missile.gltf-6bab6d4a8dd1945d856a530ffc07feef.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://player/weapons/missile/missile.gltf"
|
||||
dest_files=["res://.godot/imported/missile.gltf-6bab6d4a8dd1945d856a530ffc07feef.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
||||
BIN
player/weapons/missile/missile_0.png
Normal file
BIN
player/weapons/missile/missile_0.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.9 KiB |
37
player/weapons/missile/missile_0.png.import
Normal file
37
player/weapons/missile/missile_0.png.import
Normal file
@@ -0,0 +1,37 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b7q86tkq14pit"
|
||||
path="res://.godot/imported/missile_0.png-de674653dde5e5e229b57f50e2c8618b.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "09a6bb5c3d9a97925d2749080ba5462c"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://player/weapons/missile/missile_0.png"
|
||||
dest_files=["res://.godot/imported/missile_0.png-de674653dde5e5e229b57f50e2c8618b.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=3
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
7
player/weapons/missile/missile_explosion.gd
Normal file
7
player/weapons/missile/missile_explosion.gd
Normal file
@@ -0,0 +1,7 @@
|
||||
extends Area3D
|
||||
class_name ExplosionHurtbox
|
||||
|
||||
@export var damage : float = 100
|
||||
|
||||
func _ready() -> void:
|
||||
get_tree().create_timer(1).timeout.connect(free)
|
||||
32
player/weapons/missile/missile_explosion.tscn
Normal file
32
player/weapons/missile/missile_explosion.tscn
Normal file
@@ -0,0 +1,32 @@
|
||||
[gd_scene load_steps=6 format=3 uid="uid://io6bdbtldghr"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://5q0aw58r81vp" path="res://effects/explosion.tscn" id="1_4yikv"]
|
||||
[ext_resource type="Script" path="res://player/weapons/missile/missile_explosion.gd" id="1_86e7n"]
|
||||
[ext_resource type="AudioStream" uid="uid://dk8hjcoex7mf7" path="res://player/weapons/missile/rocket_explosion.ogg" id="2_j0itb"]
|
||||
|
||||
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_i3qfr"]
|
||||
random_pitch = 1.1
|
||||
streams_count = 1
|
||||
stream_0/stream = ExtResource("2_j0itb")
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_eovnm"]
|
||||
radius = 1.0
|
||||
|
||||
[node name="Missile Explosion" type="Area3D"]
|
||||
collision_layer = 16
|
||||
collision_mask = 32
|
||||
script = ExtResource("1_86e7n")
|
||||
|
||||
[node name="Explosion" parent="." instance=ExtResource("1_4yikv")]
|
||||
|
||||
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="."]
|
||||
stream = SubResource("AudioStreamRandomizer_i3qfr")
|
||||
volume_db = -10.0
|
||||
autoplay = true
|
||||
max_polyphony = 2
|
||||
bus = &"SFX"
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
shape = SubResource("SphereShape3D_eovnm")
|
||||
|
||||
[connection signal="ready" from="." to="Explosion" method="play"]
|
||||
11
player/weapons/missile/missile_launcher.tres
Normal file
11
player/weapons/missile/missile_launcher.tres
Normal file
@@ -0,0 +1,11 @@
|
||||
[gd_resource type="Resource" script_class="Weapon" load_steps=4 format=3 uid="uid://c0u1d6xstrjm1"]
|
||||
|
||||
[ext_resource type="Script" path="res://player/weapons/weapon.gd" id="1_648gg"]
|
||||
[ext_resource type="PackedScene" uid="uid://mxk40hn15e7b" path="res://player/weapons/missile/missile_projectile.tscn" id="1_cx4ji"]
|
||||
[ext_resource type="AudioStream" uid="uid://cwcxm1vnmhqgy" path="res://player/weapons/missile/521377__jarusca__rocket-launch.mp3" id="3_t42m8"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_648gg")
|
||||
cooldown = 1.0
|
||||
projectile_scene = ExtResource("1_cx4ji")
|
||||
shooting_sound = ExtResource("3_t42m8")
|
||||
109
player/weapons/missile/missile_projectile.tscn
Normal file
109
player/weapons/missile/missile_projectile.tscn
Normal file
@@ -0,0 +1,109 @@
|
||||
[gd_scene load_steps=20 format=3 uid="uid://mxk40hn15e7b"]
|
||||
|
||||
[ext_resource type="Script" path="res://components/projectile.gd" id="1_ryiqa"]
|
||||
[ext_resource type="PackedScene" uid="uid://bqay3fxs1k6sp" path="res://player/weapons/missile/missile.gltf" id="1_t253x"]
|
||||
[ext_resource type="PackedScene" uid="uid://io6bdbtldghr" path="res://player/weapons/missile/missile_explosion.tscn" id="2_ebqxf"]
|
||||
[ext_resource type="Texture2D" uid="uid://dg28fd1gyn80b" path="res://effects/flare_01.png" id="3_0uwxb"]
|
||||
[ext_resource type="Script" path="res://player/weapons/projectile_mover_accelerating.gd" id="3_pfhta"]
|
||||
[ext_resource type="Texture2D" uid="uid://drr1nogesyvkd" path="res://effects/smoke_02.png" id="3_wdx4k"]
|
||||
[ext_resource type="Script" path="res://player/weapons/rotator.gd" id="4_xb122"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_vroln"]
|
||||
transparency = 1
|
||||
blend_mode = 1
|
||||
cull_mode = 2
|
||||
shading_mode = 0
|
||||
albedo_color = Color(1, 1, 0.584314, 1)
|
||||
albedo_texture = ExtResource("3_0uwxb")
|
||||
billboard_mode = 1
|
||||
|
||||
[sub_resource type="QuadMesh" id="QuadMesh_4cw2w"]
|
||||
material = SubResource("StandardMaterial3D_vroln")
|
||||
size = Vector2(2, 2)
|
||||
|
||||
[sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_jpo1o"]
|
||||
points = PackedVector3Array(0.176777, -3.46154e-05, 0.583333, -3.46154e-05, 0.176777, 0.583333, -3.46154e-05, -0.176777, 0.583333, -3.46154e-05, -0.14556, -0.416691, 0.145491, -3.46154e-05, -0.416691, -0.176777, -3.46154e-05, 0.583333, -3.46154e-05, 0.145491, -0.416691, -0.14556, -3.46154e-05, -0.416691, -3.46154e-05, -3.46154e-05, -0.666667)
|
||||
|
||||
[sub_resource type="Curve" id="Curve_b3xkm"]
|
||||
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
|
||||
point_count = 2
|
||||
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_j0204"]
|
||||
curve = SubResource("Curve_b3xkm")
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_tsk6x"]
|
||||
offsets = PackedFloat32Array(0, 0.0592287, 0.110193, 0.219008, 1)
|
||||
colors = PackedColorArray(1, 1, 1, 1, 1, 1, 0, 1, 0.658824, 0.145098, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1)
|
||||
|
||||
[sub_resource type="GradientTexture1D" id="GradientTexture1D_iyvb1"]
|
||||
gradient = SubResource("Gradient_tsk6x")
|
||||
|
||||
[sub_resource type="Curve" id="Curve_4sd1h"]
|
||||
_data = [Vector2(0, 0.953748), 0.0, 0.0, 0, 0, Vector2(1, 1), 0.0, 0.0, 0, 0]
|
||||
point_count = 2
|
||||
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_v2271"]
|
||||
curve = SubResource("Curve_4sd1h")
|
||||
|
||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_0u7ib"]
|
||||
angle_min = 1.07288e-05
|
||||
angle_max = 360.0
|
||||
gravity = Vector3(0, 5, 0)
|
||||
scale_curve = SubResource("CurveTexture_v2271")
|
||||
color_ramp = SubResource("GradientTexture1D_iyvb1")
|
||||
alpha_curve = SubResource("CurveTexture_j0204")
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_k6aoy"]
|
||||
transparency = 1
|
||||
shading_mode = 0
|
||||
vertex_color_use_as_albedo = true
|
||||
albedo_texture = ExtResource("3_wdx4k")
|
||||
billboard_mode = 3
|
||||
billboard_keep_scale = true
|
||||
particles_anim_h_frames = 1
|
||||
particles_anim_v_frames = 1
|
||||
particles_anim_loop = false
|
||||
|
||||
[sub_resource type="QuadMesh" id="QuadMesh_oj824"]
|
||||
material = SubResource("StandardMaterial3D_k6aoy")
|
||||
|
||||
[node name="Missile Projectile" type="CharacterBody3D"]
|
||||
collision_layer = 16
|
||||
collision_mask = 33
|
||||
script = ExtResource("1_ryiqa")
|
||||
collsion_scene = ExtResource("2_ebqxf")
|
||||
|
||||
[node name="blockbench_export" parent="." instance=ExtResource("1_t253x")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.297032, 0)
|
||||
|
||||
[node name="cuboid" parent="blockbench_export/Node" index="0"]
|
||||
transform = Transform3D(0.3, 0, 0, 0, 0.3, 0, 0, 0, 0.3, 0, 0, 0)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="blockbench_export"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.0669867, 0.195827)
|
||||
mesh = SubResource("QuadMesh_4cw2w")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(0.3, 0, 0, 0, 0.3, 0, 0, 0, 0.3, 0, -0.297032, 0)
|
||||
shape = SubResource("ConvexPolygonShape3D_jpo1o")
|
||||
|
||||
[node name="ProjectileMoverAccelerating" type="Node3D" parent="."]
|
||||
script = ExtResource("3_pfhta")
|
||||
initial_speed = 15.0
|
||||
acceleration = 15.0
|
||||
|
||||
[node name="Rotator" type="Node3D" parent="."]
|
||||
script = ExtResource("4_xb122")
|
||||
|
||||
[node name="GPUParticles3D" type="GPUParticles3D" parent="."]
|
||||
transform = Transform3D(0.3, 0, 0, 0, 0.3, 0, 0, 0, 0.3, 0, -0.297032, 0.2)
|
||||
amount = 16
|
||||
lifetime = 0.5
|
||||
process_material = SubResource("ParticleProcessMaterial_0u7ib")
|
||||
draw_pass_1 = SubResource("QuadMesh_oj824")
|
||||
|
||||
[connection signal="collided" from="." to="CollisionShape3D" method="free"]
|
||||
[connection signal="collided" from="." to="blockbench_export" method="set_visible" binds= [false]]
|
||||
[connection signal="collided" from="." to="GPUParticles3D" method="set_emitting" binds= [false]]
|
||||
|
||||
[editable path="blockbench_export"]
|
||||
BIN
player/weapons/missile/rocket_explosion.ogg
Normal file
BIN
player/weapons/missile/rocket_explosion.ogg
Normal file
Binary file not shown.
19
player/weapons/missile/rocket_explosion.ogg.import
Normal file
19
player/weapons/missile/rocket_explosion.ogg.import
Normal file
@@ -0,0 +1,19 @@
|
||||
[remap]
|
||||
|
||||
importer="oggvorbisstr"
|
||||
type="AudioStreamOggVorbis"
|
||||
uid="uid://dk8hjcoex7mf7"
|
||||
path="res://.godot/imported/rocket_explosion.ogg-d3aa97a90ce5c30c80514745c8d697b9.oggvorbisstr"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://player/weapons/missile/rocket_explosion.ogg"
|
||||
dest_files=["res://.godot/imported/rocket_explosion.ogg-d3aa97a90ce5c30c80514745c8d697b9.oggvorbisstr"]
|
||||
|
||||
[params]
|
||||
|
||||
loop=false
|
||||
loop_offset=0
|
||||
bpm=0
|
||||
beat_count=0
|
||||
bar_beats=4
|
||||
16
player/weapons/projectile_mover_accelerating.gd
Normal file
16
player/weapons/projectile_mover_accelerating.gd
Normal file
@@ -0,0 +1,16 @@
|
||||
extends Node3D
|
||||
|
||||
@export var initial_speed : float
|
||||
@export var acceleration : float
|
||||
|
||||
@onready var current_velocity : float = initial_speed
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
var dir = -get_parent().transform.basis.z
|
||||
current_velocity = current_velocity + (acceleration * delta)
|
||||
get_parent().velocity = current_velocity * dir
|
||||
|
||||
if get_parent().move_and_slide():
|
||||
get_parent().projectile_collision()
|
||||
queue_free()
|
||||
|
||||
6
player/weapons/rotator.gd
Normal file
6
player/weapons/rotator.gd
Normal file
@@ -0,0 +1,6 @@
|
||||
extends Node3D
|
||||
|
||||
@export var rotation_speed := 15
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
get_parent().rotation.z += delta*rotation_speed
|
||||
6
player/weapons/weapon.gd
Normal file
6
player/weapons/weapon.gd
Normal file
@@ -0,0 +1,6 @@
|
||||
extends Resource
|
||||
class_name Weapon
|
||||
|
||||
@export var cooldown : float = .1
|
||||
@export var projectile_scene : PackedScene
|
||||
@export var shooting_sound: AudioStream
|
||||
Reference in New Issue
Block a user