made tracker gun
This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
[gd_scene load_steps=111 format=4 uid="uid://6agmt1hqlhww"]
|
||||
[gd_scene load_steps=112 format=4 uid="uid://6agmt1hqlhww"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/LevelManager.gd" id="1_sbpvn"]
|
||||
[ext_resource type="PackedScene" uid="uid://brl0bsqjl5dg3" path="res://assets/mac_10.tscn" id="2_fn4vb"]
|
||||
[ext_resource type="Texture2D" uid="uid://ckjcv72jcojjh" path="res://assets/materials/91_laurel hedge PBR texture-seamless_hr/91_laurel hedge_DIFF (Custom).jpg" id="3_3ov8a"]
|
||||
[ext_resource type="LightmapGIData" uid="uid://bwpvltmeo4cfl" path="res://assets/LevelBlockouts/blockout_2.lmbake" id="3_d2pxn"]
|
||||
[ext_resource type="PackedScene" uid="uid://dslxb3psx30vp" path="res://assets/pistol1.tscn" id="3_s3a37"]
|
||||
[ext_resource type="Texture2D" uid="uid://d210plbmb7a2o" path="res://assets/materials/91_laurel hedge PBR texture-seamless_hr/91_laurel hedge_NORM (Custom).jpg" id="4_5u2rd"]
|
||||
[ext_resource type="PackedScene" uid="uid://20csd6dmwj4y" path="res://assets/jump_platform.tscn" id="4_j47q8"]
|
||||
[ext_resource type="Texture2D" uid="uid://b43o7m3ykjvqg" path="res://assets/materials/71_clean plaster PBR texture-seamless_hr/71_clean plaster_DIFF.jpg" id="5_bm4ps"]
|
||||
@@ -1004,6 +1005,7 @@ player = NodePath("Player")
|
||||
money = 50
|
||||
start_health = 5
|
||||
gun_1 = ExtResource("2_fn4vb")
|
||||
gun_2 = ExtResource("3_s3a37")
|
||||
health_drop_enabled = false
|
||||
|
||||
[node name="Player" parent="." instance=ExtResource("9_3usor")]
|
||||
|
||||
@@ -82,10 +82,10 @@ margin = 0.001
|
||||
height = 1.5
|
||||
radius = 0.055
|
||||
|
||||
[node name="Bullet" type="RigidBody3D"]
|
||||
[node name="Bullet" type="RigidBody3D" node_paths=PackedStringArray("collision_shape")]
|
||||
top_level = true
|
||||
collision_layer = 0
|
||||
collision_mask = 105
|
||||
collision_layer = 128
|
||||
collision_mask = 225
|
||||
axis_lock_angular_x = true
|
||||
axis_lock_angular_y = true
|
||||
axis_lock_angular_z = true
|
||||
@@ -95,6 +95,7 @@ continuous_cd = true
|
||||
contact_monitor = true
|
||||
max_contacts_reported = 3
|
||||
script = ExtResource("1_oj0f5")
|
||||
collision_shape = NodePath("BulletCollision")
|
||||
|
||||
[node name="Cylinder" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(-2, -3.01992e-07, 0, 0, 0, -2, 3.01992e-07, -2, 0, 1.46364e-07, 0, 0.627698)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
[gd_scene load_steps=19 format=3 uid="uid://dslxb3psx30vp"]
|
||||
[gd_scene load_steps=23 format=3 uid="uid://dslxb3psx30vp"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://svrb3n31mkag" path="res://assets/Models/gun.blend" id="1_frekg"]
|
||||
[ext_resource type="Script" path="res://scripts/gun.gd" id="2_63tea"]
|
||||
[ext_resource type="PackedScene" uid="uid://dqhltdnqyg8ni" path="res://assets/bullet.tscn" id="3_4pvsf"]
|
||||
[ext_resource type="Script" path="res://scripts/trackerGun.gd" id="2_ieev5"]
|
||||
[ext_resource type="PackedScene" uid="uid://7u8hjsvnfwjn" path="res://assets/tracker_bullet.tscn" id="3_hixkr"]
|
||||
[ext_resource type="PackedScene" uid="uid://crvohhc6kgshn" path="res://assets/bullet_hole.tscn" id="4_bu1g0"]
|
||||
[ext_resource type="PackedScene" uid="uid://c1gdehrsytlkk" path="res://assets/casing_2.tscn" id="5_gls8p"]
|
||||
[ext_resource type="PackedScene" uid="uid://cp8563f0oxvff" path="res://assets/mag1.tscn" id="6_ysonb"]
|
||||
@@ -11,6 +11,43 @@
|
||||
[ext_resource type="AudioStream" uid="uid://db3iy0f1pa5lg" path="res://assets/Audio/Weapons/gun-m-16-reload-full-clip-magazine-SBA-300121257.wav" id="10_xn8pu"]
|
||||
[ext_resource type="Texture2D" uid="uid://dtg3nb2ew72c3" path="res://assets/star_05.png" id="11_x0sef"]
|
||||
|
||||
[sub_resource type="SphereMesh" id="SphereMesh_u47cm"]
|
||||
radius = 0.05
|
||||
height = 0.1
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_4iouf"]
|
||||
albedo_color = Color(0, 0, 0, 1)
|
||||
emission_enabled = true
|
||||
emission = Color(0.743194, 0.35874, 1.92523e-07, 1)
|
||||
emission_energy_multiplier = 5.0
|
||||
|
||||
[sub_resource type="Animation" id="Animation_urfns"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("gun: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.000397999, -0.11995)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("gun:rotation")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, -1.5708, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_u008m"]
|
||||
resource_name = "empty"
|
||||
length = 0.25
|
||||
@@ -40,6 +77,47 @@ tracks/1/keys = {
|
||||
"values": [Vector3(0, -1.5708, 0), Vector3(5.21802e-09, -1.5708, 0.11966), Vector3(0, -1.5708, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_h3q6j"]
|
||||
resource_name = "fire_tracker"
|
||||
length = 0.35
|
||||
step = 0.01
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("gun:position")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.15, 0.25, 0.35),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, -0.000397999, 0), Vector3(0, 0.116845, 0), Vector3(0, -0.0215431, 0), Vector3(0, -0.000397999, 0)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("gun:rotation")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.15, 0.25, 0.35),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, -1.5708, 0), Vector3(-2.69979e-06, -1.5708, -0.841737), Vector3(1.04543e-06, -1.5708, 0.288695), Vector3(0, -1.5708, 0)]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("gun/slide:position")
|
||||
tracks/2/interp = 2
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(),
|
||||
"transitions": PackedFloat32Array(),
|
||||
"update": 0,
|
||||
"values": []
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_cifop"]
|
||||
resource_name = "inspect"
|
||||
length = 2.51
|
||||
@@ -255,17 +333,22 @@ tracks/2/path = NodePath(".")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(1),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"values": [{
|
||||
"args": [],
|
||||
"method": &"remove_tracker"
|
||||
}, {
|
||||
"args": [],
|
||||
"method": &"swapped_out"
|
||||
}]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_vkrtt"]
|
||||
_data = {
|
||||
"RESET": SubResource("Animation_urfns"),
|
||||
"empty": SubResource("Animation_u008m"),
|
||||
"fire_tracker": SubResource("Animation_h3q6j"),
|
||||
"inspect": SubResource("Animation_cifop"),
|
||||
"reload": SubResource("Animation_svhrs"),
|
||||
"shoot": SubResource("Animation_bsc1a"),
|
||||
@@ -274,15 +357,16 @@ _data = {
|
||||
"swap_out": SubResource("Animation_lleyf")
|
||||
}
|
||||
|
||||
[node name="Pistol" node_paths=PackedStringArray("flare_light", "anim_player", "barrel_raycast", "casing_ejector", "mag_ejector", "audio_fire", "audio_empty", "audio_reload") instance=ExtResource("1_frekg")]
|
||||
[node name="Pistol" node_paths=PackedStringArray("tracker_indicator", "flare_light", "anim_player", "barrel_raycast", "casing_ejector", "mag_ejector", "audio_fire", "audio_empty", "audio_reload") instance=ExtResource("1_frekg")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.0145504, -0.0460228)
|
||||
script = ExtResource("2_63tea")
|
||||
gun_name = "Dumb Pistol"
|
||||
script = ExtResource("2_ieev5")
|
||||
gun_name = "Tracker Pistol"
|
||||
fire_mode = 2
|
||||
recoil_amount = Vector3(0.01, 0.01, 0.01)
|
||||
bullet_drop = 0.03
|
||||
recoil_amount = Vector3(0, 0.05, 0.05)
|
||||
bullet_speed = 50
|
||||
tracker_indicator = NodePath("gun/slide/TrackerIndicator")
|
||||
flare_light = NodePath("SpotLight3D")
|
||||
bullet = ExtResource("3_4pvsf")
|
||||
bullet = ExtResource("3_hixkr")
|
||||
bullethole = ExtResource("4_bu1g0")
|
||||
casing = ExtResource("5_gls8p")
|
||||
mag = ExtResource("6_ysonb")
|
||||
@@ -295,7 +379,7 @@ audio_empty = NodePath("Audio/Empty")
|
||||
audio_reload = NodePath("Audio/Reload")
|
||||
|
||||
[node name="gun" parent="." index="0"]
|
||||
transform = Transform3D(-1.81e-06, 0, -0.5, 0, 0.5, 0, 0.5, 0, -1.81e-06, 0, -0.000397999, 0)
|
||||
transform = Transform3D(-1.81e-06, 0, -0.5, 0, 0.5, 0, 0.5, 0, -1.81e-06, 0, -0.000397999, -0.11995)
|
||||
|
||||
[node name="mag" parent="gun" index="0"]
|
||||
transform = Transform3D(0.0897307, -0.048904, -9.31323e-10, 0.012226, 0.358923, 1.74623e-10, 3.72529e-09, -1.86265e-09, 0.0323253, 0.00225297, 0.0306008, -2.98023e-08)
|
||||
@@ -303,6 +387,12 @@ transform = Transform3D(0.0897307, -0.048904, -9.31323e-10, 0.012226, 0.358923,
|
||||
[node name="slide" parent="gun" index="1"]
|
||||
transform = Transform3D(0.579973, 0, 0, 0, 0.579973, -1.0175e-10, 1.16415e-10, 7.27596e-11, 0.579973, 0, 0, 0)
|
||||
|
||||
[node name="TrackerIndicator" type="MeshInstance3D" parent="gun/slide" index="0"]
|
||||
transform = Transform3D(1.72422, -9.12793e-23, 0, -6.08805e-20, 1.72422, 3.02495e-10, -3.46063e-10, -2.16309e-10, 1.72422, 0.139739, 0.424926, -5.05937e-07)
|
||||
mesh = SubResource("SphereMesh_u47cm")
|
||||
skeleton = NodePath("../..")
|
||||
surface_material_override/0 = SubResource("StandardMaterial3D_4iouf")
|
||||
|
||||
[node name="RayCastMag" type="RayCast3D" parent="gun" index="2"]
|
||||
transform = Transform3D(1.11722, -0.0135336, 0.080048, 0.00234133, 1.1094, 0.154888, -0.0811502, -0.154313, 1.10651, 0, 0.000445819, 0)
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=26 format=3 uid="uid://drwae3loscbw7"]
|
||||
[gd_scene load_steps=27 format=3 uid="uid://drwae3loscbw7"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/player.gd" id="1_x7wms"]
|
||||
[ext_resource type="Script" path="res://scripts/recoil.gd" id="3_405jc"]
|
||||
@@ -18,6 +18,7 @@
|
||||
[ext_resource type="AudioStream" uid="uid://t50i483xmj3a" path="res://assets/Audio/Weapons/toy-click-spin-SBA-300071143.wav" id="14_pnsbm"]
|
||||
[ext_resource type="Shader" path="res://assets/crtTest.gdshader" id="14_v5svg"]
|
||||
[ext_resource type="AudioStream" uid="uid://c1e6vr2hndho7" path="res://assets/Audio/Weapons/Misc (Ammo Boxes, Holsters, Etc)/Kydex Unholster 002.wav" id="17_1fyjm"]
|
||||
[ext_resource type="AudioStream" uid="uid://dqj4cx05f25jj" path="res://assets/Audio/punch-body-hard-SBA-300156881.wav" id="19_6jglu"]
|
||||
|
||||
[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_l5ga0"]
|
||||
blend_mode = 1
|
||||
@@ -237,6 +238,9 @@ stream = ExtResource("12_f51u4")
|
||||
[node name="WeaponPickup" type="AudioStreamPlayer" parent="Audio"]
|
||||
stream = ExtResource("17_1fyjm")
|
||||
|
||||
[node name="HitIndicator" type="AudioStreamPlayer" parent="Audio"]
|
||||
stream = ExtResource("19_6jglu")
|
||||
|
||||
[connection signal="tree_entered" from="." to="." method="_on_tree_entered"]
|
||||
[connection signal="body_entered" from="pick_up_detection" to="." method="_on_pick_up_detection_body_entered"]
|
||||
[connection signal="body_entered" from="pick_up_magnet" to="." method="_on_pick_up_magnet_body_entered"]
|
||||
|
||||
@@ -1006,10 +1006,10 @@ tracks/1/path = NodePath("revolver1:rotation")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.6, 1),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(-0.988971, 2.72615, -2.59346), Vector3(-0.187002, 0.326746, -1.63372), Vector3(0, 0, -1.5708)]
|
||||
"values": [Vector3(-0.988971, 2.72615, -2.59346), Vector3(0, 0, -1.5708)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_nvmxj"]
|
||||
@@ -1107,11 +1107,11 @@ audio_empty = NodePath("Audio/Empty")
|
||||
audio_reload = NodePath("Audio/Reload")
|
||||
|
||||
[node name="revolver1" parent="." index="0"]
|
||||
transform = Transform3D(-1.086e-06, 0.3, 0, -0.3, -1.086e-06, 0, 0, 0, 0.3, 0, 0, -0.073)
|
||||
transform = Transform3D(0.286982, -0.0566938, 0.0665387, -0.0859102, -0.140712, 0.250638, -0.0161561, -0.258816, -0.150841, -3.07392, -1.84477, 0.367733)
|
||||
mesh = SubResource("ArrayMesh_a1hah")
|
||||
|
||||
[node name="Chamber" parent="revolver1" index="0"]
|
||||
transform = Transform3D(1, 0, 0, 0, -3.61999e-06, -1, 0, 1, -3.61999e-06, -0.0143475, 0, -0.0849619)
|
||||
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, -0.0143475, 0, -0.0849619)
|
||||
mesh = SubResource("ArrayMesh_x43wl")
|
||||
|
||||
[node name="bullet" parent="revolver1/Chamber" index="0"]
|
||||
@@ -1173,7 +1173,7 @@ transform = Transform3D(4.17223e-07, 7.04731e-19, 2.10229, -2.98023e-07, -2.1022
|
||||
mesh = SubResource("ArrayMesh_0w43n")
|
||||
|
||||
[node name="Trigger" parent="revolver1" index="2"]
|
||||
transform = Transform3D(-0.86282, -0.50551, 1.82994e-06, 0, -3.61999e-06, -1, 0.50551, -0.86282, 3.1234e-06, 0.226752, 0, -0.00209358)
|
||||
transform = Transform3D(-0.86282, -0.50551, 2.20966e-08, 0, -4.37114e-08, -1, 0.50551, -0.86282, 3.77151e-08, 0.226752, 0, -0.00209358)
|
||||
mesh = SubResource("ArrayMesh_ahftj")
|
||||
|
||||
[node name="flare" type="MeshInstance3D" parent="revolver1" index="3"]
|
||||
|
||||
109
assets/shoot_marker.tscn
Normal file
109
assets/shoot_marker.tscn
Normal file
@@ -0,0 +1,109 @@
|
||||
[gd_scene load_steps=9 format=3 uid="uid://rcixv0spjpvw"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/tracker_marker.gd" id="1_pi8qa"]
|
||||
|
||||
[sub_resource type="SphereMesh" id="SphereMesh_ejmtl"]
|
||||
radius = 0.1
|
||||
height = 0.2
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_fmyhe"]
|
||||
transparency = 1
|
||||
blend_mode = 1
|
||||
emission_enabled = true
|
||||
emission = Color(0, 0.745098, 0, 1)
|
||||
emission_energy_multiplier = 10.0
|
||||
|
||||
[sub_resource type="CylinderMesh" id="CylinderMesh_0f8ut"]
|
||||
top_radius = 0.1
|
||||
bottom_radius = 0.01
|
||||
|
||||
[sub_resource type="Animation" id="Animation_rkem3"]
|
||||
resource_name = "mark"
|
||||
length = 0.25
|
||||
step = 0.01
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("MeshHandle:position")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.25),
|
||||
"transitions": PackedFloat32Array(2, 2),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 20, 0), Vector3(0, 0, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_u52hi"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("MeshHandle: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)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_ylwlm"]
|
||||
resource_name = "remove"
|
||||
length = 0.5
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("MeshHandle:position")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(2, 2),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(0, 20, 0)]
|
||||
}
|
||||
tracks/1/type = "method"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath(".")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0.5),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"values": [{
|
||||
"args": [],
|
||||
"method": &"queue_free"
|
||||
}]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_776o6"]
|
||||
_data = {
|
||||
"RESET": SubResource("Animation_u52hi"),
|
||||
"mark": SubResource("Animation_rkem3"),
|
||||
"remove": SubResource("Animation_ylwlm")
|
||||
}
|
||||
|
||||
[node name="ShootMarker" type="Node3D"]
|
||||
script = ExtResource("1_pi8qa")
|
||||
|
||||
[node name="Sphere" type="MeshInstance3D" parent="."]
|
||||
mesh = SubResource("SphereMesh_ejmtl")
|
||||
skeleton = NodePath("../MeshHandle")
|
||||
surface_material_override/0 = SubResource("StandardMaterial3D_fmyhe")
|
||||
|
||||
[node name="MeshHandle" type="Node3D" parent="."]
|
||||
|
||||
[node name="Mesh" type="MeshInstance3D" parent="MeshHandle"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||
mesh = SubResource("CylinderMesh_0f8ut")
|
||||
skeleton = NodePath("../..")
|
||||
surface_material_override/0 = SubResource("StandardMaterial3D_fmyhe")
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
"": SubResource("AnimationLibrary_776o6")
|
||||
}
|
||||
autoplay = "mark"
|
||||
@@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=6 format=3 uid="uid://717hhehp83k8"]
|
||||
[gd_scene load_steps=8 format=3 uid="uid://717hhehp83k8"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/shotgun_pellet.gd" id="1_1v1ju"]
|
||||
|
||||
@@ -19,7 +19,16 @@ emission_energy_multiplier = 20.0
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_55xw1"]
|
||||
radius = 0.05
|
||||
|
||||
[sub_resource type="Animation" id="Animation_s2rms"]
|
||||
resource_name = "pellet_glow"
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_2bjxd"]
|
||||
_data = {
|
||||
"pellet_glow": SubResource("Animation_s2rms")
|
||||
}
|
||||
|
||||
[node name="ShotgunPellet" type="RigidBody3D" groups=["pellet", "spawned"]]
|
||||
visible = false
|
||||
collision_layer = 160
|
||||
collision_mask = 237
|
||||
mass = 0.01
|
||||
@@ -28,6 +37,7 @@ continuous_cd = true
|
||||
contact_monitor = true
|
||||
max_contacts_reported = 1
|
||||
script = ExtResource("1_1v1ju")
|
||||
max_bounces = 20
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||
mesh = SubResource("SphereMesh_5okb1")
|
||||
@@ -38,6 +48,13 @@ shape = SubResource("SphereShape3D_55xw1")
|
||||
|
||||
[node name="Timer" type="Timer" parent="."]
|
||||
wait_time = 10.0
|
||||
one_shot = true
|
||||
autostart = true
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
"": SubResource("AnimationLibrary_2bjxd")
|
||||
}
|
||||
|
||||
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
|
||||
[connection signal="timeout" from="Timer" to="." method="_on_timer_timeout"]
|
||||
|
||||
BIN
assets/smoketest.jpg
Normal file
BIN
assets/smoketest.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.5 MiB |
35
assets/smoketest.jpg.import
Normal file
35
assets/smoketest.jpg.import
Normal file
@@ -0,0 +1,35 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dj3ja64b8eixe"
|
||||
path.s3tc="res://.godot/imported/smoketest.jpg-28ad5d100b9669d62292289c20bb2fb9.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/smoketest.jpg"
|
||||
dest_files=["res://.godot/imported/smoketest.jpg-28ad5d100b9669d62292289c20bb2fb9.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
|
||||
@@ -879,8 +879,8 @@ mesh = SubResource("ArrayMesh_d210d")
|
||||
|
||||
[node name="Area3D" type="Area3D" parent="body" groups=["enemy_target"]]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.03709, 0)
|
||||
collision_layer = 136
|
||||
collision_mask = 141
|
||||
collision_layer = 128
|
||||
collision_mask = 128
|
||||
script = ExtResource("7_8vkma")
|
||||
|
||||
[node name="TargetShape" type="CollisionShape3D" parent="body/Area3D" groups=["enemy"]]
|
||||
|
||||
142
assets/tracker_bullet.tscn
Normal file
142
assets/tracker_bullet.tscn
Normal file
@@ -0,0 +1,142 @@
|
||||
[gd_scene load_steps=13 format=4 uid="uid://7u8hjsvnfwjn"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/tracker_bullet.gd" id="1_d1qoc"]
|
||||
[ext_resource type="Texture2D" uid="uid://dqytegxsmb5kg" path="res://assets/Models/bullet.transparency.png" id="2_m1lpb"]
|
||||
[ext_resource type="AudioStream" uid="uid://dqj4cx05f25jj" path="res://assets/Audio/punch-body-hard-SBA-300156881.wav" id="3_irpoj"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_mfpbf"]
|
||||
resource_name = "bullet"
|
||||
transparency = 4
|
||||
cull_mode = 2
|
||||
albedo_texture = ExtResource("2_m1lpb")
|
||||
roughness = 0.5
|
||||
emission_enabled = true
|
||||
emission = Color(1, 0.606841, 0.365696, 1)
|
||||
emission_energy_multiplier = 4.0
|
||||
|
||||
[sub_resource type="ArrayMesh" id="ArrayMesh_dtlcm"]
|
||||
_surfaces = [{
|
||||
"aabb": AABB(-0.0255907, -0.0689083, -0.0255907, 0.0511814, 0.735285, 0.0511814),
|
||||
"format": 34359742465,
|
||||
"index_count": 180,
|
||||
"index_data": PackedByteArray("AAADAAEAAAACAAMAAgAFAAMAAgAEAAUABAAHAAUABAAGAAcABgAJAAcABgAIAAkACAALAAkACAAKAAsACgANAAsACgAMAA0ABQAQAAMABQASABAADAAPAA0ADAAOAA8ADgABAA8ADgAAAAEADgACAAAAAgAGAAQABgAKAAgACgAOAAwADgAGAAIABgAOAAoAFgAdABUAFgAeAB0ACwAUAAkACwAVABQAAQAXAA8AAQARABcAAwARAAEAAwAQABEABwASAAUABwATABIADQAVAAsADQAWABUACQATAAcACQAUABMADwAWAA0ADwAXABYAGgAZABgAGQAeAB8AHgAcAB0AHAAaABsAGgAeABkAHgAaABwAFAAbABMAFAAcABsAEgAYABAAEgAaABgAFwAeABYAFwAfAB4AFQAcABQAFQAdABwAEwAaABIAEwAbABoAEAAZABEAEAAYABkAEQAfABcAEQAZAB8A"),
|
||||
"lods": [0.0176836, PackedByteArray("AAAZAAEAAAACABkAAgASABkAEgAaABkAAgAEABIABAAGABIABgAIABIAHQAaABIACAAdABIACAAKAB0ACgAMAB0ADAAfAB0ADAAOAB8ADgABAB8AAQAZAB8ADgAAAAEADgACAAAADgAGAAIAAgAGAAQABgAOAAoACgAOAAwABgAKAAgAGQAdAB8AGgAdABkA"), 0.0191346, PackedByteArray("AAAEAAEABAASAAEAEgAZAAEAEgAaABkABAAMABIAHQAaABIADAAdABIADAABAB0AAQAZAB0ADAAAAAEADAAEAAAAGgAdABkA"), 0.0400226, PackedByteArray("AAAMAAEADAAdAAEAHQAZAAEADAABAB0AAQAZAB0ADAAAAAEA")],
|
||||
"name": "bullet",
|
||||
"primitive": 3,
|
||||
"uv_scale": Vector4(0, 0, 0, 0),
|
||||
"vertex_count": 32,
|
||||
"vertex_data": PackedByteArray("AAAAAM4fjb2do9G8AAAAALkAIT+Mo9G8sDyUPM4fjb3BPJS8sDyUPLkAIT+wPJS8jKPRPM4fjb0iqQmzjKPRPLkAIT8AAACAsDyUPM4fjb2fPJQ8sDyUPLkAIT+wPJQ8AAAAAM4fjb17o9E8AAAAALkAIT+Mo9E8sDyUvM4fjb2fPJQ8sDyUvLkAIT+wPJQ8jKPRvM4fjb0iqQmzjKPRvLkAIT8AAACAsDyUvM4fjb3BPJS8sDyUvLkAIT+wPJS8nSBDPJymJz+cIEO8AAAAAJymJz/V+Ym81fmJPJymJz9PL4IvnSBDPJymJz+eIEM8AAAAAJymJz/V+Yk8nSBDvJymJz+eIEM81fmJvJymJz9PL4IvnSBDvJymJz+cIEO8bdeSO6uXKj9r15K7tqyfLquXKj9Mqs+7TqrPO6uXKj+nU1AwbdeSO6uXKj9v15I7tqyfLquXKj9Qqs87bdeSu6uXKj9v15I7TqrPu6uXKj+nU1AwbdeSu6uXKj9r15K7")
|
||||
}]
|
||||
blend_shape_mode = 0
|
||||
|
||||
[sub_resource type="ArrayMesh" id="ArrayMesh_gi7r4"]
|
||||
resource_name = "gunbullet1_Cylinder"
|
||||
_surfaces = [{
|
||||
"aabb": AABB(-0.0255907, -0.0689083, -0.0255907, 0.0511814, 0.735285, 0.0511814),
|
||||
"attribute_data": PackedByteArray("zVRQPzJjDj9eEic5j/V/PxkeJzkAECc5AAAAP4/1fz8AAAA/j/V/PwEAAD8AECc5AQAAPwAQJzl1UiE/MWMOP9YTJzkr+F8/1hMnOSv4Xz8AAAA/LPhfPwAAAD8s+F8/AAAAPyz4Xz8AAAA/LPhfP+QUAD9AS9o+TRUnOcj6Pz9NFSc5yPo/PwAAAD/I+j8/AAAAP8j6Pz8AAAA/yPo/PwAAAD/I+j8/5RQAPyCNeD7FFic5ZP0fP8UWJzlk/R8/AAAAP2T9Hz8AAAA/ZP0fPwAAAD9k/R8/AAAAP2T9Hz92UiE/uC3nPTwYJzkAAAA/PBgnOQAAAD8BAAA/AAAAPwEAAD8AAAA/AQAAPwAAAD8BAAA/AAAAP85UUD/ALec9sxknOTgFwD6zGSc5OAXAPgEAAD84BcA+AQAAPzgFwD4BAAA/OAXAPgEAAD84BcA+X5JxPySNeD4rGyc5cAqAPisbJzlwCoA+AQAAP3IKgD4BAAA/cgqAPgEAAD9yCoA+AQAAP3IKgD5eknE/QkvaPqIcJzlUHwA+ohwnOVQfAD4BAAA/VB8APgEAAD9UHwA+AQAAP1QfAD4BAAA/VB8APgAAAD8s+F8/AAAAPyz4Xz8AAAA/LPhfPwAAAD8s+F8/AAAAP4/1fz8AAAA/j/V/PwEAAD8AECc5AQAAPwAQJzkAAAA/yPo/PwAAAD/I+j8/AAAAP8j6Pz8AAAA/yPo/PwAAAD9k/R8/AAAAP2T9Hz8AAAA/ZP0fPwAAAD9k/R8/AQAAPwAAAD8BAAA/AAAAPwEAAD8AAAA/AQAAPwAAAD8BAAA/OAXAPgEAAD84BcA+AQAAPzgFwD4BAAA/OAXAPgEAAD9yCoA+AQAAP3IKgD4BAAA/cgqAPgEAAD9yCoA+AQAAP1QfAD4BAAA/VB8APgEAAD9UHwA+AQAAP1QfAD52UiE/jvV/PwAAAD8s+F8/AAAAPyz4Xz/OVFA/jvV/PwAAAD+P9X8/AQAAPwAQJznlFAA//rdePwAAAD/I+j8/AAAAP8j6Pz/lFAA/prUvPwAAAD9k/R8/AAAAP2T9Hz91UiE/FHgOPwEAAD8AAAA/AQAAPwAAAD/NVFA/FHgOPwEAAD84BcA+AQAAPzgFwD5eknE/pbUvPwEAAD9yCoA+AQAAP3IKgD5fknE//bdePwEAAD9UHwA+AQAAP1QfAD4="),
|
||||
"format": 34359742487,
|
||||
"index_count": 180,
|
||||
"index_data": PackedByteArray("AQALAAQAAQAIAAsACQAUAA0ACQAQABQADwAbABMADwAXABsAFgAgABkAFgAdACAAHgAnACIAHgAkACcAJQAvACkAJQArAC8AEgA7AAwAEgBDADsALAA3ADAALAAzADcAMgAGADUAMgACAAYAMQAHAAAABwAVAA4AFQAjABwAIwAxACoAMQAVAAcAFQAxACMAUABpAE4AUABrAGkAJgBLACEAJgBNAEsABQBVADQABQA/AFUACgA9AAMACgA5AD0AGgBCABEAGgBHAEIALQBPACgALQBSAE8AHwBFABgAHwBJAEUANgBTAC4ANgBXAFMAXgBbAFgAWwBqAG0AagBkAGcAZABeAGEAXgBqAFsAagBeAGQASABiAEQASABlAGIAQQBaADoAQQBgAFoAVgBsAFEAVgBvAGwATABmAEoATABoAGYARgBfAEAARgBjAF8AOABcADwAOABZAFwAPgBuAFQAPgBdAG4A"),
|
||||
"lods": [0.0176836, PackedByteArray("AQBcAAMAAQAIAFwACABAAFwAQABfAFwACAAPAEAADwAWAEAAFgAdAEAAaABfAEAAHQBoAEAAHQAkAGgAJAArAGgAKwBuAGgAKwAyAG4AMgAFAG4ABQBdAG4AMgACAAUAMQAHAAAAMQAVAAcABwAVAA4AFQAxACMAIwAxACoAFQAjABwAWwBnAG0AXgBnAFsA"), 0.0191346, PackedByteArray("AQAPAAMADwBAAAMAQABcAAMAQABfAFwADwArAEAAaABfAEAAKwBoAEAAKwAFAGgABQBdAGgAKwACAAUAKgAOAAAAXgBnAFsA"), 0.0400226, PackedByteArray("AQArAAMAKwBoAAMAaABcAAMAKwAFAGgABQBdAGgAKwACAAUA")],
|
||||
"material": SubResource("StandardMaterial3D_mfpbf"),
|
||||
"name": "bullet",
|
||||
"primitive": 3,
|
||||
"uv_scale": Vector4(0, 0, 0, 0),
|
||||
"vertex_count": 112,
|
||||
"vertex_data": PackedByteArray("AAAAAM4fjb2do9G8AAAAAM4fjb2do9G8AAAAAM4fjb2do9G8AAAAALkAIT+Mo9G8AAAAALkAIT+Mo9G8AAAAALkAIT+Mo9G8AAAAALkAIT+Mo9G8sDyUPM4fjb3BPJS8sDyUPM4fjb3BPJS8sDyUPM4fjb3BPJS8sDyUPLkAIT+wPJS8sDyUPLkAIT+wPJS8sDyUPLkAIT+wPJS8sDyUPLkAIT+wPJS8jKPRPM4fjb0iqQmzjKPRPM4fjb0iqQmzjKPRPM4fjb0iqQmzjKPRPLkAIT8AAACAjKPRPLkAIT8AAACAjKPRPLkAIT8AAACAjKPRPLkAIT8AAACAsDyUPM4fjb2fPJQ8sDyUPM4fjb2fPJQ8sDyUPM4fjb2fPJQ8sDyUPLkAIT+wPJQ8sDyUPLkAIT+wPJQ8sDyUPLkAIT+wPJQ8sDyUPLkAIT+wPJQ8AAAAAM4fjb17o9E8AAAAAM4fjb17o9E8AAAAAM4fjb17o9E8AAAAALkAIT+Mo9E8AAAAALkAIT+Mo9E8AAAAALkAIT+Mo9E8AAAAALkAIT+Mo9E8sDyUvM4fjb2fPJQ8sDyUvM4fjb2fPJQ8sDyUvM4fjb2fPJQ8sDyUvLkAIT+wPJQ8sDyUvLkAIT+wPJQ8sDyUvLkAIT+wPJQ8sDyUvLkAIT+wPJQ8jKPRvM4fjb0iqQmzjKPRvM4fjb0iqQmzjKPRvM4fjb0iqQmzjKPRvLkAIT8AAACAjKPRvLkAIT8AAACAjKPRvLkAIT8AAACAjKPRvLkAIT8AAACAsDyUvM4fjb3BPJS8sDyUvM4fjb3BPJS8sDyUvM4fjb3BPJS8sDyUvLkAIT+wPJS8sDyUvLkAIT+wPJS8sDyUvLkAIT+wPJS8sDyUvLkAIT+wPJS8nSBDPJymJz+cIEO8nSBDPJymJz+cIEO8nSBDPJymJz+cIEO8nSBDPJymJz+cIEO8AAAAAJymJz/V+Ym8AAAAAJymJz/V+Ym8AAAAAJymJz/V+Ym8AAAAAJymJz/V+Ym81fmJPJymJz9PL4Iv1fmJPJymJz9PL4Iv1fmJPJymJz9PL4Iv1fmJPJymJz9PL4IvnSBDPJymJz+eIEM8nSBDPJymJz+eIEM8nSBDPJymJz+eIEM8nSBDPJymJz+eIEM8AAAAAJymJz/V+Yk8AAAAAJymJz/V+Yk8AAAAAJymJz/V+Yk8AAAAAJymJz/V+Yk8nSBDvJymJz+eIEM8nSBDvJymJz+eIEM8nSBDvJymJz+eIEM8nSBDvJymJz+eIEM81fmJvJymJz9PL4Iv1fmJvJymJz9PL4Iv1fmJvJymJz9PL4Iv1fmJvJymJz9PL4IvnSBDvJymJz+cIEO8nSBDvJymJz+cIEO8nSBDvJymJz+cIEO8nSBDvJymJz+cIEO8bdeSO6uXKj9r15K7bdeSO6uXKj9r15K7bdeSO6uXKj9r15K7tqyfLquXKj9Mqs+7tqyfLquXKj9Mqs+7tqyfLquXKj9Mqs+7TqrPO6uXKj+nU1AwTqrPO6uXKj+nU1AwTqrPO6uXKj+nU1AwbdeSO6uXKj9v15I7bdeSO6uXKj9v15I7bdeSO6uXKj9v15I7tqyfLquXKj9Qqs87tqyfLquXKj9Qqs87tqyfLquXKj9Qqs87bdeSu6uXKj9v15I7bdeSu6uXKj9v15I7bdeSu6uXKj9v15I7TqrPu6uXKj+nU1AwTqrPu6uXKj+nU1AwTqrPu6uXKj+nU1AwbdeSu6uXKj9r15K7bdeSu6uXKj9r15K7bdeSu6uXKj9r15K7/38AAAAAQS3//4Ha/3///wAAgdr/f///Xue34f///7///4Ha/3///6AYt+H///+/AACB2v9/////fwAAAABBLf//gdr/f/////99pf9///9e57fh////v///gdr/f///Xufntv///7///32l/3////9/AAAAAEEtgdr/f/9//////32l/3///xfJn5j///8/Xufntv///7+B2v9//3//////faX/f////38AAAAAQS19pf9//3///4Ha/3//f///Rp6fmP///z99pf9//3///xfJn5j///8/gdr/f/9/////fwAAAABBLX2l/3//f///gVr/f/9///9Gnp+Y////P32l/3//f///uGGfmP///z+BWv9//3////9/AAAAAEEtgVr/f/9///99Jf9//3///7hhn5j///8/gVr/f/9////nNp+Y////P30l/3//f////38AAAAAQS19Jf9//3///wAAfaX/f///5zafmP///z+gGOe2////v30l/3//f///AAB9pf9/////fwAAAABBLQAAgdr/f///AAB9pf9///+gGLfh////vwAAgdr/f///oBjntv///78AAH2l/3///73NOen///+/Xue34f///7+9zQfJ////v17n57b///+/vc056f///79e57fh////v0EyOen///+/oBi34f///7/3tkGy////P73NB8n///+/F8mfmP///z9e5+e2////v8WWQbL///8/Rp6fmP///z/3tkGy////PxfJn5j///8/xZZBsv///z9Gnp+Y////PzlpQbL///8/uGGfmP///z85aUGy////P7hhn5j///8/B0lBsv///z/nNp+Y////PwdJQbL///8/QTIHyf///7/nNp+Y////P6AY57b///+/QTI56f///7+gGLfh////v0EyB8n///+/oBjntv///7//f///AAC90r3NOen///+/vc0Hyf///7//f///AAC90r3NOen///+/QTI56f///7//f///AAC90ve2QbL///8/vc0Hyf///7//f///AAC90sWWQbL///8/97ZBsv///z//f///AAC90sWWQbL///8/OWlBsv///z//f///AAC90jlpQbL///8/B0lBsv///z//f///AAC90gdJQbL///8/QTIHyf///7//f///AAC90kEyOen///+/QTIHyf///78=")
|
||||
}]
|
||||
blend_shape_mode = 0
|
||||
shadow_mesh = SubResource("ArrayMesh_dtlcm")
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_x6v7s"]
|
||||
metallic = 1.0
|
||||
emission_enabled = true
|
||||
emission = Color(1, 0.607843, 0.364706, 1)
|
||||
emission_energy_multiplier = 4.0
|
||||
|
||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_3wvag"]
|
||||
direction = Vector3(0, 0, 1)
|
||||
initial_velocity_min = 1.0
|
||||
initial_velocity_max = 2.0
|
||||
collision_mode = 1
|
||||
collision_friction = 1.0
|
||||
collision_bounce = 1.0
|
||||
collision_use_scale = true
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_qy3jk"]
|
||||
size = Vector3(0.025, 0.025, 0.025)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ywt21"]
|
||||
transparency = 1
|
||||
blend_mode = 1
|
||||
albedo_color = Color(0.383052, 0.264096, 0.213327, 1)
|
||||
emission_enabled = true
|
||||
emission = Color(0.737886, 0.150238, 0.0835467, 1)
|
||||
emission_energy_multiplier = 8.0
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_jrtee"]
|
||||
size = Vector3(0.04, 0.04, 0.04)
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_tqvit"]
|
||||
margin = 0.001
|
||||
height = 1.5
|
||||
radius = 0.055
|
||||
|
||||
[node name="Bullet" type="RigidBody3D" node_paths=PackedStringArray("collision_shape")]
|
||||
top_level = true
|
||||
collision_layer = 128
|
||||
collision_mask = 225
|
||||
axis_lock_angular_x = true
|
||||
axis_lock_angular_y = true
|
||||
axis_lock_angular_z = true
|
||||
mass = 0.01
|
||||
center_of_mass_mode = 1
|
||||
continuous_cd = true
|
||||
contact_monitor = true
|
||||
max_contacts_reported = 3
|
||||
script = ExtResource("1_d1qoc")
|
||||
collision_shape = NodePath("BulletCollision")
|
||||
|
||||
[node name="Cylinder" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(-2, -3.01992e-07, 0, 0, 0, -2, 3.01992e-07, -2, 0, 1.46364e-07, 0, 0.627698)
|
||||
cast_shadow = 0
|
||||
mesh = SubResource("ArrayMesh_gi7r4")
|
||||
skeleton = NodePath("")
|
||||
|
||||
[node name="GPUParticles3D" type="GPUParticles3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.718767)
|
||||
material_override = SubResource("StandardMaterial3D_x6v7s")
|
||||
cast_shadow = 0
|
||||
emitting = false
|
||||
amount = 20
|
||||
one_shot = true
|
||||
explosiveness = 1.0
|
||||
process_material = SubResource("ParticleProcessMaterial_3wvag")
|
||||
draw_pass_1 = SubResource("BoxMesh_qy3jk")
|
||||
|
||||
[node name="GPUParticlesEnemy" type="GPUParticles3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.718767)
|
||||
material_override = SubResource("StandardMaterial3D_ywt21")
|
||||
cast_shadow = 0
|
||||
emitting = false
|
||||
one_shot = true
|
||||
explosiveness = 1.0
|
||||
process_material = SubResource("ParticleProcessMaterial_3wvag")
|
||||
draw_pass_1 = SubResource("BoxMesh_jrtee")
|
||||
|
||||
[node name="Audio" type="Node" parent="."]
|
||||
|
||||
[node name="HitIndicator" type="AudioStreamPlayer" parent="Audio"]
|
||||
stream = ExtResource("3_irpoj")
|
||||
|
||||
[node name="BulletCollision" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0)
|
||||
shape = SubResource("CylinderShape3D_tqvit")
|
||||
|
||||
[node name="RayCast3D" type="RayCast3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.781848)
|
||||
target_position = Vector3(0, 0, -3)
|
||||
collision_mask = 105
|
||||
collide_with_areas = true
|
||||
|
||||
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
|
||||
378
blunderbus.tscn
378
blunderbus.tscn
@@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=30 format=4 uid="uid://dqwkal3t4gf2p"]
|
||||
[gd_scene load_steps=34 format=4 uid="uid://dqwkal3t4gf2p"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://dqgsiuy8wfxmv" path="res://assets/Models/blunderbus.stock.albedo.png" id="1_cvwjk"]
|
||||
[ext_resource type="Script" path="res://scripts/blunderbus.gd" id="1_w46uw"]
|
||||
@@ -8,6 +8,7 @@
|
||||
[ext_resource type="Texture2D" uid="uid://ddrqh51fsq8gm" path="res://assets/Models/blunderbus.stock.rough.png" id="3_5ymul"]
|
||||
[ext_resource type="Texture2D" uid="uid://kr2nf55qooib" path="res://assets/Models/blunderbus.metal.normal.png" id="4_bo0kd"]
|
||||
[ext_resource type="Texture2D" uid="uid://bf4m8j05ypctm" path="res://assets/Models/blunderbus.metal.rough.png" id="6_x42cq"]
|
||||
[ext_resource type="Texture2D" uid="uid://dj3ja64b8eixe" path="res://assets/smoketest.jpg" id="9_btq02"]
|
||||
[ext_resource type="AudioStream" uid="uid://t50i483xmj3a" path="res://assets/Audio/Weapons/toy-click-spin-SBA-300071143.wav" id="9_ly2k1"]
|
||||
[ext_resource type="AudioStream" uid="uid://bqoxdmsnfjiog" path="res://assets/Audio/Weapons/12ga Pump Shotgun/Gunshots/12ga Pump Shotgun - Gunshot A 001.wav" id="9_nu1jc"]
|
||||
[ext_resource type="AudioStream" uid="uid://db3iy0f1pa5lg" path="res://assets/Audio/Weapons/gun-m-16-reload-full-clip-magazine-SBA-300121257.wav" id="10_8vcd2"]
|
||||
@@ -35,7 +36,7 @@ metallic_texture_channel = 2
|
||||
roughness_texture = ExtResource("6_x42cq")
|
||||
roughness_texture_channel = 1
|
||||
normal_enabled = true
|
||||
normal_scale = 0.1
|
||||
normal_scale = 0.5
|
||||
normal_texture = ExtResource("4_bo0kd")
|
||||
texture_filter = 2
|
||||
|
||||
@@ -230,127 +231,27 @@ _surfaces = [{
|
||||
blend_shape_mode = 0
|
||||
shadow_mesh = SubResource("ArrayMesh_3f3hx")
|
||||
|
||||
[sub_resource type="Animation" id="Animation_qb0kb"]
|
||||
resource_name = "reload"
|
||||
length = 2.0
|
||||
tracks/0/type = "method"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath(".")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(1.33333),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"values": [{
|
||||
"args": [],
|
||||
"method": &"reload_finished"
|
||||
}]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("BlunderbusHandle:position")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.166667, 0.7, 0.933333, 1.13333, 1.33333, 1.66667, 2),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(-0.0308378, -0.00945342, -0.22799), Vector3(0.0367182, -0.490888, 0.00709414), Vector3(0.0367182, -0.69383, 0.00709414), Vector3(0.0367182, -0.480753, 0.00709414), Vector3(0.108168, -0.563203, 0.00709414), Vector3(0.073864, 0.131724, 0.00334243), Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("BlunderbusHandle:quaternion")
|
||||
tracks/2/interp = 2
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0, 0.166667, 0.7, 0.933333, 1.13333, 1.33333, 1.66667, 2),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Quaternion(0, 0, 0, 1), Quaternion(0.235702, 0, 0, 0.971825), Quaternion(0.188592, 0.751434, -0.614724, 0.147968), Quaternion(0.104134, 0.764512, -0.634514, 0.0454784), Quaternion(0.150342, 0.759741, -0.615834, 0.144703), Quaternion(0.132913, 0.762353, -0.626856, 0.0905744), Quaternion(-0.0283449, 0.211445, -0.134895, 0.967621), Quaternion(0, 0, 0, 1)]
|
||||
}
|
||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_4ojnn"]
|
||||
emission_shape = 1
|
||||
emission_sphere_radius = 0.1
|
||||
gravity = Vector3(0, 0.5, 0)
|
||||
scale_min = 0.1
|
||||
scale_max = 2.0
|
||||
turbulence_noise_strength = 0.1
|
||||
turbulence_noise_scale = 0.1
|
||||
|
||||
[sub_resource type="Animation" id="Animation_k667n"]
|
||||
resource_name = "shoot"
|
||||
length = 0.7
|
||||
step = 0.01
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("BlunderbusHandle:position")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0.02, 0.06, 0.7),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(0, 0.11439, 0.207692), Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("BlunderbusHandle:rotation")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0.02, 0.06, 0.7),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(0.536095, 0.17949, 1.51621e-09), Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("BlunderbusHandle/Blunderbus/Hammer:rotation")
|
||||
tracks/2/interp = 2
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0, 0.02),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(0, 0, -1.04023)]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("BlunderbusHandle/Blunderbus/Plate:rotation")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0.02, 0.04, 0.06, 0.09, 0.14),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(0, 0, -0.202353), Vector3(0.0579011, -0.067027, -0.105357), Vector3(0.0504229, -0.072816, -0.212189), Vector3(0.0578391, -0.0670805, -0.106282)]
|
||||
}
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_crqaw"]
|
||||
transparency = 1
|
||||
blend_mode = 1
|
||||
shading_mode = 0
|
||||
albedo_color = Color(1, 1, 1, 0.14902)
|
||||
albedo_texture = ExtResource("9_btq02")
|
||||
billboard_mode = 1
|
||||
|
||||
[sub_resource type="Animation" id="Animation_yakxm"]
|
||||
resource_name = "swap_in"
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("BlunderbusHandle:position")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.6, 1),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0.276637, -1.00606, -0.34468), Vector3(0, 0.0142029, 0), Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("BlunderbusHandle:rotation")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.6, 1),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(-1.36703, 0.124781, -0.13261), Vector3(0.000688741, 0.00692972, -0.0990625), Vector3(0, 0, 0)]
|
||||
}
|
||||
[sub_resource type="PlaneMesh" id="PlaneMesh_y0nwy"]
|
||||
material = SubResource("StandardMaterial3D_crqaw")
|
||||
size = Vector2(0.2, 0.2)
|
||||
orientation = 2
|
||||
|
||||
[sub_resource type="Animation" id="Animation_r6as6"]
|
||||
length = 0.001
|
||||
@@ -415,6 +316,197 @@ tracks/4/keys = {
|
||||
"values": [Quaternion(0, 0, 0, 1)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_f2rv4"]
|
||||
resource_name = "empty"
|
||||
length = 0.2
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("BlunderbusHandle:position")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.1, 0.2),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(0, 0, -0.0672249), Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("BlunderbusHandle:quaternion")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.1, 0.2),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Quaternion(0, 0, 0, 1), Quaternion(-0.0593238, 0, 0, 0.998239), Quaternion(0, 0, 0, 1)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_qb0kb"]
|
||||
resource_name = "reload"
|
||||
length = 2.0
|
||||
tracks/0/type = "method"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath(".")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(1.33333),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"values": [{
|
||||
"args": [],
|
||||
"method": &"reload_finished"
|
||||
}]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("BlunderbusHandle:position")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.166667, 0.7, 0.933333, 1.13333, 1.33333, 1.66667, 2),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(-0.0308378, -0.00945342, -0.22799), Vector3(0.0367182, -0.490888, 0.00709414), Vector3(0.0367182, -0.69383, 0.00709414), Vector3(0.0367182, -0.480753, 0.00709414), Vector3(0.108168, -0.563203, 0.00709414), Vector3(0.073864, 0.131724, 0.00334243), Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("BlunderbusHandle:quaternion")
|
||||
tracks/2/interp = 2
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0, 0.166667, 0.7, 0.933333, 1.13333, 1.33333, 1.66667, 2),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Quaternion(0, 0, 0, 1), Quaternion(0.235702, 0, 0, 0.971825), Quaternion(0.188592, 0.751434, -0.614724, 0.147968), Quaternion(0.104134, 0.764512, -0.634514, 0.0454784), Quaternion(0.150342, 0.759741, -0.615834, 0.144703), Quaternion(0.132913, 0.762353, -0.626856, 0.0905744), Quaternion(-0.0283449, 0.211445, -0.134895, 0.967621), Quaternion(0, 0, 0, 1)]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("BlunderbusHandle/Blunderbus/Hammer:rotation")
|
||||
tracks/3/interp = 2
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(1.6, 1.86667),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, -1.04023), Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("BlunderbusHandle/Blunderbus/Plate:rotation")
|
||||
tracks/4/interp = 2
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(1.6, 1.86667),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0.0578391, -0.0670805, -0.106282), Vector3(0, 0, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_k667n"]
|
||||
resource_name = "shoot"
|
||||
length = 0.7
|
||||
step = 0.01
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("BlunderbusHandle:position")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0.02, 0.06, 0.7),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(0, 0.11439, 0.207692), Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("BlunderbusHandle:rotation")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0.02, 0.06, 0.7),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(0.536095, 0.17949, 1.51621e-09), Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("BlunderbusHandle/Blunderbus/Hammer:rotation")
|
||||
tracks/2/interp = 2
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0, 0.02),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(0, 0, -1.04023)]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("BlunderbusHandle/Blunderbus/Plate:rotation")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0.01, 0.03, 0.05, 0.08, 0.13),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(0.00486294, -0.000900874, -0.448292), Vector3(0.0579011, -0.067027, -0.105357), Vector3(0.0504229, -0.072816, -0.212189), Vector3(0.0578391, -0.0670805, -0.106282)]
|
||||
}
|
||||
tracks/4/type = "method"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath(".")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0.02, 0.37),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"values": [{
|
||||
"args": [],
|
||||
"method": &"fire"
|
||||
}, {
|
||||
"args": [true],
|
||||
"method": &"barrel_smoke"
|
||||
}]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_yakxm"]
|
||||
resource_name = "swap_in"
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("BlunderbusHandle:position")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.533333, 1),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0.276637, -1.75639, -0.34468), Vector3(0, 0.0642636, 0), Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("BlunderbusHandle:rotation")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.533333, 1),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(-1.36703, 0.856179, -0.13261), Vector3(0.106822, 0.0354618, 0.160794), Vector3(0, 0, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_jrppn"]
|
||||
resource_name = "swap_out"
|
||||
tracks/0/type = "value"
|
||||
@@ -456,34 +548,6 @@ tracks/2/keys = {
|
||||
}]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_f2rv4"]
|
||||
resource_name = "empty"
|
||||
length = 0.2
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("BlunderbusHandle:position")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.1, 0.2),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(0, 0, -0.0672249), Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("BlunderbusHandle:quaternion")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.1, 0.2),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Quaternion(0, 0, 0, 1), Quaternion(-0.0593238, 0, 0, 0.998239), Quaternion(0, 0, 0, 1)]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_mcns2"]
|
||||
_data = {
|
||||
"RESET": SubResource("Animation_r6as6"),
|
||||
@@ -497,10 +561,13 @@ _data = {
|
||||
[node name="Blunderbus" type="Node3D" node_paths=PackedStringArray("anim_player", "barrel_raycast", "audio_fire", "audio_empty", "audio_reload")]
|
||||
script = ExtResource("1_w46uw")
|
||||
gun_name = "Blunderbuss"
|
||||
fire_mode = 1
|
||||
recoil_amount = Vector3(0.5, 0.2, 0.2)
|
||||
spread = Vector3(90, 90, 1)
|
||||
kick_amount = 10.0
|
||||
max_ammo = 1
|
||||
start_mags = 20
|
||||
pellets_per_shot = 25
|
||||
bullet_speed = 500.0
|
||||
fire_pitch_scale_amt = 0.1
|
||||
bullet = ExtResource("2_544x3")
|
||||
@@ -534,6 +601,15 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.062564, -0.0217875, 0)
|
||||
mesh = SubResource("ArrayMesh_1fsm8")
|
||||
skeleton = NodePath("")
|
||||
|
||||
[node name="Smoke" type="GPUParticles3D" parent="BlunderbusHandle/Blunderbus"]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 1.14148, 0, 4.98958e-08)
|
||||
emitting = false
|
||||
amount = 100
|
||||
lifetime = 4.0
|
||||
fixed_fps = 60
|
||||
process_material = SubResource("ParticleProcessMaterial_4ojnn")
|
||||
draw_pass_1 = SubResource("PlaneMesh_y0nwy")
|
||||
|
||||
[node name="BarrelRaycast" type="RayCast3D" parent="BlunderbusHandle"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.818773)
|
||||
target_position = Vector3(0, 0, -1)
|
||||
@@ -543,6 +619,8 @@ libraries = {
|
||||
"": SubResource("AnimationLibrary_mcns2")
|
||||
}
|
||||
|
||||
[node name="SmokeTimer" type="Timer" parent="."]
|
||||
|
||||
[node name="Audio" type="Node3D" parent="."]
|
||||
|
||||
[node name="Fire" type="AudioStreamPlayer3D" parent="Audio"]
|
||||
@@ -558,3 +636,5 @@ bus = &"SFX"
|
||||
stream = ExtResource("10_8vcd2")
|
||||
volume_db = 4.0
|
||||
bus = &"SFX"
|
||||
|
||||
[connection signal="timeout" from="SmokeTimer" to="." method="_on_smoke_timer_timeout"]
|
||||
|
||||
@@ -193,6 +193,11 @@ crouch={
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194326,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
kill_self={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":75,"key_label":0,"unicode":107,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[layer_names]
|
||||
|
||||
|
||||
@@ -24,6 +24,6 @@ func hit(bullet_damage):
|
||||
get_tree().get_root().add_child(number_spawn)
|
||||
|
||||
func _on_body_entered(body: Node3D) -> void:
|
||||
if body.is_in_group("pellet"):
|
||||
hit(body.bullet_damage)
|
||||
SignalBus.emit_signal("enemy_hit")
|
||||
hit(body.bullet_damage)
|
||||
SignalBus.emit_signal("enemy_hit")
|
||||
body.despawn()
|
||||
|
||||
@@ -34,9 +34,12 @@ var cycle_count
|
||||
@export var audio_empty : Node
|
||||
@export var audio_reload : Node
|
||||
|
||||
@onready var smoke: GPUParticles3D = $BlunderbusHandle/Blunderbus/Smoke
|
||||
@onready var player = get_tree().current_scene.player
|
||||
@onready var level_control = get_tree().current_scene
|
||||
@onready var ammo_current
|
||||
@onready var smoke_timer: Timer = $SmokeTimer
|
||||
|
||||
var rng = RandomNumberGenerator.new()
|
||||
var gun_index
|
||||
#var ammo_current
|
||||
@@ -44,6 +47,7 @@ var ammo_reserve
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
#smoke.emitting = false
|
||||
start_position = self.position
|
||||
start_rotation = self.rotation
|
||||
random_spread_start = random_spread_amt
|
||||
@@ -80,27 +84,25 @@ func reload_finished():
|
||||
|
||||
|
||||
func shoot(delta):
|
||||
|
||||
if level_control.ammo_current[gun_index] > 0 and cycle_count > 0:
|
||||
if !anim_player.is_playing():
|
||||
level_control.ammo_current[gun_index] -= 1
|
||||
#RECOIL --- fix later to happen over a period of time
|
||||
#(ADD PLAYER KICK HERE. RELATIVE TO GUN POSITION)
|
||||
audio_fire.pitch_scale = 1 + rng.randf_range(-fire_pitch_scale_amt,fire_pitch_scale_amt)
|
||||
audio_fire.play()
|
||||
anim_player.play("shoot")
|
||||
|
||||
pellet_spawn()
|
||||
player.recoil.add_recoil(Vector3(0,recoil_amount.y,recoil_amount.z),10,10)
|
||||
player.recoil.add_gun_recoil(recoil_amount.x)
|
||||
player.velocity += player.bullet_ray.global_basis * Vector3(0,0, kick_amount)
|
||||
if fire_mode != 0:
|
||||
cycle_count -= 1
|
||||
|
||||
elif !anim_player.is_playing() and cycle_count != 0:
|
||||
anim_player.play("empty")
|
||||
audio_empty.play()
|
||||
|
||||
func fire():
|
||||
level_control.ammo_current[gun_index] -= 1
|
||||
audio_fire.pitch_scale = 1 + rng.randf_range(-fire_pitch_scale_amt,fire_pitch_scale_amt)
|
||||
audio_fire.play()
|
||||
|
||||
pellet_spawn()
|
||||
player.recoil.add_recoil(Vector3(0,recoil_amount.y,recoil_amount.z),10,10)
|
||||
player.recoil.add_gun_recoil(recoil_amount.x)
|
||||
player.velocity += player.bullet_ray.global_basis * Vector3(0,0, kick_amount)
|
||||
if fire_mode != 0:
|
||||
cycle_count -= 1
|
||||
|
||||
func reload():
|
||||
if level_control.ammo_current[gun_index] < max_ammo and player.gun.anim_player.get_current_animation() != "reload" and level_control.ammo_reserve[gun_index] > 0:
|
||||
#player.reloading = true
|
||||
@@ -134,5 +136,13 @@ func pellet_spawn():
|
||||
get_tree().get_root().add_child(instance_bullet)
|
||||
pellets_remaining -= 1
|
||||
|
||||
func barrel_smoke(emitting_state):
|
||||
smoke.emitting = emitting_state
|
||||
smoke_timer.start()
|
||||
|
||||
func swapped_out():
|
||||
queue_free()
|
||||
|
||||
|
||||
func _on_smoke_timer_timeout() -> void:
|
||||
barrel_smoke(false)
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
extends RigidBody3D
|
||||
|
||||
@export var collision_shape : Node
|
||||
|
||||
var bullet_speed
|
||||
var bullet_drop
|
||||
var random_spread_amt
|
||||
@@ -17,7 +19,6 @@ var bullet_active = true
|
||||
@onready var hit_indicator = $Audio/HitIndicator
|
||||
@onready var ray: RayCast3D = $RayCast3D
|
||||
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
|
||||
@@ -34,42 +35,38 @@ func _physics_process(delta):
|
||||
if distance_from_player.length() > 1.5:
|
||||
visible = true
|
||||
|
||||
if ray.is_colliding():
|
||||
var body = ray.get_collider()
|
||||
if body != null and !body.is_in_group("player"):
|
||||
|
||||
mesh.visible = false
|
||||
ray.enabled = false
|
||||
|
||||
if body.is_in_group("enemy_target"):
|
||||
hit_indicator.play()
|
||||
enemy_particles.emitting = true
|
||||
SignalBus.emit_signal("enemy_hit")
|
||||
ray.get_collider().hit(bullet_damage)
|
||||
|
||||
#bullethole effect
|
||||
body.add_child(instance_bullethole)
|
||||
instance_bullethole.global_transform.origin = ray.get_collision_point()
|
||||
if (abs(ray.get_collision_normal().y) > 0.99):
|
||||
instance_bullethole.look_at(ray.get_collision_point() + ray.get_collision_normal(), Vector3(0,0,1))
|
||||
else:
|
||||
instance_bullethole.look_at(ray.get_collision_point() + ray.get_collision_normal())
|
||||
|
||||
if body.is_in_group("switch"):
|
||||
body.hit()
|
||||
|
||||
#move rigidbodies
|
||||
if body.is_in_group("scene_rigidbody"):
|
||||
body.linear_velocity += transform.basis * Vector3(0,0,-1 * bullet_force_mod)
|
||||
|
||||
if body.is_in_group("breakable"):
|
||||
var current_velocity = transform.basis * Vector3(0,0,-1 * bullet_force_mod)
|
||||
ray.get_collider().breaking(current_velocity)
|
||||
|
||||
queue_free()
|
||||
|
||||
|
||||
func _on_body_entered(body: Node) -> void:
|
||||
|
||||
if !body.is_in_group("player"):
|
||||
await get_tree().create_timer(.1).timeout
|
||||
mesh.visible = false
|
||||
|
||||
ray.enabled = false
|
||||
|
||||
if ray.is_colliding():
|
||||
var ray_body = ray.get_collider()
|
||||
if ray_body != null:
|
||||
#bullethole effect
|
||||
ray_body.add_child(instance_bullethole)
|
||||
instance_bullethole.global_transform.origin = ray.get_collision_point()
|
||||
if (abs(ray.get_collision_normal().y) > 0.99):
|
||||
instance_bullethole.look_at(ray.get_collision_point() + ray.get_collision_normal(), Vector3(0,0,1))
|
||||
else:
|
||||
instance_bullethole.look_at(ray.get_collision_point() + ray.get_collision_normal())
|
||||
|
||||
if body.is_in_group("switch"):
|
||||
body.hit()
|
||||
|
||||
##move rigidbodies
|
||||
#if body.is_in_group("scene_rigidbody"):
|
||||
#body.linear_velocity += transform.basis * Vector3(0,0,-1 * bullet_force_mod)
|
||||
|
||||
if body.is_in_group("breakable"):
|
||||
var current_velocity = transform.basis * Vector3(0,0,-1 * bullet_force_mod)
|
||||
body.breaking(current_velocity)
|
||||
despawn()
|
||||
|
||||
func despawn():
|
||||
visible = false
|
||||
collision_shape.disabled = true
|
||||
await get_tree().create_timer(1).timeout
|
||||
self.queue_free()
|
||||
|
||||
@@ -93,6 +93,7 @@ var pickupmsg
|
||||
@onready var ear_wind = $Audio/EarWind
|
||||
@onready var land_sound: AudioStreamPlayer = $Audio/LandSound
|
||||
@onready var hurt_audio = $Audio/Hurt
|
||||
@onready var hit_indicator: AudioStreamPlayer = $Audio/HitIndicator
|
||||
@onready var health_indicator = $HealthIndicator
|
||||
@onready var ammo_counter = $Head/Recoil/Camera3D/AmmoCounter
|
||||
@onready var stamina_counter = $Head/Recoil/Camera3D/StaminaCounter
|
||||
@@ -341,6 +342,9 @@ func _physics_process(delta):
|
||||
held_item.linear_velocity += interact_ray.global_transform.basis * Vector3(0,0, -KICK_AMOUNT)
|
||||
release_moveable()
|
||||
|
||||
if Input.is_action_just_pressed("kill_self"):
|
||||
level_control.health = 0
|
||||
|
||||
if level_control.health <= 0:
|
||||
level_control.die()
|
||||
|
||||
@@ -408,6 +412,7 @@ func weapon_select(gun_id):
|
||||
func enemy_hit():
|
||||
var hitmarker_spawn = hitmarker.instantiate()
|
||||
camera.add_child(hitmarker_spawn)
|
||||
hit_indicator.play()
|
||||
|
||||
func toggle_hud(hud_on):
|
||||
|
||||
|
||||
@@ -13,8 +13,9 @@ var bounces = 0
|
||||
var start_time
|
||||
var end_time
|
||||
|
||||
const EMISSION_MAX : float = 20
|
||||
const EMISSION_LIFETIME : float = 2 #in seconds
|
||||
const EMISSION_MAX : float = 200
|
||||
const EMISSION_LIFETIME : float = 1.75 #in seconds
|
||||
const VELOCITY_REQUIRED_TO_HIT : float = 10
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
@@ -38,21 +39,11 @@ func _on_body_entered(body: Node) -> void:
|
||||
if bounces >= max_bounces:
|
||||
despawn()
|
||||
|
||||
if body != null and !body.is_in_group("player"):
|
||||
|
||||
|
||||
if body.is_in_group("enemy_target"):
|
||||
SignalBus.emit_signal("enemy_hit")
|
||||
body.hit(bullet_damage)
|
||||
|
||||
if body != null and !body.is_in_group("player") and linear_velocity.length() >= VELOCITY_REQUIRED_TO_HIT:
|
||||
|
||||
if body.is_in_group("switch"):
|
||||
body.hit()
|
||||
|
||||
#move rigidbodies
|
||||
if body.is_in_group("scene_rigidbody"):
|
||||
body.linear_velocity += transform.basis * Vector3(0,0,-1 * bullet_force_mod)
|
||||
|
||||
if body.is_in_group("breakable"):
|
||||
var current_velocity = transform.basis * Vector3(0,0,-1 * bullet_force_mod)
|
||||
body.breaking(current_velocity)
|
||||
|
||||
190
scripts/trackerGun.gd
Normal file
190
scripts/trackerGun.gd
Normal file
@@ -0,0 +1,190 @@
|
||||
extends Node3D
|
||||
|
||||
|
||||
@export_group("Gun Feel")
|
||||
@export var gun_name : String
|
||||
@export_enum("Auto", "Single", "Burst") var fire_mode: int
|
||||
@export var hitscan_enabled : bool = false
|
||||
@export var fov_zoom_amt = .98
|
||||
@export var recoil_amount : Vector3 = Vector3(.2,.05,.05)
|
||||
@export var kick_amount : float = .1
|
||||
@export var max_ammo = 15
|
||||
@export var start_mags = 3
|
||||
@export var bullet_damage = 1
|
||||
@export var bullet_force_mod = 5.0
|
||||
@export var bullet_speed = 150
|
||||
@export var bullet_drop = .3
|
||||
@export var random_spread_amt = 1.0
|
||||
@export var fire_pitch_scale_amt = .2
|
||||
@export_group("Gun Assets")
|
||||
@export_subgroup("Main Assets")
|
||||
@export var tracker_indicator : Node
|
||||
@export var flare_light : Node
|
||||
@export var bullet : Resource
|
||||
@export var bullet_fake : Resource
|
||||
@export var bullethole : Resource
|
||||
@export var casing : Resource
|
||||
@export var mag : Resource
|
||||
@export_subgroup("Raycast Nodes")
|
||||
@export var anim_player : Node
|
||||
@export var barrel_raycast : Node
|
||||
@export var casing_ejector : Node
|
||||
@export var mag_ejector : Node
|
||||
@export_subgroup("Audio Clips")
|
||||
@export var audio_fire : Node
|
||||
@export var audio_empty : Node
|
||||
@export var audio_reload : Node
|
||||
|
||||
@onready var player = get_tree().current_scene.player
|
||||
@onready var level_control = get_tree().current_scene
|
||||
@onready var ammo_current
|
||||
@onready var tracker_marker = load("res://assets/shoot_marker.tscn")
|
||||
@onready var tracker_indicator_material = tracker_indicator.get_surface_override_material(0)
|
||||
|
||||
var tracker : Node
|
||||
var start_position
|
||||
var start_rotation
|
||||
var random_spread_start
|
||||
var cycle_count_start
|
||||
var cycle_count
|
||||
var rng = RandomNumberGenerator.new()
|
||||
var gun_index
|
||||
#var ammo_current
|
||||
var ammo_reserve
|
||||
|
||||
const tracker_null_color = Color(0.743, 0.359, 0)
|
||||
const tracker_assigned_color = Color(0, 0.853, 0)
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
random_spread_start = random_spread_amt
|
||||
|
||||
ammo_current = level_control.ammo_current[gun_index]
|
||||
ammo_reserve = level_control.ammo_reserve[gun_index]
|
||||
|
||||
|
||||
if fire_mode == 0:
|
||||
cycle_count = 1
|
||||
cycle_count_start = 1
|
||||
elif fire_mode == 1:
|
||||
cycle_count = 1
|
||||
cycle_count_start = 1
|
||||
elif fire_mode == 2:
|
||||
cycle_count = 3
|
||||
cycle_count_start = 3
|
||||
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(_delta):
|
||||
if tracker != null:
|
||||
tracker_indicator_material.emission = tracker_assigned_color
|
||||
else:
|
||||
tracker_indicator_material.emission = tracker_null_color
|
||||
|
||||
|
||||
func reload_finished():
|
||||
if level_control.ammo_reserve[gun_index] >= max_ammo:
|
||||
level_control.ammo_current[gun_index] += max_ammo
|
||||
level_control.ammo_reserve[gun_index] -= max_ammo
|
||||
else:
|
||||
level_control.ammo_current[gun_index] += level_control.ammo_reserve[gun_index]
|
||||
level_control.ammo_reserve[gun_index] -= level_control.ammo_reserve[gun_index]
|
||||
|
||||
func shoot(delta):
|
||||
if !anim_player.is_playing():
|
||||
if tracker == null and Input.is_action_just_pressed("shoot"):
|
||||
fire_tracker()
|
||||
else:
|
||||
fire()
|
||||
|
||||
|
||||
func fire():
|
||||
if level_control.ammo_current[gun_index] > 0 and cycle_count > 0:
|
||||
if !anim_player.is_playing():
|
||||
level_control.ammo_current[gun_index] -= 1
|
||||
#audio and anims
|
||||
audio_fire.pitch_scale = 1 + rng.randf_range(-fire_pitch_scale_amt,fire_pitch_scale_amt)
|
||||
audio_fire.play()
|
||||
anim_player.play("shoot")
|
||||
bullet_fire()
|
||||
spawn_casing()
|
||||
player.recoil.add_recoil(Vector3(0,recoil_amount.y,recoil_amount.z),10,10)
|
||||
player.recoil.add_gun_recoil(recoil_amount.x)
|
||||
#player.velocity += player.bullet_ray.global_basis * Vector3(0,0, kick_amount)
|
||||
if fire_mode != 0:
|
||||
cycle_count -= 1
|
||||
|
||||
elif !anim_player.is_playing() and cycle_count != 0:
|
||||
anim_player.play("empty")
|
||||
audio_empty.play()
|
||||
|
||||
func fire_tracker():
|
||||
anim_player.play("fire_tracker")
|
||||
var instance_tracker = tracker_marker.instantiate()
|
||||
if player.bullet_ray.is_colliding():
|
||||
var spawn_loc = player.bullet_ray.get_collision_point()
|
||||
var spawn_parent = player.bullet_ray.get_collider()
|
||||
if spawn_parent != null:
|
||||
spawn_parent.add_child(instance_tracker)
|
||||
instance_tracker.global_transform.origin = spawn_loc
|
||||
tracker = instance_tracker
|
||||
|
||||
func remove_tracker():
|
||||
if tracker != null:
|
||||
tracker.remove()
|
||||
|
||||
func reload():
|
||||
if tracker != null:
|
||||
remove_tracker()
|
||||
else:
|
||||
if level_control.ammo_current[gun_index] < max_ammo and player.gun.anim_player.get_current_animation() != "reload" and level_control.ammo_reserve[gun_index] > 0:
|
||||
anim_player.play("reload")
|
||||
audio_reload.play()
|
||||
remove_tracker()
|
||||
if anim_player.is_playing() and anim_player.current_animation == "reload":
|
||||
if level_control.ammo_current[gun_index] == 0:
|
||||
level_control.ammo_current[gun_index] = 0
|
||||
else:
|
||||
level_control.ammo_current[gun_index] = 1
|
||||
|
||||
func spawn_mag():
|
||||
var instance_mag = mag.instantiate()
|
||||
instance_mag.position = mag_ejector.global_position
|
||||
instance_mag.transform.basis = mag_ejector.global_transform.basis
|
||||
get_tree().get_root().add_child(instance_mag)
|
||||
|
||||
func spawn_casing():
|
||||
# Casing transform
|
||||
var instance_casing = casing.instantiate()
|
||||
instance_casing.position = casing_ejector.global_position
|
||||
instance_casing.transform.basis = casing_ejector.global_transform.basis
|
||||
instance_casing.player_velocity = player.velocity * transform.basis
|
||||
get_tree().get_root().add_child(instance_casing)
|
||||
|
||||
func bullet_fire():
|
||||
var instance_bullet
|
||||
if hitscan_enabled:
|
||||
instance_bullet = bullet_fake.instantiate()
|
||||
else:
|
||||
instance_bullet = bullet.instantiate()
|
||||
instance_bullet.position = barrel_raycast.global_position
|
||||
#shoot bullet from real gun if gun is folded up
|
||||
if player.gun_folded == false:
|
||||
instance_bullet.transform.basis = barrel_raycast.global_transform.basis
|
||||
else:
|
||||
instance_bullet.transform.basis = barrel_raycast.global_transform.basis
|
||||
instance_bullet.bullet_speed = bullet_speed
|
||||
instance_bullet.player_velocity = player.velocity * transform.basis
|
||||
instance_bullet.bullet_drop = bullet_drop
|
||||
instance_bullet.random_spread_amt = random_spread_amt
|
||||
instance_bullet.bullet_damage = bullet_damage
|
||||
instance_bullet.bullet_force_mod = bullet_force_mod
|
||||
instance_bullet.bullet_target = tracker
|
||||
instance_bullet.instance_bullethole = bullethole.instantiate()
|
||||
instance_bullet.player_position = player.global_position
|
||||
get_tree().current_scene.add_child(instance_bullet)
|
||||
|
||||
|
||||
func swapped_out():
|
||||
queue_free()
|
||||
72
scripts/tracker_bullet.gd
Normal file
72
scripts/tracker_bullet.gd
Normal file
@@ -0,0 +1,72 @@
|
||||
extends RigidBody3D
|
||||
|
||||
@export var collision_shape : Node
|
||||
|
||||
var bullet_speed
|
||||
var bullet_drop
|
||||
var random_spread_amt
|
||||
var bullet_damage
|
||||
var instance_bullethole
|
||||
var bullet_force_mod = 1.0
|
||||
var distance_from_player
|
||||
var player_position
|
||||
var player_velocity
|
||||
var bullet_active = true
|
||||
var bullet_target : Node
|
||||
|
||||
@onready var mesh = $Cylinder
|
||||
@onready var particles = $GPUParticles3D
|
||||
@onready var enemy_particles = $GPUParticlesEnemy
|
||||
@onready var hit_indicator = $Audio/HitIndicator
|
||||
@onready var ray: RayCast3D = $RayCast3D
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
|
||||
visible = false
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _physics_process(delta):
|
||||
|
||||
linear_velocity = transform.basis * Vector3(0, 0, -bullet_speed)
|
||||
|
||||
if bullet_target != null:
|
||||
look_at(bullet_target.global_position)
|
||||
|
||||
distance_from_player = abs(self.global_position - player_position)
|
||||
|
||||
if distance_from_player.length() > 1.5:
|
||||
visible = true
|
||||
|
||||
|
||||
func _on_body_entered(body: Node) -> void:
|
||||
|
||||
if !body.is_in_group("player"):
|
||||
|
||||
ray.enabled = false
|
||||
|
||||
if ray.is_colliding():
|
||||
var ray_body = ray.get_collider()
|
||||
if ray_body != null:
|
||||
#bullethole effect
|
||||
ray_body.add_child(instance_bullethole)
|
||||
instance_bullethole.global_transform.origin = ray.get_collision_point()
|
||||
if (abs(ray.get_collision_normal().y) > 0.99):
|
||||
instance_bullethole.look_at(ray.get_collision_point() + ray.get_collision_normal(), Vector3(0,0,1))
|
||||
else:
|
||||
instance_bullethole.look_at(ray.get_collision_point() + ray.get_collision_normal())
|
||||
|
||||
if body.is_in_group("switch"):
|
||||
body.hit()
|
||||
|
||||
|
||||
if body.is_in_group("breakable"):
|
||||
var current_velocity = transform.basis * Vector3(0,0,-1 * bullet_force_mod)
|
||||
body.breaking(current_velocity)
|
||||
despawn()
|
||||
|
||||
func despawn():
|
||||
#visible = false
|
||||
#collision_shape.disabled = true
|
||||
#await get_tree().create_timer(1).timeout
|
||||
queue_free()
|
||||
16
scripts/tracker_marker.gd
Normal file
16
scripts/tracker_marker.gd
Normal file
@@ -0,0 +1,16 @@
|
||||
extends Node3D
|
||||
|
||||
@onready var anim_player: AnimationPlayer = $AnimationPlayer
|
||||
|
||||
|
||||
# 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
|
||||
|
||||
func remove():
|
||||
anim_player.play("remove")
|
||||
Reference in New Issue
Block a user