bullets working better and detect collision better

still need to register hits with enemy targets and find contact point to leave bullet holes
This commit is contained in:
derek
2024-10-22 15:27:33 -05:00
parent 2e7f253609
commit b70fd94184
7 changed files with 256 additions and 58 deletions

View File

@@ -57,6 +57,7 @@ shadow_mesh = SubResource("ArrayMesh_46pc3")
[node name="ammo_pickup" type="RigidBody3D" node_paths=PackedStringArray("collision_shape") groups=["magnet", "pickup", "scene_rigidbody"]]
collision_layer = 16
collision_mask = 17
continuous_cd = true
script = ExtResource("1_sni3c")
collision_shape = NodePath("CollisionShape3D2")
despawning = true

126
assets/bulB228.tmp Normal file
View File

@@ -0,0 +1,126 @@
[gd_scene load_steps=12 format=4 uid="uid://dqhltdnqyg8ni"]
[ext_resource type="Script" path="res://scripts/bullet.gd" id="1_oj0f5"]
[ext_resource type="Texture2D" uid="uid://dqytegxsmb5kg" path="res://assets/Models/bullet.transparency.png" id="2_0ks2n"]
[ext_resource type="AudioStream" uid="uid://dqj4cx05f25jj" path="res://assets/Audio/punch-body-hard-SBA-300156881.wav" id="3_6j0l2"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_mfpbf"]
resource_name = "bullet"
transparency = 4
cull_mode = 2
albedo_texture = ExtResource("2_0ks2n")
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"]
transparency = 1
blend_mode = 1
albedo_color = Color(0.75476, 0.726851, 0.555583, 1)
emission_enabled = true
emission = Color(0.944624, 0.755365, 0, 1)
emission_energy_multiplier = 8.0
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_3wvag"]
direction = Vector3(0, 0, 1)
initial_velocity_min = 3.0
initial_velocity_max = 5.0
[sub_resource type="BoxMesh" id="BoxMesh_jrtee"]
size = Vector3(0.04, 0.04, 0.04)
[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="CylinderShape3D" id="CylinderShape3D_tqvit"]
height = 1.53305
radius = 0.055
[node name="Bullet" type="RigidBody3D"]
collision_layer = 0
collision_mask = 105
continuous_cd = true
contact_monitor = true
max_contacts_reported = 2
script = ExtResource("1_oj0f5")
[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
one_shot = true
explosiveness = 1.0
process_material = SubResource("ParticleProcessMaterial_3wvag")
draw_pass_1 = SubResource("BoxMesh_jrtee")
[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_6j0l2")
[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, -1)
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
[connection signal="body_shape_entered" from="." to="." method="_on_body_shape_entered"]

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=11 format=4 uid="uid://dqhltdnqyg8ni"]
[gd_scene load_steps=12 format=4 uid="uid://dqhltdnqyg8ni"]
[ext_resource type="Script" path="res://scripts/bullet.gd" id="1_oj0f5"]
[ext_resource type="Texture2D" uid="uid://dqytegxsmb5kg" path="res://assets/Models/bullet.transparency.png" id="2_0ks2n"]
@@ -72,25 +72,24 @@ emission_enabled = true
emission = Color(0.737886, 0.150238, 0.0835467, 1)
emission_energy_multiplier = 8.0
[node name="Bullet" type="Node3D"]
[sub_resource type="CylinderShape3D" id="CylinderShape3D_tqvit"]
height = 1.53305
radius = 0.055
[node name="Bullet" type="RigidBody3D"]
collision_layer = 0
collision_mask = 105
continuous_cd = true
contact_monitor = true
max_contacts_reported = 1
script = ExtResource("1_oj0f5")
[node name="gunbullet1" type="Node3D" parent="."]
transform = Transform3D(-2, 0, -3.01992e-07, 0, 2, 0, 3.01992e-07, 0, -2, 0, 0, 0)
[node name="Cylinder" type="MeshInstance3D" parent="gunbullet1"]
transform = Transform3D(1, 0, 0, 0, 0, -1, 0, 1, 0, -2.57922e-08, 0, -0.313849)
[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="RayCast3D" type="RayCast3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1.70846, 0.000340699, 0.0133128, 0.723808)
target_position = Vector3(0, 0, -2.5)
collision_mask = 105
hit_from_inside = true
collide_with_areas = true
[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")
@@ -111,12 +110,16 @@ explosiveness = 1.0
process_material = SubResource("ParticleProcessMaterial_3wvag")
draw_pass_1 = SubResource("BoxMesh_jrtee")
[node name="Timer" type="Timer" parent="."]
wait_time = 10.0
one_shot = true
autostart = true
[node name="Audio" type="Node" parent="."]
[node name="HitIndicator" type="AudioStreamPlayer" parent="Audio"]
stream = ExtResource("3_6j0l2")
[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, -1)
[connection signal="body_entered" from="." to="." method="_on_body_entered"]

View File

@@ -404,7 +404,9 @@ _data = {
script = ExtResource("2_6i1l4")
gun_name = "Mac 10"
max_ammo = 30
start_mags = 300
bullet_damage = 2
bullet_speed = 300
bullet_drop = 0.01
random_spread_amt = 0.5
fire_pitch_scale_amt = 0.05

80
scenes/bullet_test.tscn Normal file
View File

@@ -0,0 +1,80 @@
[gd_scene load_steps=9 format=3 uid="uid://dq3pqbjg7o241"]
[ext_resource type="Script" path="res://scripts/LevelManager.gd" id="1_iqxey"]
[ext_resource type="PackedScene" uid="uid://brl0bsqjl5dg3" path="res://assets/mac_10.tscn" id="2_bbv4q"]
[ext_resource type="Material" uid="uid://br2pyyyl2n3cx" path="res://assets/materials/prototype/prototype1.tres" id="3_ol40x"]
[ext_resource type="PackedScene" uid="uid://drwae3loscbw7" path="res://assets/player.tscn" id="4_1k4dj"]
[ext_resource type="PackedScene" uid="uid://bmbv6ujc00jhk" path="res://assets/ammo_pickup.tscn" id="5_8hwga"]
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_s7a4u"]
sky_horizon_color = Color(0.64625, 0.65575, 0.67075, 1)
ground_horizon_color = Color(0.64625, 0.65575, 0.67075, 1)
[sub_resource type="Sky" id="Sky_c52rg"]
sky_material = SubResource("ProceduralSkyMaterial_s7a4u")
[sub_resource type="Environment" id="Environment_c1yeo"]
background_mode = 2
sky = SubResource("Sky_c52rg")
tonemap_mode = 2
ssao_enabled = true
sdfgi_enabled = true
glow_enabled = true
[node name="BulletTest" type="Node3D" node_paths=PackedStringArray("player")]
script = ExtResource("1_iqxey")
player = NodePath("Player")
gun_1 = ExtResource("2_bbv4q")
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_c1yeo")
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(0.614285, -0.683367, 0.394542, 0, 0.5, 0.866025, -0.789084, -0.531987, 0.307143, 0, 0, 0)
shadow_enabled = true
[node name="CSGBox3D2" type="CSGBox3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -20.2065, 1.06369, -8.35413)
use_collision = true
size = Vector3(9.58691, 1.80511, 9.50757)
material = ExtResource("3_ol40x")
[node name="CSGBox3D" type="CSGBox3D" parent="."]
use_collision = true
size = Vector3(50, 0.5, 50)
material = ExtResource("3_ol40x")
[node name="Player" parent="." instance=ExtResource("4_1k4dj")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.93316, 1.36359, 21.3029)
[node name="ammo_pickup" parent="." instance=ExtResource("5_8hwga")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 21.3394, 1.49663, 2.62687)
despawning = false
[node name="ammo_pickup2" parent="." instance=ExtResource("5_8hwga")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 21.7807, 1.49663, 1.89032)
despawning = false
[node name="ammo_pickup3" parent="." instance=ExtResource("5_8hwga")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 22.1793, 1.49663, 2.36679)
despawning = false
[node name="ammo_pickup4" parent="." instance=ExtResource("5_8hwga")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 22.1831, 1.49663, 3.18921)
despawning = false
[node name="ammo_pickup5" parent="." instance=ExtResource("5_8hwga")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 21.841, 1.49663, 3.64352)
despawning = false
[node name="ammo_pickup6" parent="." instance=ExtResource("5_8hwga")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 22.6368, 1.49663, 4.15159)
despawning = false
[node name="ammo_pickup7" parent="." instance=ExtResource("5_8hwga")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 21.5417, 1.49663, 4.64181)
despawning = false
[node name="ammo_pickup8" parent="." instance=ExtResource("5_8hwga")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 22.5812, 1.49663, 5.00169)
despawning = false

View File

@@ -1,4 +1,4 @@
extends Node3D
extends RigidBody3D
var bullet_speed
var bullet_drop
@@ -10,74 +10,60 @@ var distance_from_player
var player_position
var player_velocity
@onready var mesh = $gunbullet1
@onready var ray = $RayCast3D
@onready var mesh = $Cylinder
@onready var particles = $GPUParticles3D
@onready var enemy_particles = $GPUParticlesEnemy
@onready var timer = $Timer
@onready var gunbullet1 = $gunbullet1/Cylinder
@onready var hit_indicator = $Audio/HitIndicator
var rng = RandomNumberGenerator.new()
var av_x
var av_y
var av_z
# Called when the node enters the scene tree for the first time.
func _ready():
#apply random rotation
av_x = deg_to_rad(rng.randf_range(-random_spread_amt,random_spread_amt))
av_y = deg_to_rad(rng.randf_range(-random_spread_amt,random_spread_amt))
av_z = deg_to_rad(rng.randf_range(-random_spread_amt,random_spread_amt))
rotation += Vector3(av_x,av_y,av_z)
timer.start()
visible = false
ray.target_position.z *= (bullet_speed/150)
linear_velocity += transform.basis * Vector3(0, 0, -bullet_speed)
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _physics_process(delta):
position += transform.basis * Vector3(0, 0, -bullet_speed) * delta
rotation.x = clamp(rotation.x - delta * bullet_drop,deg_to_rad(-90),deg_to_rad(90))
distance_from_player = abs(self.global_position - player_position)
if distance_from_player.x > 2 or distance_from_player.y > 2 or distance_from_player.z > 2:
visible = true
func _on_body_entered(body: Node) -> void:
if ray.is_colliding() and !ray.get_collider().is_in_group("player"):
if !body.is_in_group("player"):
mesh.visible = false
ray.enabled = false
#bullethole effect
ray.get_collider().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())
#body.add_child(instance_bullethole)
#instance_bullethole.global_transform.origin = global_position
#if (abs(body.get_collision_normal().y) > 0.99):
#instance_bullethole.look_at(body.get_collision_point() + body.get_collision_normal(), Vector3(0,0,1))
#else:
#instance_bullethole.look_at(body.get_collision_point() + body.get_collision_normal())
#move rigidbodies
if ray.get_collider().is_in_group("scene_rigidbody"):
ray.get_collider().linear_velocity += transform.basis * Vector3(0,0,-1 * bullet_force_mod)
if body.is_in_group("scene_rigidbody"):
body.linear_velocity += transform.basis * Vector3(0,0,-1 * bullet_force_mod)
if ray.get_collider().is_in_group("breakable"):
if body.is_in_group("breakable"):
var current_velocity = transform.basis * Vector3(0,0,-1 * bullet_force_mod)
ray.get_collider().breaking(current_velocity)
body.breaking(current_velocity)
if ray.get_collider().is_in_group("enemy_target"):
if body.is_in_group("enemy_target"):
print("enemy target hit")
hit_indicator.play()
enemy_particles.emitting = true
ray.get_collider().hit(bullet_damage)
body.hit(bullet_damage)
if ray.get_collider().is_in_group("switch"):
ray.get_collider().hit()
if body.is_in_group("switch"):
body.hit()
await get_tree().create_timer(1.0).timeout
#await get_tree().create_timer(1.0).timeout
queue_free()

View File

@@ -104,7 +104,7 @@ func shoot(delta):
instance_bullet.bullet_force_mod = bullet_force_mod
instance_bullet.instance_bullethole = bullethole.instantiate()
instance_bullet.player_position = player.global_position
get_tree().get_root().add_child(instance_bullet)
get_tree().current_scene.add_child(instance_bullet)
# Casing transform
var instance_casing = casing.instantiate()