diff --git a/scripts/EnemyAttack.gd b/scripts/EnemyAttack.gd index 7a925da..2280243 100644 --- a/scripts/EnemyAttack.gd +++ b/scripts/EnemyAttack.gd @@ -16,10 +16,12 @@ var visibility_timer func Enter(): super() enemy.cache_player_pos() - visibility_timer = time_before_losing_visual update_waypoint() + enemy.points_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(): diff --git a/scripts/EnemyIdle.gd b/scripts/EnemyIdle.gd index 9e8b685..dc74e1c 100644 --- a/scripts/EnemyIdle.gd +++ b/scripts/EnemyIdle.gd @@ -34,6 +34,7 @@ func Update(delta: float): super(delta) attack_on_sight() + search_for_suspicious_sounds() if wander_time > 0: wander_time -= delta diff --git a/scripts/EnemySearch.gd b/scripts/EnemySearch.gd index 459bd36..1c3db9e 100644 --- a/scripts/EnemySearch.gd +++ b/scripts/EnemySearch.gd @@ -10,6 +10,10 @@ func Enter(): search_point() search_timer = SEARCH_TIME_MAX +func Exit(): + enemy.player_last_seen = null + enemy.points_of_interest = [] + func Update(delta: float): super(delta) @@ -19,6 +23,7 @@ func Update(delta: float): Transitioned.emit(self,"idle") attack_on_sight() + search_for_suspicious_sounds() search_point() if enemy.global_position.distance_to(move_target_adj()) < 1: diff --git a/scripts/EnemyStates.gd b/scripts/EnemyStates.gd index 17d2d39..258576a 100644 --- a/scripts/EnemyStates.gd +++ b/scripts/EnemyStates.gd @@ -40,6 +40,10 @@ func move_target_adj(): var position = move_target() 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: + Transitioned.emit(self,"search") + func rotate_to_face2D(object,target,delta,turn_speed): #to allow both nodes and positions to be passed to this function, test the target and use Vector3 coords var target_transformed diff --git a/scripts/signal_bus.gd b/scripts/signal_bus.gd index 859f650..3093fc1 100644 --- a/scripts/signal_bus.gd +++ b/scripts/signal_bus.gd @@ -18,3 +18,6 @@ signal king_killed() signal weapon_list_changed() ## LEVEL + +##ENEMY +signal suspicious_sound(position,loudness,max_distance) diff --git a/scripts/spider.gd b/scripts/spider.gd index e85bacb..2b00690 100644 --- a/scripts/spider.gd +++ b/scripts/spider.gd @@ -81,9 +81,10 @@ var ammo var line_of_sight_target var player_last_seen -var points_of_interest +var points_of_interest = [] func _ready(): + SignalBus.suspicious_sound.connect(add_point_of_interest) health = start_health ammo = max_ammo player = level_control.player @@ -161,6 +162,16 @@ func debug_marker(): else: 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) + + func save(): var save_dict = { "filename" : get_scene_file_path(), diff --git a/scripts/weapon_resource.gd b/scripts/weapon_resource.gd index 485b0e2..461b3c9 100644 --- a/scripts/weapon_resource.gd +++ b/scripts/weapon_resource.gd @@ -20,6 +20,8 @@ class_name weapon_resource @export var smoke_enabled : bool = false @export var bullet_force_mod = 5.0 @export var bullet_speed = 600 +@export var decibels_of_gunfire_sound = 160.0 +@export var max_distance_heard = 100 #in meters @export_group("Gun Assets") @export var casing : Resource @export var mag : Resource diff --git a/scripts/weapon_uberscript.gd b/scripts/weapon_uberscript.gd index 4fc1665..0c1430e 100644 --- a/scripts/weapon_uberscript.gd +++ b/scripts/weapon_uberscript.gd @@ -289,6 +289,7 @@ func projectile_initialize(): func bullet_fire(): SignalBus.emit_signal("shot_fired",weapon_info.crosshair_jump_amount) + SignalBus.emit_signal("suspicious_sound",global_position,weapon_info.decibels_of_gunfire_sound,weapon_info.max_distance_heard) audio_fire.play() var bullet_spawn = projectile_initialize() get_tree().current_scene.add_child(bullet_spawn)