made bullet with a camera on the end. other tweaks
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 18 KiB |
@@ -85,7 +85,7 @@ radius = 0.055
|
||||
[node name="Bullet" type="RigidBody3D" node_paths=PackedStringArray("collision_shape")]
|
||||
top_level = true
|
||||
collision_layer = 128
|
||||
collision_mask = 225
|
||||
collision_mask = 233
|
||||
axis_lock_angular_x = true
|
||||
axis_lock_angular_y = true
|
||||
axis_lock_angular_z = true
|
||||
|
||||
143
assets/bullet_cam.tscn
Normal file
143
assets/bullet_cam.tscn
Normal file
@@ -0,0 +1,143 @@
|
||||
[gd_scene load_steps=12 format=4 uid="uid://ba0jycejax6n7"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/bullet_cam.gd" id="1_uvdg3"]
|
||||
[ext_resource type="AudioStream" uid="uid://dqj4cx05f25jj" path="res://assets/Audio/punch-body-hard-SBA-300156881.wav" id="3_t6e3w"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_mfpbf"]
|
||||
resource_name = "bullet"
|
||||
transparency = 1
|
||||
albedo_color = Color(0.701961, 0.556863, 0.223529, 1)
|
||||
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="BulletCam" type="RigidBody3D"]
|
||||
top_level = true
|
||||
collision_layer = 128
|
||||
collision_mask = 225
|
||||
mass = 0.01
|
||||
center_of_mass_mode = 1
|
||||
continuous_cd = true
|
||||
contact_monitor = true
|
||||
max_contacts_reported = 3
|
||||
script = ExtResource("1_uvdg3")
|
||||
|
||||
[node name="CameraHandle" type="Node3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.789394)
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.789394)
|
||||
fov = 150.0
|
||||
|
||||
[node name="Cylinder" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(-1, -1.50996e-07, 6.60024e-15, 0, -4.37114e-08, -1, 1.50996e-07, -1, 4.37114e-08, 1.46364e-07, 0, -0.113697)
|
||||
cast_shadow = 0
|
||||
mesh = SubResource("ArrayMesh_gi7r4")
|
||||
skeleton = NodePath("")
|
||||
surface_material_override/0 = SubResource("StandardMaterial3D_mfpbf")
|
||||
|
||||
[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_t6e3w")
|
||||
|
||||
[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="."]
|
||||
target_position = Vector3(0, 0, -2)
|
||||
collision_mask = 105
|
||||
collide_with_areas = true
|
||||
|
||||
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
|
||||
@@ -3,7 +3,7 @@
|
||||
[ext_resource type="PackedScene" uid="uid://c33b6ldlxxfro" path="res://assets/Models/mac10.blend" id="1_nb4p5"]
|
||||
[ext_resource type="Script" path="res://scripts/gun.gd" id="2_tskiy"]
|
||||
[ext_resource type="PackedScene" uid="uid://nq5nq2hjc4ec" path="res://assets/bullet_fake.tscn" id="3_heo3y"]
|
||||
[ext_resource type="PackedScene" uid="uid://dqhltdnqyg8ni" path="res://assets/bullet.tscn" id="3_xr8co"]
|
||||
[ext_resource type="PackedScene" uid="uid://dqhltdnqyg8ni" path="res://assets/bullet.tscn" id="3_w1kko"]
|
||||
[ext_resource type="PackedScene" uid="uid://crvohhc6kgshn" path="res://assets/bullet_hole.tscn" id="4_eleuq"]
|
||||
[ext_resource type="PackedScene" uid="uid://cp8563f0oxvff" path="res://assets/mag1.tscn" id="4_ji2hu"]
|
||||
[ext_resource type="PackedScene" uid="uid://c1gdehrsytlkk" path="res://assets/casing_2.tscn" id="4_kpr3h"]
|
||||
@@ -489,11 +489,11 @@ fov_zoom_amt = 0.995
|
||||
recoil_amount = Vector3(0.02, 0.05, 0.05)
|
||||
max_ammo = 20
|
||||
bullet_damage = 2
|
||||
bullet_speed = 1500
|
||||
bullet_speed = 1200
|
||||
r_hand_location = NodePath("mac10/RHandLocation")
|
||||
l_hand_location = NodePath("mac10/mag/LHandLocation")
|
||||
flare_light = NodePath("mac10/flare")
|
||||
bullet = ExtResource("3_xr8co")
|
||||
bullet = ExtResource("3_w1kko")
|
||||
bullet_fake = ExtResource("3_heo3y")
|
||||
bullethole = ExtResource("4_eleuq")
|
||||
casing = ExtResource("4_kpr3h")
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
[gd_scene load_steps=24 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/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"]
|
||||
[ext_resource type="AudioStream" uid="uid://ba0w04uqqexpn" path="res://assets/Audio/Weapons/machine-gun-m16-double-shot-close-perspective-SBA-300130711.wav" id="8_jtjwm"]
|
||||
[ext_resource type="AudioStream" uid="uid://bxjv50ivk3fvn" path="res://assets/Audio/Weapons/9mm Full Size Pistol/Gunshots/9mm Full Size Pistol - Gunshot B 001.wav" id="7_25stk"]
|
||||
[ext_resource type="AudioStream" uid="uid://t50i483xmj3a" path="res://assets/Audio/Weapons/toy-click-spin-SBA-300071143.wav" id="9_btm61"]
|
||||
[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"]
|
||||
@@ -241,6 +240,64 @@ tracks/4/keys = {
|
||||
}]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_lhlkm"]
|
||||
resource_name = "remove_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.16, 0.24, 0.35),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, -0.000397999, 0), Vector3(0, -0.0215431, 0), Vector3(0, 0.116845, 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.16, 0.24, 0.35),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, -1.5708, 0), Vector3(1.04543e-06, -1.5708, 0.288695), Vector3(-2.69979e-06, -1.5708, -0.841737), 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": []
|
||||
}
|
||||
tracks/3/type = "method"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath(".")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0.16, 0.35),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"values": [{
|
||||
"args": [],
|
||||
"method": &"remove_tracker"
|
||||
}, {
|
||||
"args": [],
|
||||
"method": &"check_ammo"
|
||||
}]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_bsc1a"]
|
||||
resource_name = "shoot"
|
||||
length = 0.1
|
||||
@@ -356,61 +413,6 @@ tracks/2/keys = {
|
||||
}]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_lhlkm"]
|
||||
resource_name = "remove_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.16, 0.24, 0.35),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, -0.000397999, 0), Vector3(0, -0.0215431, 0), Vector3(0, 0.116845, 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.16, 0.24, 0.35),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, -1.5708, 0), Vector3(1.04543e-06, -1.5708, 0.288695), Vector3(-2.69979e-06, -1.5708, -0.841737), 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": []
|
||||
}
|
||||
tracks/3/type = "method"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath(".")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0.24),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"values": [{
|
||||
"args": [],
|
||||
"method": &"remove_tracker"
|
||||
}]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_vkrtt"]
|
||||
_data = {
|
||||
"RESET": SubResource("Animation_urfns"),
|
||||
@@ -433,7 +435,6 @@ recoil_amount = Vector3(0, 0.05, 0.05)
|
||||
bullet_speed = 50
|
||||
tracker_indicator = NodePath("gun/slide/TrackerIndicator")
|
||||
flare_light = NodePath("SpotLight3D")
|
||||
bullet = ExtResource("3_hixkr")
|
||||
bullethole = ExtResource("4_bu1g0")
|
||||
casing = ExtResource("5_gls8p")
|
||||
mag = ExtResource("6_ysonb")
|
||||
@@ -479,7 +480,7 @@ libraries = {
|
||||
[node name="Audio" type="Node3D" parent="." index="2"]
|
||||
|
||||
[node name="Fire" type="AudioStreamPlayer3D" parent="Audio" index="0"]
|
||||
stream = ExtResource("8_jtjwm")
|
||||
stream = ExtResource("7_25stk")
|
||||
volume_db = 5.0
|
||||
bus = &"SFX"
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=27 format=3 uid="uid://drwae3loscbw7"]
|
||||
[gd_scene load_steps=28 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"]
|
||||
@@ -19,6 +19,7 @@
|
||||
[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"]
|
||||
[ext_resource type="AudioStream" uid="uid://c3cnnyotrri2b" path="res://assets/Audio/Foley Inventory and Interactions/Foley Inventory and Interactions/Drop Item/Drop Jewelery A.wav" id="20_t7lfm"]
|
||||
|
||||
[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_l5ga0"]
|
||||
blend_mode = 1
|
||||
@@ -241,6 +242,9 @@ stream = ExtResource("17_1fyjm")
|
||||
[node name="HitIndicator" type="AudioStreamPlayer" parent="Audio"]
|
||||
stream = ExtResource("19_6jglu")
|
||||
|
||||
[node name="EnemyKilled" type="AudioStreamPlayer" parent="Audio"]
|
||||
stream = ExtResource("20_t7lfm")
|
||||
|
||||
[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"]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[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="Script" path="res://scripts/bullet_tracking.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"]
|
||||
|
||||
|
||||
@@ -114,7 +114,8 @@ tracks/1/keys = {
|
||||
|
||||
[sub_resource type="Animation" id="Animation_ylwlm"]
|
||||
resource_name = "remove"
|
||||
length = 0.5
|
||||
length = 0.35
|
||||
step = 0.01
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
@@ -122,7 +123,7 @@ tracks/0/path = NodePath("MeshHandle:position")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"times": PackedFloat32Array(0, 0.35),
|
||||
"transitions": PackedFloat32Array(2, 2),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(0, 20, 0)]
|
||||
@@ -134,7 +135,7 @@ tracks/1/path = NodePath(".")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0.5),
|
||||
"times": PackedFloat32Array(0.35),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"values": [{
|
||||
"args": [],
|
||||
@@ -148,11 +149,23 @@ tracks/2/path = NodePath("Sphere:scale")
|
||||
tracks/2/interp = 2
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"times": PackedFloat32Array(0, 0.35),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(1, 1, 1), Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("MeshHandle/Mesh:visible")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_776o6"]
|
||||
_data = {
|
||||
|
||||
@@ -12,6 +12,7 @@ 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
|
||||
@@ -23,6 +24,7 @@ var bullet_active = true
|
||||
func _ready():
|
||||
|
||||
visible = false
|
||||
if bullet_target == null:
|
||||
linear_velocity += transform.basis * Vector3(0, 0, -bullet_speed) + player_velocity
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
@@ -30,23 +32,30 @@ func _physics_process(delta):
|
||||
|
||||
angular_velocity = Vector3(0,0,0)
|
||||
|
||||
distance_from_player = abs(self.global_position - player_position)
|
||||
distance_from_player = self.global_position.distance_to(player_position)
|
||||
|
||||
if distance_from_player.length() > 1.5:
|
||||
if distance_from_player > 1.5:
|
||||
visible = true
|
||||
|
||||
|
||||
func _on_body_entered(body: Node) -> void:
|
||||
|
||||
if !body.is_in_group("player"):
|
||||
|
||||
ray.enabled = false
|
||||
if bullet_target != null:
|
||||
linear_velocity = transform.basis * Vector3(0, 0, -bullet_speed)
|
||||
look_at(bullet_target.global_position)
|
||||
|
||||
if ray.is_colliding():
|
||||
var ray_body = ray.get_collider()
|
||||
if ray_body != null:
|
||||
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
|
||||
ray_body.add_child(instance_bullethole)
|
||||
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))
|
||||
@@ -56,15 +65,45 @@ func _on_body_entered(body: Node) -> void:
|
||||
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)
|
||||
#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)
|
||||
ray.get_collider().breaking(current_velocity)
|
||||
|
||||
despawn()
|
||||
|
||||
#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()
|
||||
#
|
||||
###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
|
||||
|
||||
106
scripts/bullet_cam.gd
Normal file
106
scripts/bullet_cam.gd
Normal file
@@ -0,0 +1,106 @@
|
||||
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
|
||||
var hold_cam_pos = null
|
||||
var camera_start
|
||||
var distance_to_cam_start
|
||||
var player_cam_FOV : float
|
||||
var opaque_color = Color(0.702, 0.557, 0.224)
|
||||
var transparent_color = Color(0.702, 0.557, 0.224, 0)
|
||||
|
||||
@onready var level_control = get_tree().current_scene
|
||||
@onready var player = level_control.player
|
||||
@onready var mesh = $Cylinder
|
||||
@onready var particles = $GPUParticles3D
|
||||
@onready var enemy_particles = $GPUParticlesEnemy
|
||||
@onready var hit_indicator = $Audio/HitIndicator
|
||||
@onready var ray: RayCast3D = $RayCast3D
|
||||
@onready var camera: Camera3D = $Camera3D
|
||||
@onready var camera_handle: Node3D = $CameraHandle
|
||||
@onready var bullet_material = mesh.get_surface_override_material(0)
|
||||
|
||||
const BULLET_CAM_FOV : float = 130
|
||||
const BULLET_SENSITIVITY : float = 1
|
||||
|
||||
func _input(event):
|
||||
if event is InputEventMouseMotion and hold_cam_pos == null:
|
||||
var av_y = -event.relative.x * BULLET_SENSITIVITY
|
||||
var av_x = -event.relative.y * BULLET_SENSITIVITY
|
||||
angular_velocity += transform.basis * Vector3(av_x,av_y,0)
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
Engine.time_scale = .01
|
||||
player.gamespeed_controlled = true
|
||||
player.controlled_elsewhere = true
|
||||
player_cam_FOV = player.camera.fov
|
||||
camera.fov = player_cam_FOV
|
||||
camera_start = player.camera.global_position
|
||||
camera.global_position = camera_start
|
||||
distance_to_cam_start = camera.global_position.distance_to(camera_handle.global_position)
|
||||
camera.current = true
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _physics_process(delta):
|
||||
camera.fov = lerp(player_cam_FOV,BULLET_CAM_FOV, delta * 3000)
|
||||
linear_velocity = transform.basis * Vector3(0, 0, -bullet_speed)
|
||||
|
||||
var distance_to_cam = camera.global_position.distance_to(camera_handle.global_position) / (distance_to_cam_start*2)
|
||||
bullet_material.albedo_color = lerp(transparent_color,opaque_color,distance_to_cam)
|
||||
|
||||
if hold_cam_pos != null:
|
||||
camera.global_position = hold_cam_pos
|
||||
else:
|
||||
camera.global_position = lerp(camera.global_position,camera_handle.global_position, delta * 300)
|
||||
|
||||
if ray.is_colliding() and hold_cam_pos == null:
|
||||
hold_cam_pos = camera.global_position
|
||||
Engine.time_scale = .005
|
||||
|
||||
|
||||
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():
|
||||
player.camera.current = true
|
||||
player.controlled_elsewhere = false
|
||||
player.gamespeed_controlled = false
|
||||
#visible = false
|
||||
#collision_shape.disabled = true
|
||||
#await get_tree().create_timer(1).timeout
|
||||
queue_free()
|
||||
@@ -22,7 +22,7 @@ var bullet_target : Node
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
|
||||
linear_velocity += player_velocity
|
||||
visible = false
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
@@ -38,7 +38,6 @@ func _physics_process(delta):
|
||||
if distance_from_player.length() > 1.5:
|
||||
visible = true
|
||||
|
||||
|
||||
func _on_body_entered(body: Node) -> void:
|
||||
|
||||
if !body.is_in_group("player"):
|
||||
@@ -10,7 +10,7 @@ const SPRINT_SPEED = 15.0
|
||||
const DASH_SPEED = 40
|
||||
const SLOWSPEED = .1
|
||||
const MAX_STAMINA : float = 100
|
||||
const STAMINA_DRAIN = 200
|
||||
const STAMINA_DRAIN = 100 #multiplied times the delta when draining
|
||||
|
||||
var speed
|
||||
var double_jump = true
|
||||
@@ -75,6 +75,7 @@ var held_item_angular_damp_cache
|
||||
var held_item_gravity_cache
|
||||
var held_item_mass_cache
|
||||
var held_item_rotation = Vector3(0,0,0)
|
||||
var gamespeed_controlled = false
|
||||
|
||||
# Slow Down Variables
|
||||
var remaining_stamina : float = MAX_STAMINA
|
||||
@@ -84,6 +85,7 @@ var picked_up_text
|
||||
var pickup_announce = load("res://assets/pickup_announce.tscn")
|
||||
var dead_announce = load("res://assets/dead_announce.tscn")
|
||||
var pickupmsg
|
||||
var controlled_elsewhere = false
|
||||
|
||||
@onready var crosshair = $Head/Recoil/Camera3D/Crosshair
|
||||
@onready var head = $Head
|
||||
@@ -110,11 +112,13 @@ var pickupmsg
|
||||
@onready var stand_check: RayCast3D = $StandCheck
|
||||
@onready var r_hand_test: MeshInstance3D = $Head/Recoil/Camera3D/WeaponHolder/RHandTest
|
||||
@onready var l_hand_test: MeshInstance3D = $Head/Recoil/Camera3D/WeaponHolder/LHandTest
|
||||
@onready var enemy_killed_audio: AudioStreamPlayer = $Audio/EnemyKilled
|
||||
|
||||
|
||||
func _ready():
|
||||
|
||||
SignalBus.enemy_hit.connect(enemy_hit)
|
||||
SignalBus.enemy_killed.connect(enemy_killed)
|
||||
|
||||
weapon_holder_start_rot = weapon_holder.rotation
|
||||
weapon_holder_start_pos = weapon_holder.position
|
||||
@@ -134,7 +138,7 @@ func _ready():
|
||||
AudioServer.set_bus_volume_db(0,-80)
|
||||
|
||||
func _input(event) -> void:
|
||||
|
||||
if !controlled_elsewhere:
|
||||
if !level_control.paused:
|
||||
if event is InputEventMouseMotion:
|
||||
self.rotate_y(-event.relative.x * SENSITIVITY)
|
||||
@@ -219,13 +223,10 @@ func _physics_process(delta):
|
||||
health_indicator.color = lerp(Color(0.471, 0, 0, 0), Color(0.471, 0, 0, .25),health_opacity)
|
||||
|
||||
# Moving Fast Sound
|
||||
#initiate fast movement -- may be done with this block
|
||||
#change sounds with speed
|
||||
if moving_fast:
|
||||
var wind_volume = clamp( velocity.length() - 20 ,-80,10)
|
||||
ear_wind.volume_db = wind_volume
|
||||
#reset at apex
|
||||
var wind_volume = clamp(velocity.length()/20,0,1) #expected max velocity for effect
|
||||
ear_wind.volume_db = lerp(-80,0,wind_volume)
|
||||
|
||||
if moving_fast:
|
||||
#cache fastest speed
|
||||
if abs(velocity.y) > moving_fast_top_speed:
|
||||
moving_fast_top_speed = abs(velocity.y)
|
||||
@@ -243,6 +244,7 @@ func _physics_process(delta):
|
||||
# Game Speed
|
||||
if !level_control.paused:
|
||||
if Input.is_action_pressed("slow_down") and remaining_stamina > 0 :
|
||||
if !gamespeed_controlled:
|
||||
Engine.time_scale = lerp(Engine.time_scale, SLOWSPEED, delta * 20)
|
||||
gun.random_spread_amt = 0
|
||||
AudioServer.set_bus_effect_enabled(0,0,true)
|
||||
@@ -252,6 +254,7 @@ func _physics_process(delta):
|
||||
if remaining_stamina > 0:
|
||||
remaining_stamina = clamp(remaining_stamina - (delta * STAMINA_DRAIN),0,MAX_STAMINA)
|
||||
else:
|
||||
if !gamespeed_controlled:
|
||||
Engine.time_scale = lerp(Engine.time_scale, 1.0, delta * 50)
|
||||
gun.random_spread_amt = gun.random_spread_start
|
||||
AudioServer.set_bus_effect_enabled(0,0,false)
|
||||
@@ -354,6 +357,7 @@ func _physics_process(delta):
|
||||
weapon_sway(delta)
|
||||
weapon_bob(velocity.length(), delta)
|
||||
|
||||
|
||||
func _headbob(time) -> Vector3:
|
||||
var pos = Vector3.ZERO
|
||||
pos.y = sin(time * BOB_FREQ) * BOB_AMP
|
||||
@@ -414,6 +418,9 @@ func enemy_hit():
|
||||
camera.add_child(hitmarker_spawn)
|
||||
hit_indicator.play()
|
||||
|
||||
func enemy_killed():
|
||||
enemy_killed_audio.play()
|
||||
|
||||
func toggle_hud(hud_on):
|
||||
|
||||
if dead:
|
||||
@@ -426,7 +433,7 @@ func toggle_hud(hud_on):
|
||||
func grab_moveable(body):
|
||||
moveable_holder.global_position = body.global_position
|
||||
held_item = body
|
||||
held_item_rotation = body.rotation
|
||||
held_item_rotation = Vector3(0,0,0)#body.rotation
|
||||
#cache rigidbody settings
|
||||
held_item_linear_damp_cache = body.linear_damp
|
||||
held_item_angular_damp_cache = body.angular_damp
|
||||
@@ -443,8 +450,9 @@ func hold_item():
|
||||
if held_item != null:
|
||||
var held_dir = moveable_holder.global_position - held_item.global_position
|
||||
var held_av = held_item_rotation - held_item.rotation
|
||||
held_item.linear_velocity = held_dir * 30
|
||||
held_item.angular_velocity = held_av * 10
|
||||
held_item.linear_velocity = held_dir * 5
|
||||
held_item.look_at(camera.global_position)
|
||||
#held_item.angular_velocity = held_av * 10
|
||||
|
||||
#break when moved too far away
|
||||
var distance_from_player = abs(self.global_position - held_item.global_position)
|
||||
|
||||
@@ -20,10 +20,11 @@ var rot_amount : float
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
SignalBus.enemy_killed.connect(enemy_in_room_killed)
|
||||
|
||||
for i in self.get_children():
|
||||
if i.is_in_group("enemy"):
|
||||
enemies.append(i)
|
||||
i.last_enemy_dead.connect(last_enemy_dead)
|
||||
if i.is_in_group("door"):
|
||||
doors.append(i)
|
||||
if i.is_in_group("room_check"):
|
||||
@@ -66,7 +67,13 @@ func _process(delta):
|
||||
i.loot_amount = 20 #assign loot to the last enemy drop from this section
|
||||
i.last_enemy = true
|
||||
|
||||
func last_enemy_dead():
|
||||
func enemy_in_room_killed():
|
||||
var enemy_count = 0
|
||||
for i in self.get_children():
|
||||
if i.is_in_group("enemy") and i.health > 0:
|
||||
enemy_count += 1
|
||||
|
||||
if enemy_count <= 0:
|
||||
if room_lockdown:
|
||||
room_lockdown = false
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ var player_position
|
||||
var bounces = 0
|
||||
var start_time
|
||||
var end_time
|
||||
var start_velocity
|
||||
|
||||
const EMISSION_MAX : float = 200
|
||||
const EMISSION_LIFETIME : float = 1.75 #in seconds
|
||||
@@ -22,6 +23,7 @@ func _ready() -> void:
|
||||
visible = false
|
||||
start_time = Time.get_ticks_msec()
|
||||
end_time = start_time + (EMISSION_LIFETIME * 1000)
|
||||
start_velocity = linear_velocity.length()
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
@@ -30,6 +32,7 @@ func _process(delta: float) -> void:
|
||||
|
||||
var distance_from_player = abs(self.global_position - player_position)
|
||||
|
||||
|
||||
if distance_from_player.length() > 1.5:
|
||||
visible = true
|
||||
|
||||
|
||||
@@ -3,3 +3,4 @@ extends Node
|
||||
signal switch_changed()
|
||||
signal switch_timeout()
|
||||
signal enemy_hit()
|
||||
signal enemy_killed()
|
||||
|
||||
@@ -185,10 +185,7 @@ func die():
|
||||
get_tree().get_root().add_child(particlespawn)
|
||||
|
||||
drop_loot(loot_amount)
|
||||
|
||||
if last_enemy:
|
||||
emit_signal("last_enemy_dead")
|
||||
|
||||
SignalBus.emit_signal("enemy_killed")
|
||||
queue_free()
|
||||
|
||||
func drop_loot(number_of_drops):
|
||||
|
||||
@@ -20,7 +20,6 @@ extends Node3D
|
||||
@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
|
||||
@@ -39,6 +38,7 @@ extends Node3D
|
||||
@onready var level_control = get_tree().current_scene
|
||||
@onready var ammo_current
|
||||
@onready var tracker_marker = load("res://assets/tracker_marker.tscn")
|
||||
@onready var bullet : Resource = load("res://assets/bullet.tscn")
|
||||
@onready var tracker_indicator_material = tracker_indicator.get_surface_override_material(0)
|
||||
|
||||
var tracker : Node
|
||||
@@ -160,6 +160,11 @@ func remove_tracker():
|
||||
tracker.remove()
|
||||
tracker = null
|
||||
|
||||
func check_ammo():
|
||||
if level_control.ammo_current[gun_index] == 0 and level_control.ammo_reserve[gun_index] > 0:
|
||||
anim_player.play("reload")
|
||||
audio_reload.play()
|
||||
|
||||
func reload():
|
||||
if tracker != null:
|
||||
anim_player.play("remove_tracker")
|
||||
|
||||
Reference in New Issue
Block a user