This commit is contained in:
Felix Kaiser
2025-02-17 16:46:19 +01:00
parent 534181eb88
commit 3f62e5e31d
245 changed files with 15711 additions and 2 deletions

29
player/enemy_detector.gd Normal file
View 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)

File diff suppressed because one or more lines are too long

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

View 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

View 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

View 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"

View 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"

File diff suppressed because one or more lines are too long

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View 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

View 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

Binary file not shown.

View 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

View 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
View 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()

View File

@@ -0,0 +1,4 @@
extends Camera3D
func _ready() -> void:
HudSignalBus.current_camera = self

1
player/policerobot.gltf Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

142
player/policerobot.tscn Normal file
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

View 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
View 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
View 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"]

View 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")

View 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"]

Binary file not shown.

View 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

Binary file not shown.

View 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

View File

@@ -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

File diff suppressed because one or more lines are too long

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View 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

View 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)

View 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"]

View 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")

View 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"]

Binary file not shown.

View 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

View 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()

View 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
View 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