they talk to each other now

This commit is contained in:
derek
2025-05-02 15:14:42 -05:00
parent db07777fca
commit 083f1eec83
9 changed files with 1200 additions and 11 deletions

File diff suppressed because one or more lines are too long

View File

@@ -12,7 +12,7 @@ config_version=5
config/name="First Person Test" config/name="First Person Test"
config/tags=PackedStringArray("fps") config/tags=PackedStringArray("fps")
run/main_scene="uid://f7e0v1r6ra6c" run/main_scene="uid://cfaydhd6u5bmb"
config/features=PackedStringArray("4.4", "Forward Plus") config/features=PackedStringArray("4.4", "Forward Plus")
config/icon="uid://6svuq1l83al5" config/icon="uid://6svuq1l83al5"

View File

@@ -28,7 +28,7 @@ script = ExtResource("1_8cuhv")
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -31.749, 0, 44.3496) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -31.749, 0, 44.3496)
script = ExtResource("5_ngmqi") script = ExtResource("5_ngmqi")
room_lockdown = true room_lockdown = true
number_of_enemies = 25 start_enemies = 50
number_of_drops = 30 number_of_drops = 30
[node name="EnemySpawner" parent="Level" instance=ExtResource("3_q77vb")] [node name="EnemySpawner" parent="Level" instance=ExtResource("3_q77vb")]

View File

@@ -11,6 +11,7 @@ var shot_timer = 0.0
func Enter(): func Enter():
initial_timer = initial_wait_time initial_timer = initial_wait_time
alert_sound.play() alert_sound.play()
clear_points_of_interest()
func Physics_Update(delta): func Physics_Update(delta):
if enemy.is_player_visible(): if enemy.is_player_visible():
@@ -57,6 +58,7 @@ func attack():
func fire(barrel): func fire(barrel):
enemy.ammo -= 1 enemy.ammo -= 1
SignalBus.emit_signal("engaging_target",enemy,enemy.player_last_seen)
var instance_bullet = enemy.bullet.instantiate() var instance_bullet = enemy.bullet.instantiate()
instance_bullet.position = barrel.global_position instance_bullet.position = barrel.global_position
instance_bullet.transform.basis = barrel.global_transform.basis instance_bullet.transform.basis = barrel.global_transform.basis

View File

@@ -11,6 +11,7 @@ var scan_direction = scan_cone_angle/2
func Enter(): func Enter():
scan_timer = scan_time scan_timer = scan_time
get_new_wander_point() get_new_wander_point()
clear_points_of_interest()
func Update(delta): func Update(delta):
attack_on_sight() attack_on_sight()

View File

@@ -32,8 +32,13 @@ func Physics_Update(delta):
turret_scan(Vector3(0,scan_direction,0),delta) turret_scan(Vector3(0,scan_direction,0),delta)
func get_new_point_of_interest(): func get_new_point_of_interest():
if enemy.player_last_seen != null and enemy.player_last_seen != move_target: if enemy.player_last_seen != null:
move_target = enemy.player_last_seen move_target = enemy.player_last_seen
enemy.player_last_seen = null
enemy.nav_agent.set_target_position(move_target)
elif enemy.points_of_interest.size() > 0:
var point_of_interest = enemy.points_of_interest.pop_back()
move_target = point_of_interest["point"]
enemy.nav_agent.set_target_position(move_target) enemy.nav_agent.set_target_position(move_target)
else: else:
Transitioned.emit(self,"idle") Transitioned.emit(self,"idle")

View File

@@ -115,6 +115,8 @@ func turret_look3D(delta):
func turret_scan_look(target,scan_direction,delta): func turret_scan_look(target,scan_direction,delta):
enemy.turret_look.global_rotation.y = rotate_to_face2D(enemy.turret_look,target,scan_direction,delta,turret_speed) enemy.turret_look.global_rotation.y = rotate_to_face2D(enemy.turret_look,target,scan_direction,delta,turret_speed)
func clear_points_of_interest():
enemy.points_of_interest = []
func debug_marker(target_pos): func debug_marker(target_pos):
if enemy.debug_tools: if enemy.debug_tools:

View File

@@ -21,3 +21,4 @@ signal weapon_list_changed()
##ENEMY ##ENEMY
signal suspicious_sound(position,loudness,max_distance) signal suspicious_sound(position,loudness,max_distance)
signal engaging_target(enemy,target_position)

View File

@@ -9,6 +9,7 @@ var last_enemy : bool = false
@export var start_health = 3 @export var start_health = 3
@export var max_ammo = 10 @export var max_ammo = 10
@export var loot_amount = 2 @export var loot_amount = 2
@export var join_ally_max_distance = 10
@export var nav_agent : NavigationAgent3D @export var nav_agent : NavigationAgent3D
@export var hit_targets : Array[Area3D] @export var hit_targets : Array[Area3D]
@export var visibility_areas : Array[Area3D] @export var visibility_areas : Array[Area3D]
@@ -78,10 +79,11 @@ var ammo
var line_of_sight_target var line_of_sight_target
var player_last_seen var player_last_seen
var point_of_interest var points_of_interest = []
func _ready(): func _ready():
SignalBus.suspicious_sound.connect(add_point_of_interest) SignalBus.suspicious_sound.connect(add_point_of_interest)
SignalBus.engaging_target.connect(investigate_nearby_combat)
health = start_health health = start_health
ammo = max_ammo ammo = max_ammo
player = level_control.player player = level_control.player
@@ -151,12 +153,29 @@ func cache_player_pos():
player_last_seen = line_of_sight_ray.get_collision_point() player_last_seen = line_of_sight_ray.get_collision_point()
func add_point_of_interest(point,loudness,max_distance): func add_point_of_interest(point,loudness,max_distance):
var distance_to_point = global_position.distance_to(point) var current_state_name = state_machine.current_state.name.to_lower()
if distance_to_point <= max_distance: if current_state_name == "idle" or current_state_name == "search":
var perceived_loudness = 1/distance_to_point * loudness var distance_to_point = global_position.distance_to(point)
var add_point = {"point" : point, "loudness" : perceived_loudness} if distance_to_point <= max_distance:
point_of_interest = add_point var perceived_loudness = 1/distance_to_point * loudness
var add_point = {"point" : point, "loudness" : perceived_loudness}
points_of_interest.append(add_point)
if current_state_name == "idle":
change_state_to("search")
if current_state_name == "search":
pass
#get new waypoint
#state_machine.current_state.investigate_points_of_interest()
func investigate_nearby_combat(ally,target):
if ally != self:
var distance_to_ally = global_position.distance_to(ally.global_position)
if distance_to_ally < join_ally_max_distance:
player_last_seen = target
if state_machine.current_state.name.to_lower() == "idle":
change_state_to("search")
func save(): func save():
var save_dict = { var save_dict = {