AI has better detection, committing before a larger rework
This commit is contained in:
@@ -10,7 +10,7 @@ win_conditions = 0
|
||||
survival_time = 160.0
|
||||
max_number_of_chests = 3
|
||||
money_lost_multiplier = 0.5
|
||||
die_on_leaving_bounds = true
|
||||
die_on_leaving_bounds = false
|
||||
weapon_penalty = 1
|
||||
weapon_drop_percentage = 0.5
|
||||
ammo_drop_percentage = 0.5
|
||||
|
||||
60
ai_test_scene.tscn
Normal file
60
ai_test_scene.tscn
Normal file
@@ -0,0 +1,60 @@
|
||||
[gd_scene load_steps=12 format=3 uid="uid://cfaydhd6u5bmb"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bkii8jwf0k7tq" path="res://scripts/LevelManager.gd" id="1_wa46b"]
|
||||
[ext_resource type="PackedScene" uid="uid://24slv0pyxcd5" path="res://assets/level_bounds.tscn" id="2_a2a5u"]
|
||||
[ext_resource type="PackedScene" uid="uid://cwy8iv8nlwqrc" path="res://assets/realtime_day_night_cycle.tscn" id="2_i7wgr"]
|
||||
[ext_resource type="PackedScene" uid="uid://bj1y0fbjtul4a" path="res://post_processing.tscn" id="3_a2a5u"]
|
||||
[ext_resource type="Material" uid="uid://br2pyyyl2n3cx" path="res://assets/materials/prototype/prototype1.tres" id="4_t6ubg"]
|
||||
[ext_resource type="Script" uid="uid://12l74jckdnpl" path="res://scripts/room_manager.gd" id="5_sdike"]
|
||||
[ext_resource type="PackedScene" uid="uid://c7dhavrt11u55" path="res://enemy_spawner.tscn" id="6_5u3xe"]
|
||||
[ext_resource type="PackedScene" uid="uid://drwae3loscbw7" path="res://assets/player.tscn" id="7_540vx"]
|
||||
[ext_resource type="PackedScene" uid="uid://dvmqvjrnt4sgh" path="res://respawn_enemies_button.tscn" id="7_i7wgr"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_t6ubg"]
|
||||
size = Vector3(92.25, 82.386, 76.6396)
|
||||
|
||||
[sub_resource type="NavigationMesh" id="NavigationMesh_wa46b"]
|
||||
vertices = PackedVector3Array(-2.62451, 1, 8.13086, -2.62451, 1, 1.63086, -4.87451, 1, 1.38086, -18.1245, 1, 8.13086, -4.87451, 1, -1.36914, -2.62451, 1, -1.61914, -2.62451, 1, -8.11914, -18.1245, 1, -8.11914, 2.62549, 1, -1.61914, 2.62549, 1, -8.11914, 4.87549, 1, 1.38086, 2.62549, 1, 1.63086, 2.62549, 1, 8.13086, 18.1255, 1, 8.13086, 4.87549, 1, -1.36914, 18.1255, 1, -8.11914, -3.87451, 4.5, -0.619141, -3.87451, 4.5, 0.630859, 3.87549, 4.5, 0.630859, 3.87549, 4.5, -0.619141, -3.62451, 1, -0.369141, -3.62451, 1, 0.380859, 3.62549, 1, 0.380859, 3.62549, 1, -0.369141)
|
||||
polygons = [PackedInt32Array(1, 0, 2), PackedInt32Array(2, 0, 3), PackedInt32Array(5, 4, 6), PackedInt32Array(6, 4, 7), PackedInt32Array(2, 3, 4), PackedInt32Array(4, 3, 7), PackedInt32Array(6, 9, 5), PackedInt32Array(5, 9, 8), PackedInt32Array(11, 10, 12), PackedInt32Array(12, 10, 13), PackedInt32Array(8, 9, 14), PackedInt32Array(14, 9, 15), PackedInt32Array(14, 15, 10), PackedInt32Array(10, 15, 13), PackedInt32Array(19, 18, 16), PackedInt32Array(16, 18, 17), PackedInt32Array(23, 22, 20), PackedInt32Array(20, 22, 21), PackedInt32Array(1, 11, 0), PackedInt32Array(0, 11, 12)]
|
||||
|
||||
[node name="AI Test Scene" type="Node3D"]
|
||||
script = ExtResource("1_wa46b")
|
||||
|
||||
[node name="LevelBounds" parent="." instance=ExtResource("2_a2a5u")]
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="LevelBounds"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -16.9679, 0)
|
||||
shape = SubResource("BoxShape3D_t6ubg")
|
||||
|
||||
[node name="Player" parent="." instance=ExtResource("7_540vx")]
|
||||
transform = Transform3D(-0.691652, 0, -0.722231, 0, 1, 0, 0.722231, 0, -0.691652, 0.224148, 1.46383, -4.4728)
|
||||
|
||||
[node name="Realtime Day Night Cycle" parent="." instance=ExtResource("2_i7wgr")]
|
||||
|
||||
[node name="PostProcessing" parent="." instance=ExtResource("3_a2a5u")]
|
||||
|
||||
[node name="NavigationRegion3D" type="NavigationRegion3D" parent="."]
|
||||
navigation_mesh = SubResource("NavigationMesh_wa46b")
|
||||
|
||||
[node name="CSGBox3D" type="CSGBox3D" parent="NavigationRegion3D"]
|
||||
material_override = ExtResource("4_t6ubg")
|
||||
use_collision = true
|
||||
size = Vector3(37.249, 1, 17.2383)
|
||||
material = ExtResource("4_t6ubg")
|
||||
|
||||
[node name="CSGBox3D2" type="CSGBox3D" parent="NavigationRegion3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.84595, 0)
|
||||
material_override = ExtResource("4_t6ubg")
|
||||
use_collision = true
|
||||
size = Vector3(8.57251, 4.69189, 1.95508)
|
||||
material = ExtResource("4_t6ubg")
|
||||
|
||||
[node name="Level" type="Node3D" parent="."]
|
||||
script = ExtResource("5_sdike")
|
||||
start_enemies = 1
|
||||
|
||||
[node name="RespawnEnemies" parent="Level" instance=ExtResource("7_i7wgr")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.28023, 1.45981, -1.07754)
|
||||
|
||||
[node name="EnemySpawner" parent="Level" instance=ExtResource("6_5u3xe")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.291284, 1, 3.32874)
|
||||
60
ai_test_scene.tscn20492494429.tmp
Normal file
60
ai_test_scene.tscn20492494429.tmp
Normal file
@@ -0,0 +1,60 @@
|
||||
[gd_scene load_steps=12 format=3 uid="uid://cfaydhd6u5bmb"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bkii8jwf0k7tq" path="res://scripts/LevelManager.gd" id="1_wa46b"]
|
||||
[ext_resource type="PackedScene" uid="uid://24slv0pyxcd5" path="res://assets/level_bounds.tscn" id="2_a2a5u"]
|
||||
[ext_resource type="PackedScene" uid="uid://cwy8iv8nlwqrc" path="res://assets/realtime_day_night_cycle.tscn" id="2_i7wgr"]
|
||||
[ext_resource type="PackedScene" uid="uid://bj1y0fbjtul4a" path="res://post_processing.tscn" id="3_a2a5u"]
|
||||
[ext_resource type="Material" uid="uid://br2pyyyl2n3cx" path="res://assets/materials/prototype/prototype1.tres" id="4_t6ubg"]
|
||||
[ext_resource type="Script" uid="uid://12l74jckdnpl" path="res://scripts/room_manager.gd" id="5_sdike"]
|
||||
[ext_resource type="PackedScene" uid="uid://c7dhavrt11u55" path="res://enemy_spawner.tscn" id="6_5u3xe"]
|
||||
[ext_resource type="PackedScene" uid="uid://drwae3loscbw7" path="res://assets/player.tscn" id="7_540vx"]
|
||||
[ext_resource type="PackedScene" uid="uid://dvmqvjrnt4sgh" path="res://respawn_enemies_button.tscn" id="7_i7wgr"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_t6ubg"]
|
||||
size = Vector3(92.25, 82.386, 76.6396)
|
||||
|
||||
[sub_resource type="NavigationMesh" id="NavigationMesh_wa46b"]
|
||||
vertices = PackedVector3Array(-2.62451, 1, 8.13086, -2.62451, 1, 1.63086, -4.87451, 1, 1.38086, -18.1245, 1, 8.13086, -4.87451, 1, -1.36914, -2.62451, 1, -1.61914, -2.62451, 1, -8.11914, -18.1245, 1, -8.11914, 2.62549, 1, -1.61914, 2.62549, 1, -8.11914, 4.87549, 1, 1.38086, 2.62549, 1, 1.63086, 2.62549, 1, 8.13086, 18.1255, 1, 8.13086, 4.87549, 1, -1.36914, 18.1255, 1, -8.11914, -3.87451, 4.5, -0.619141, -3.87451, 4.5, 0.630859, 3.87549, 4.5, 0.630859, 3.87549, 4.5, -0.619141, -3.62451, 1, -0.369141, -3.62451, 1, 0.380859, 3.62549, 1, 0.380859, 3.62549, 1, -0.369141)
|
||||
polygons = [PackedInt32Array(1, 0, 2), PackedInt32Array(2, 0, 3), PackedInt32Array(5, 4, 6), PackedInt32Array(6, 4, 7), PackedInt32Array(2, 3, 4), PackedInt32Array(4, 3, 7), PackedInt32Array(6, 9, 5), PackedInt32Array(5, 9, 8), PackedInt32Array(11, 10, 12), PackedInt32Array(12, 10, 13), PackedInt32Array(8, 9, 14), PackedInt32Array(14, 9, 15), PackedInt32Array(14, 15, 10), PackedInt32Array(10, 15, 13), PackedInt32Array(19, 18, 16), PackedInt32Array(16, 18, 17), PackedInt32Array(23, 22, 20), PackedInt32Array(20, 22, 21), PackedInt32Array(1, 11, 0), PackedInt32Array(0, 11, 12)]
|
||||
|
||||
[node name="AI Test Scene" type="Node3D"]
|
||||
script = ExtResource("1_wa46b")
|
||||
|
||||
[node name="LevelBounds" parent="." instance=ExtResource("2_a2a5u")]
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="LevelBounds"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -16.9679, 0)
|
||||
shape = SubResource("BoxShape3D_t6ubg")
|
||||
|
||||
[node name="Player" parent="." instance=ExtResource("7_540vx")]
|
||||
transform = Transform3D(-0.691652, 0, -0.722231, 0, 1, 0, 0.722231, 0, -0.691652, 0.224148, 1.46383, -4.4728)
|
||||
|
||||
[node name="Realtime Day Night Cycle" parent="." instance=ExtResource("2_i7wgr")]
|
||||
|
||||
[node name="PostProcessing" parent="." instance=ExtResource("3_a2a5u")]
|
||||
|
||||
[node name="NavigationRegion3D" type="NavigationRegion3D" parent="."]
|
||||
navigation_mesh = SubResource("NavigationMesh_wa46b")
|
||||
|
||||
[node name="CSGBox3D" type="CSGBox3D" parent="NavigationRegion3D"]
|
||||
material_override = ExtResource("4_t6ubg")
|
||||
use_collision = true
|
||||
size = Vector3(37.249, 1, 17.2383)
|
||||
material = ExtResource("4_t6ubg")
|
||||
|
||||
[node name="CSGBox3D2" type="CSGBox3D" parent="NavigationRegion3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.84595, 0)
|
||||
material_override = ExtResource("4_t6ubg")
|
||||
use_collision = true
|
||||
size = Vector3(8.57251, 4.69189, 1.95508)
|
||||
material = ExtResource("4_t6ubg")
|
||||
|
||||
[node name="Level" type="Node3D" parent="."]
|
||||
script = ExtResource("5_sdike")
|
||||
start_enemies = 1
|
||||
|
||||
[node name="RespawnEnemies" parent="Level" instance=ExtResource("7_i7wgr")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.28023, 1.45981, -1.07754)
|
||||
|
||||
[node name="EnemySpawner" parent="Level" instance=ExtResource("6_5u3xe")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.291284, 1, 3.32874)
|
||||
@@ -45,12 +45,12 @@ start_mags = 10
|
||||
bullet_damage = 1
|
||||
smoke_enabled = false
|
||||
bullet_force_mod = 5.0
|
||||
bullet_speed = 600
|
||||
bullet_speed = 150
|
||||
vibration_weak_magnitude = 0.1
|
||||
vibration_strong_magnitude = 0.5
|
||||
vibration_duration = 0.1
|
||||
chamber_rot_amount = 60.0
|
||||
shotgun_spread = Vector3(180, 180, 180)
|
||||
shotgun_spread = Vector3(45, 45, 45)
|
||||
pellets_per_shot = 50
|
||||
blast_power = 50.0
|
||||
hitscan_range = 100.0
|
||||
|
||||
@@ -34,7 +34,7 @@ mass = 0.01
|
||||
physics_material_override = SubResource("PhysicsMaterial_0ewk3")
|
||||
continuous_cd = true
|
||||
contact_monitor = true
|
||||
max_contacts_reported = 1
|
||||
max_contacts_reported = 10
|
||||
script = ExtResource("1_1v1ju")
|
||||
collision_shape = NodePath("CollisionShape3D")
|
||||
mesh = NodePath("MeshInstance3D")
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=87 format=4 uid="uid://djr7vnr1hcx82"]
|
||||
[gd_scene load_steps=88 format=4 uid="uid://djr7vnr1hcx82"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cdofgtwevbray" path="res://scripts/spider.gd" id="1_7e7fe"]
|
||||
[ext_resource type="PackedScene" uid="uid://h5ojldugfyyu" path="res://assets/bullet_enemy.tscn" id="2_aew5r"]
|
||||
@@ -29,6 +29,9 @@
|
||||
[ext_resource type="AudioStream" uid="uid://d0n46ursprjjs" path="res://assets/Audio/Enemy SFX/servo-motor-SBA-300109173.mp3" id="25_lr3lm"]
|
||||
[ext_resource type="AudioStream" uid="uid://br3tyu6cmgyy2" path="res://assets/Audio/Weapons/7Mag Bolt Action Rifle/Gunshots/7Mag Bolt Action Rifle - Gunshot A 004.wav" id="26_1b3cb"]
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_fborx"]
|
||||
radius = 15.0
|
||||
|
||||
[sub_resource type="ViewportTexture" id="ViewportTexture_87l3v"]
|
||||
viewport_path = NodePath("SubViewport")
|
||||
|
||||
@@ -821,12 +824,14 @@ random_pitch = 1.1
|
||||
streams_count = 1
|
||||
stream_0/stream = ExtResource("25_lr3lm")
|
||||
|
||||
[node name="spider" type="CharacterBody3D" node_paths=PackedStringArray("nav_agent") groups=["enemy", "persist"]]
|
||||
[node name="spider" type="CharacterBody3D" node_paths=PackedStringArray("nav_agent", "visibility_areas", "line_of_sight_ray") groups=["enemy", "persist"]]
|
||||
collision_layer = 8
|
||||
collision_mask = 521
|
||||
up_direction = Vector3(0.0449994, 0.998987, 0)
|
||||
script = ExtResource("1_7e7fe")
|
||||
nav_agent = NodePath("NavigationAgent3D")
|
||||
visibility_areas = [NodePath("VisibilityArea")]
|
||||
line_of_sight_ray = NodePath("LineOfSight")
|
||||
bullet = ExtResource("2_aew5r")
|
||||
casing = ExtResource("3_e5ft5")
|
||||
bullet_speed = 75
|
||||
@@ -843,6 +848,7 @@ initial_state = NodePath("Idle")
|
||||
script = ExtResource("7_cwyr0")
|
||||
enemy = NodePath("../..")
|
||||
enemy_targets = [NodePath("../../body/backTarget")]
|
||||
can_see = true
|
||||
|
||||
[node name="Stunned" type="Node" parent="StateMachine" node_paths=PackedStringArray("stunned_stars", "enemy", "enemy_targets")]
|
||||
script = ExtResource("8_wpql0")
|
||||
@@ -859,6 +865,7 @@ metadata/_custom_type_script = "uid://dhxolagi0b5s1"
|
||||
script = ExtResource("10_gicen")
|
||||
enemy = NodePath("../..")
|
||||
enemy_targets = [NodePath("../../body/backTarget")]
|
||||
can_see = true
|
||||
|
||||
[node name="Reload" type="Node" parent="StateMachine" node_paths=PackedStringArray("reload_sound", "enemy", "enemy_targets")]
|
||||
script = ExtResource("11_ekglj")
|
||||
@@ -866,6 +873,14 @@ reload_sound = NodePath("../../AUIDO/Reload")
|
||||
enemy = NodePath("../..")
|
||||
enemy_targets = [NodePath("../../body/backTarget")]
|
||||
|
||||
[node name="VisibilityArea" type="Area3D" parent="."]
|
||||
collision_layer = 0
|
||||
collision_mask = 4
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="VisibilityArea"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -14.4461)
|
||||
shape = SubResource("SphereShape3D_fborx")
|
||||
|
||||
[node name="HealthBarSprite" parent="." node_paths=PackedStringArray("character") instance=ExtResource("7_87l3v")]
|
||||
transform = Transform3D(0.254412, 0, 0, 0, 0.561068, 0, 0, 0, 1, 0, 2.41498, 0)
|
||||
billboard = 2
|
||||
@@ -937,6 +952,11 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00161432, 1.62046, 0.001342
|
||||
target_position = Vector3(0, 0, -50)
|
||||
collision_mask = 5
|
||||
|
||||
[node name="LineOfSight" type="RayCast3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00161432, 1.62046, 0.00134204)
|
||||
target_position = Vector3(0, 0, -50)
|
||||
collision_mask = 5
|
||||
|
||||
[node name="SpiderLookNext" type="RayCast3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00161432, 1.62046, 0.00134204)
|
||||
target_position = Vector3(0, 0, -50)
|
||||
|
||||
@@ -82,7 +82,6 @@ transform = Transform3D(-0.35127, 0, 0.936274, 0, 1, 0, -0.936274, 0, -0.35127,
|
||||
[node name="Enemies" type="Node3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.104294, 0.338203, -0.0832825)
|
||||
script = ExtResource("8_mayil")
|
||||
number_of_enemies = 30
|
||||
|
||||
[node name="EnemySpawner" parent="Enemies" instance=ExtResource("12_qbq7k")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -115.723, 9.32938, 68.5121)
|
||||
|
||||
@@ -12,7 +12,7 @@ config_version=5
|
||||
|
||||
config/name="First Person Test"
|
||||
config/tags=PackedStringArray("fps")
|
||||
run/main_scene="uid://bk4pn4k7n51ux"
|
||||
run/main_scene="uid://cfaydhd6u5bmb"
|
||||
config/features=PackedStringArray("4.4", "Forward Plus")
|
||||
config/icon="uid://6svuq1l83al5"
|
||||
|
||||
|
||||
15
respawn_enemies_button.tscn
Normal file
15
respawn_enemies_button.tscn
Normal file
@@ -0,0 +1,15 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://dvmqvjrnt4sgh"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://h05qay3qri4e" path="res://assets/switch_1.tscn" id="1_oi2lf"]
|
||||
[ext_resource type="Script" uid="uid://bi1rvqju6nwh7" path="res://scripts/respawn_enemies_button.gd" id="1_wrpub"]
|
||||
|
||||
[node name="RespawnEnemies" type="Node3D"]
|
||||
script = ExtResource("1_wrpub")
|
||||
|
||||
[node name="Respawn Enemies" type="Label3D" parent="."]
|
||||
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0.573406, 0)
|
||||
text = "Respawn Enemies"
|
||||
|
||||
[node name="Switch1" parent="." instance=ExtResource("1_oi2lf")]
|
||||
|
||||
[connection signal="switch_changed" from="Switch1" to="." method="_on_switch_1_switch_changed"]
|
||||
@@ -3,28 +3,34 @@ class_name EnemyAttack
|
||||
|
||||
var heartbeat : float = 3.0
|
||||
|
||||
@export var initial_wait_time : float = 1.0
|
||||
@export var between_shot_time : Vector2 = Vector2(.5,2.0)
|
||||
@export var reload_time : float = 7.0
|
||||
|
||||
|
||||
@onready var player = get_tree().current_scene.player
|
||||
|
||||
var ammo
|
||||
var initial_timer
|
||||
var shot_timer = 0.0
|
||||
|
||||
func Enter():
|
||||
super()
|
||||
update_waypoint()
|
||||
ammo = enemy.max_ammo
|
||||
enemy.turret_material.emission_enabled = true
|
||||
initial_timer = initial_wait_time
|
||||
|
||||
func update_waypoint():
|
||||
enemy.nav_agent.set_target_position(player.global_position)
|
||||
enemy.nav_agent.set_target_position(enemy.character_follow.global_position)
|
||||
|
||||
func Update(delta):
|
||||
if heartbeat > 0:
|
||||
heartbeat -= delta
|
||||
else:
|
||||
update_waypoint()
|
||||
#Initial wait time
|
||||
if initial_timer > 0:
|
||||
initial_timer -= delta
|
||||
else:
|
||||
#fire if player in view
|
||||
if ammo > 0:
|
||||
if shot_timer > 0:
|
||||
@@ -32,7 +38,6 @@ func Update(delta):
|
||||
else:
|
||||
if enemy.turret_look_next.is_colliding() and enemy.turret_look_next.get_collider().is_in_group("player"):
|
||||
shot_timer = randf_range(between_shot_time.x,between_shot_time.y)
|
||||
ammo -= 2
|
||||
enemy.turret_material.emission_enabled = true
|
||||
await get_tree().create_timer(.1).timeout
|
||||
attack()
|
||||
@@ -41,7 +46,7 @@ func Update(delta):
|
||||
Transitioned.emit(self,"reload")
|
||||
|
||||
func Physics_Update(delta):
|
||||
enemy.turret_look_next.look_at(player.global_position)
|
||||
enemy.turret_look_next.look_at(enemy.character_follow.global_position)
|
||||
enemy.turret_look.rotation = lerp(enemy.turret_look.rotation,enemy.turret_look_next.rotation,delta * enemy.turret_look_speed)
|
||||
|
||||
var destination = enemy.nav_agent.get_next_path_position()
|
||||
@@ -61,11 +66,8 @@ func attack():
|
||||
enemy.smoke_2.emitting = true
|
||||
enemy.turret_material.emission_enabled = false
|
||||
|
||||
func reload():
|
||||
await get_tree().create_timer(reload_time).timeout
|
||||
ammo = enemy.max_ammo
|
||||
|
||||
func fire(barrel):
|
||||
ammo -= 1
|
||||
var instance_bullet = enemy.bullet.instantiate()
|
||||
instance_bullet.position = barrel.global_position
|
||||
instance_bullet.transform.basis = barrel.global_transform.basis
|
||||
|
||||
@@ -31,6 +31,7 @@ func Enter():
|
||||
scan_direction = deg_to_rad(TURRET_TURN_AMT)
|
||||
|
||||
func Update(delta: float):
|
||||
super(delta)
|
||||
if wander_time > 0:
|
||||
wander_time -= delta
|
||||
else:
|
||||
|
||||
@@ -3,6 +3,7 @@ class_name EnemyReload
|
||||
|
||||
@export var reload_sound : AudioStreamPlayer3D
|
||||
@export var run_distance : float = 3
|
||||
@export var body_turn_speed : float = 1
|
||||
|
||||
@onready var player = get_tree().current_scene.player
|
||||
|
||||
@@ -47,7 +48,7 @@ func Physics_Update(delta):
|
||||
enemy.velocity = direction * move_speed
|
||||
enemy.spider_look_next.look_at(player.global_position)
|
||||
var look_target = enemy.spider_look_next.global_rotation.y
|
||||
enemy.global_rotation.y = lerp(enemy.global_rotation.y,look_target,delta * 3)
|
||||
enemy.global_rotation.y = lerp(enemy.global_rotation.y,look_target,delta * body_turn_speed)
|
||||
|
||||
func finished_reload():
|
||||
if enemy.turret_look_next.is_colliding():
|
||||
|
||||
@@ -4,12 +4,32 @@ class_name EnemyState
|
||||
@export var enemy : CharacterBody3D
|
||||
@export var enemy_targets : Array[Area3D]
|
||||
@export var move_speed : float = 3
|
||||
@export var can_see : bool = false
|
||||
|
||||
func Enter():
|
||||
if enemy_targets != null:
|
||||
for target in enemy_targets:
|
||||
target.body_part_hit.connect(take_damage)
|
||||
|
||||
func Update(delta):
|
||||
if enemy.visibility_areas != null:
|
||||
for area in enemy.visibility_areas:
|
||||
var bodies = area.get_overlapping_bodies()
|
||||
if bodies != null:
|
||||
for i in bodies:
|
||||
enemy.point_of_interest = i.global_position
|
||||
else:
|
||||
enemy.point_of_interest = null
|
||||
|
||||
if enemy.point_of_interest != null:
|
||||
enemy.line_of_sight_ray.look_at(enemy.point_of_interest)
|
||||
if enemy.line_of_sight_ray.is_colliding():
|
||||
if enemy.line_of_sight_ray.get_collider() is Player:
|
||||
if can_see:
|
||||
enemy.character_follow = enemy.line_of_sight_ray.get_collider()
|
||||
Transitioned.emit(self,"attack")
|
||||
|
||||
|
||||
func take_damage(dam,bullet_damage):
|
||||
SignalBus.emit_signal("enemy_hit")
|
||||
enemy.health -= dam * bullet_damage
|
||||
|
||||
@@ -20,7 +20,6 @@ var target_type
|
||||
@export var bullethole : Resource
|
||||
@onready var level_control = get_tree().current_scene
|
||||
|
||||
var rng = RandomNumberGenerator.new()
|
||||
var av_x
|
||||
var av_y
|
||||
var av_z
|
||||
@@ -28,9 +27,9 @@ 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))
|
||||
av_x = deg_to_rad(randf_range(-random_spread_amt,random_spread_amt))
|
||||
av_y = deg_to_rad(randf_range(-random_spread_amt,random_spread_amt))
|
||||
av_z = deg_to_rad(randf_range(-random_spread_amt,random_spread_amt))
|
||||
rotation += Vector3(av_x,av_y,av_z)
|
||||
timer.start()
|
||||
|
||||
|
||||
@@ -2,12 +2,14 @@ extends EnemyState
|
||||
class_name EnemyStunned
|
||||
|
||||
@export var stunned_stars : Node
|
||||
@export var stun_time_start : float = 5.0
|
||||
|
||||
var move_direction : Vector3
|
||||
var scan_direction : float
|
||||
|
||||
var wander_time : float
|
||||
var scan_time : float
|
||||
var stun_time
|
||||
|
||||
const WANDER_AMT = 50
|
||||
const TURRET_TURN_AMT : float = 180.0
|
||||
@@ -18,6 +20,7 @@ func Enter():
|
||||
if stunned_stars:
|
||||
stunned_stars.visible = true
|
||||
randomize_wander()
|
||||
stun_time = stun_time_start
|
||||
|
||||
func _Exit():
|
||||
if stunned_stars:
|
||||
@@ -29,6 +32,12 @@ func Update(delta):
|
||||
else:
|
||||
randomize_wander()
|
||||
|
||||
if stun_time > 0:
|
||||
stun_time -= delta
|
||||
else:
|
||||
stunned_stars.visible = false
|
||||
Transitioned.emit(self,"idle")
|
||||
|
||||
func Physics_Update(delta : float):
|
||||
if enemy:
|
||||
var destination = enemy.nav_agent.get_next_path_position()
|
||||
@@ -36,7 +45,7 @@ func Physics_Update(delta : float):
|
||||
var direction = local_destination.normalized()
|
||||
if enemy.global_position.distance_to(local_destination) > 1:
|
||||
enemy.velocity = direction * move_speed
|
||||
enemy.global_rotation.y += delta
|
||||
enemy.global_rotation.y += delta * 4
|
||||
|
||||
func randomize_wander():
|
||||
var x = randf_range(-WANDER_AMT,WANDER_AMT)
|
||||
|
||||
7
scripts/respawn_enemies_button.gd
Normal file
7
scripts/respawn_enemies_button.gd
Normal file
@@ -0,0 +1,7 @@
|
||||
extends Node3D
|
||||
|
||||
|
||||
func _on_switch_1_switch_changed() -> void:
|
||||
var parent = get_parent()
|
||||
parent.number_of_enemies = 1
|
||||
parent.spawn_enemies()
|
||||
1
scripts/respawn_enemies_button.gd.uid
Normal file
1
scripts/respawn_enemies_button.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://bi1rvqju6nwh7
|
||||
@@ -2,7 +2,7 @@ extends Node
|
||||
|
||||
@export_group("Main")
|
||||
@export var room_lockdown : bool = false
|
||||
@export var number_of_enemies : int = 20
|
||||
@export var start_enemies : int = 20
|
||||
@export var spawnable_enemies = preload("res://assets/spider2.tscn")
|
||||
@export_group("Key")
|
||||
@export var key_drop : bool = false
|
||||
@@ -11,13 +11,13 @@ extends Node
|
||||
@export_group("Item Drops")
|
||||
@export var number_of_drops = 5
|
||||
|
||||
var enemies = []
|
||||
var doors = []
|
||||
var room_checks = []
|
||||
var enemy_spawners = []
|
||||
var number_enemies : int
|
||||
@onready var number_of_enemies : int = start_enemies
|
||||
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)
|
||||
@@ -29,9 +29,7 @@ func _process(delta):
|
||||
pass
|
||||
|
||||
func assign_elements():
|
||||
for i in self.get_children():
|
||||
if i is Enemy:
|
||||
enemies.append(i)
|
||||
for i in get_children():
|
||||
if i.is_in_group("door"):
|
||||
doors.append(i)
|
||||
if i.is_in_group("room_check"):
|
||||
@@ -71,7 +69,7 @@ func room_exited():
|
||||
i.open()
|
||||
|
||||
func spawn_enemies():
|
||||
while number_of_enemies >= 0:
|
||||
while number_of_enemies > 0:
|
||||
number_of_enemies -= 1
|
||||
|
||||
var random_spawner = enemy_spawners.pick_random()
|
||||
@@ -81,7 +79,3 @@ func spawn_enemies():
|
||||
add_child(enemy)
|
||||
enemy.global_position = set_pos
|
||||
|
||||
await number_enemies == 0
|
||||
for i in self.get_children():
|
||||
if i is Enemy:
|
||||
enemies.append(i)
|
||||
|
||||
@@ -11,11 +11,13 @@ var last_enemy : bool = false
|
||||
@export var max_ammo = 10
|
||||
@export var loot_amount = 2
|
||||
@export var nav_agent : NavigationAgent3D
|
||||
@export var visibility_areas : Array[Area3D]
|
||||
@export var line_of_sight_ray : RayCast3D
|
||||
|
||||
@export_enum("Enemy", "Trap") var enemy_type: int
|
||||
@export var bullet : Resource
|
||||
@export var casing : Resource
|
||||
@export var bullet_speed = 150
|
||||
@export var bullet_speed = 10
|
||||
@export var bullet_drop = .1
|
||||
@export var random_spread_amt = .01
|
||||
@export var bullet_damage = 1
|
||||
@@ -74,7 +76,9 @@ var player_last_seen
|
||||
var knocked = false
|
||||
var stunned = false
|
||||
var health
|
||||
var turret_current_moving_speed
|
||||
|
||||
var point_of_interest
|
||||
var character_follow
|
||||
|
||||
func _ready():
|
||||
health = start_health
|
||||
|
||||
Reference in New Issue
Block a user