diff --git a/Scripts/Enemy.cs b/Scripts/Enemy.cs index 911e6343..67ea24e7 100644 --- a/Scripts/Enemy.cs +++ b/Scripts/Enemy.cs @@ -16,6 +16,8 @@ public partial class Enemy : CharacterBody2D [Export] public float PlayerDisengageRange = 500f; + [Export] public float AlarmReactRange = 200f; + [Export] public Weapon EquippedWeapon; private float _currentHealth = 0f; @@ -36,6 +38,7 @@ public partial class Enemy : CharacterBody2D [Export] private bool _navigationEnabled = false; + private AlarmManager _alarmManager; public bool NavigationEnabled { get => _navigationEnabled && _navigationAgent != null; @@ -48,8 +51,22 @@ public partial class Enemy : CharacterBody2D _currentHealth = Health; _navigationAgent = GetNodeOrNull("NavigationAgent2D"); + + _alarmManager = GetNode("/root/GameScene/AlarmManager"); + + _alarmManager.AlarmEnabled += AlarmManagerOnAlarmEnabled; } - + + private void AlarmManagerOnAlarmEnabled(Vector2 location) + { + if (NavigationEnabled && location.DistanceTo(this.GlobalPosition) <= AlarmReactRange) + { + GD.Print($"Enemy {Name} alerted"); + this._currentState = EnemyState.Alert; + _lastPlayerPosition = location; + } + } + // Called every frame. 'delta' is the elapsed time since the previous frame. public override void _Process(double delta) {