From f7e776a17947f863d4308e5ba78744167e9f3314 Mon Sep 17 00:00:00 2001 From: derek Date: Tue, 29 Apr 2025 17:02:25 -0500 Subject: [PATCH] kinda broke the AI but it's getting better --- ai_test_scene.tscn | 9 ++++++++- assets/spider2.tscn | 1 - scripts/EnemyAttack.gd | 10 ++++------ scripts/EnemyIdle.gd | 3 +-- scripts/EnemyReload.gd | 6 +----- scripts/EnemySearch.gd | 15 +++++---------- scripts/EnemyStates.gd | 27 ++++++++++++++++++--------- scripts/spider.gd | 6 ++---- 8 files changed, 39 insertions(+), 38 deletions(-) diff --git a/ai_test_scene.tscn b/ai_test_scene.tscn index 070fbff..d84b964 100644 --- a/ai_test_scene.tscn +++ b/ai_test_scene.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=15 format=3 uid="uid://cfaydhd6u5bmb"] +[gd_scene load_steps=17 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"] @@ -10,6 +10,8 @@ [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"] [ext_resource type="Material" uid="uid://bb0beroi2p3gd" path="res://assets/materials/FrostedGlass.tres" id="7_t6ubg"] +[ext_resource type="PackedScene" uid="uid://c6bpysq1tjhy4" path="res://vendingmahcine.tscn" id="11_sdike"] +[ext_resource type="PackedScene" uid="uid://uethfe5v66tg" path="res://assets/item_pickup.tscn" id="12_5u3xe"] [sub_resource type="BoxShape3D" id="BoxShape3D_t6ubg"] size = Vector3(92.25, 82.386, 76.6396) @@ -88,3 +90,8 @@ 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) + +[node name="vendingmachine" parent="." instance=ExtResource("11_sdike")] +transform = Transform3D(-0.206085, 0, 0.978534, 0, 1, 0, -0.978534, 0, -0.206085, 6.89547, 0.711414, 0.072493) +item = ExtResource("12_5u3xe") +is_pickup = true diff --git a/assets/spider2.tscn b/assets/spider2.tscn index 2bcb894..fe47a8b 100644 --- a/assets/spider2.tscn +++ b/assets/spider2.tscn @@ -851,7 +851,6 @@ collision_layer = 8 collision_mask = 521 up_direction = Vector3(0.0449994, 0.998987, 0) script = ExtResource("1_7e7fe") -debug_tools = true nav_agent = NodePath("NavigationAgent3D") hit_targets = [NodePath("body/backTarget")] visibility_areas = [NodePath("VisibilityArea")] diff --git a/scripts/EnemyAttack.gd b/scripts/EnemyAttack.gd index 2280243..d74ae33 100644 --- a/scripts/EnemyAttack.gd +++ b/scripts/EnemyAttack.gd @@ -16,17 +16,14 @@ var visibility_timer func Enter(): super() enemy.cache_player_pos() - update_waypoint() - enemy.points_of_interest = [] + clear_point_of_interest() + visibility_timer = time_before_losing_visual enemy.turret_material.emission_enabled = true initial_timer = initial_wait_time alarm_sound.play() -func update_waypoint(): - enemy.nav_agent.set_target_position(move_target()) - func current_target(): if enemy.is_player_visible(): return enemy.character_follow.global_position @@ -43,6 +40,7 @@ func Update(delta): if enemy.ammo <= 4: Transitioned.emit(self,"reload") else: + enemy.player_last_seen = null Transitioned.emit(self,"search") else: visibility_timer = time_before_losing_visual @@ -50,7 +48,7 @@ func Update(delta): if heartbeat > 0: heartbeat -= delta else: - update_waypoint() + update_waypoint_or_idle() #Initial wait time if initial_timer > 0: initial_timer -= delta diff --git a/scripts/EnemyIdle.gd b/scripts/EnemyIdle.gd index dc74e1c..18ef134 100644 --- a/scripts/EnemyIdle.gd +++ b/scripts/EnemyIdle.gd @@ -11,7 +11,6 @@ var scan_time : float const WANDER_AMT = 50 const TURRET_TURN_AMT : float = 90.0 -const TURRET_SCAN_SPEED : float = .5 func randomize_wander(): var x = randf_range(-WANDER_AMT,WANDER_AMT) @@ -49,7 +48,7 @@ func Update(delta: float): func Physics_Update(delta : float): if enemy: #turret transform - enemy.turret_look.rotation = lerp(enemy.turret_look.rotation,enemy.turret_look_next.rotation,delta * TURRET_SCAN_SPEED) + 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() var local_destination = destination - enemy.global_position diff --git a/scripts/EnemyReload.gd b/scripts/EnemyReload.gd index f4f673b..596f97c 100644 --- a/scripts/EnemyReload.gd +++ b/scripts/EnemyReload.gd @@ -20,15 +20,11 @@ func Exit(): enemy.ammo = enemy.max_ammo enemy.servo_single.play() -func update_waypoint(): - #var direction = (player.global_position - enemy.global_position).normalized() - enemy.nav_agent.set_target_position(move_target()) - func Update(delta): if heartbeat > 0: heartbeat -= delta else: - update_waypoint() + update_waypoint_or_idle() if remaining_bullets > 0: if !reload_sound.is_playing(): diff --git a/scripts/EnemySearch.gd b/scripts/EnemySearch.gd index 1c3db9e..5c62299 100644 --- a/scripts/EnemySearch.gd +++ b/scripts/EnemySearch.gd @@ -2,17 +2,16 @@ extends EnemyState class_name EnemySearch var search_timer +var search_target const SEARCH_TIME_MAX : float = 10.0 func Enter(): super() - search_point() search_timer = SEARCH_TIME_MAX func Exit(): - enemy.player_last_seen = null - enemy.points_of_interest = [] + pass func Update(delta: float): super(delta) @@ -24,14 +23,14 @@ func Update(delta: float): attack_on_sight() search_for_suspicious_sounds() - search_point() + update_waypoint_or_idle() if enemy.global_position.distance_to(move_target_adj()) < 1: Transitioned.emit(self,"idle") func Physics_Update(delta : float): #turret transform - enemy.turret_look_next.look_at(move_target()) + #enemy.turret_look_next.look_at(move_target()) enemy.turret_look.rotation = lerp(enemy.turret_look.rotation,enemy.turret_look_next.rotation,delta * turret_speed) var destination = enemy.nav_agent.get_next_path_position() @@ -39,8 +38,4 @@ func Physics_Update(delta : float): var direction = local_destination.normalized() enemy.velocity = direction * move_speed - enemy.global_rotation.y = rotate_to_face2D(enemy,move_target(),delta,turret_speed) - - -func search_point(): - enemy.nav_agent.set_target_position(move_target()) + #enemy.global_rotation.y = rotate_to_face2D(enemy,move_target(),delta,turret_speed) diff --git a/scripts/EnemyStates.gd b/scripts/EnemyStates.gd index 258576a..0b30690 100644 --- a/scripts/EnemyStates.gd +++ b/scripts/EnemyStates.gd @@ -12,17 +12,22 @@ class_name EnemyState func Update(delta): pass +func enemy_has_target(): + if enemy.player_last_seen != null: + return true + if enemy.point_of_interest != null: + return true + return false + func move_target(): if enemy.player_last_seen != null: return enemy.player_last_seen - elif enemy.points_of_interest != null: - var move_point = {"loudness" : 0.0,"point" : Vector3.ZERO} - for point in enemy.points_of_interest: - if point["loudness"] > move_point["loudness"]: - move_point = point - return move_point["point"] - else: - Transitioned.emit(self,"idle") + elif enemy.point_of_interest != null: + return enemy.point_of_interest["point"] + +func update_waypoint_or_idle(): + if enemy_has_target(): + enemy.nav_agent.set_target_position(move_target()) func attack_on_sight(): if can_see: @@ -41,7 +46,8 @@ func move_target_adj(): return Vector3(position.x,enemy.global_position.y,position.z) func search_for_suspicious_sounds(): - if enemy.points_of_interest != [] and enemy.points_of_interest != null: + if enemy.point_of_interest != null: + enemy.player_last_seen = null Transitioned.emit(self,"search") func rotate_to_face2D(object,target,delta,turn_speed): @@ -58,3 +64,6 @@ func rotate_to_face2D(object,target,delta,turn_speed): var target_pos2d = Vector2(target_transformed.x,target_transformed.z) var direction = (pos2d - target_pos2d) return lerp_angle(object.rotation.y,atan2(direction.x,direction.y),delta * turn_speed) + +func clear_point_of_interest(): + enemy.point_of_interest = null diff --git a/scripts/spider.gd b/scripts/spider.gd index 2b00690..e96091f 100644 --- a/scripts/spider.gd +++ b/scripts/spider.gd @@ -81,7 +81,7 @@ var ammo var line_of_sight_target var player_last_seen -var points_of_interest = [] +var point_of_interest func _ready(): SignalBus.suspicious_sound.connect(add_point_of_interest) @@ -163,13 +163,11 @@ func debug_marker(): debug_tracker.visible = false func add_point_of_interest(point,loudness,max_distance): - print("SHOT HEARD") var distance_to_point = global_position.distance_to(point) if distance_to_point <= max_distance: var perceived_loudness = 1/distance_to_point * loudness var add_point = {"point" : point, "loudness" : perceived_loudness} - points_of_interest.append(add_point) - print("POINTS OF INTEREST : ",points_of_interest) + point_of_interest = add_point func save():