Example #1
0
 public void Hear(ref GeneratedAlert alert)
 {
     for (int i = 0; i < _listeners.Length; i++)
     {
         _listeners[i].OnAlert(ref alert);
     }
 }
Example #2
0
 /// <summary>
 /// Registers an alert. Flees if hostile and is told to do so.
 /// </summary>
 public void OnAlert(GeneratedAlert alert)
 {
     if (alert.IsHostile && FleeOnHostileAlerts && isActiveAndEnabled)
     {
         flee();
     }
 }
Example #3
0
        /// <summary>
        /// Registers a new alert and returns its ID.
        /// </summary>
        public static void Broadcast(Vector3 position, float range, bool isHostile, Actor actor, bool isDirect)
        {
            var alert = new GeneratedAlert(position, range, isHostile, actor, isDirect);
            var count = Physics.OverlapSphereNonAlloc(position, range, _colliders, 0x1, QueryTriggerInteraction.Ignore);

            for (int i = 0; i < count; i++)
            {
                var listener = AIListeners.Get(_colliders[i].gameObject);

                if (listener != null && listener.isActiveAndEnabled && Vector3.Distance(listener.transform.position, position) < range * listener.Hearing)
                {
                    listener.SendMessage("OnAlert", alert, SendMessageOptions.DontRequireReceiver);
                }
            }
        }
Example #4
0
        /// <summary>
        /// Broadcasts an alert to all AIListener components in the area surrounding it.
        /// </summary>
        public static void Broadcast(Vector3 position, float range, bool isHostile, Actor actor, bool isDirect)
        {
            if (range <= float.Epsilon)
            {
                return;
            }

            var alert = new GeneratedAlert(position, range, isHostile, actor, isDirect);
            var count = Physics.OverlapSphereNonAlloc(position, range, Util.Colliders, Layers.Character, QueryTriggerInteraction.Ignore);

            for (int i = 0; i < count; i++)
            {
                var listener = AIListeners.Get(Util.Colliders[i].gameObject);

                if (listener != null && listener.isActiveAndEnabled && Vector3.Distance(listener.transform.position, position) < range * listener.Hearing)
                {
                    listener.Hear(ref alert);
                }
            }
        }
Example #5
0
        /// <summary>
        /// Notified by an alert system of an alert.
        /// </summary>
        public void OnAlert(GeneratedAlert alert)
        {
            if (alert.Actor != null && alert.Actor.Side != Actor.Side)
            {
                if (Threat == null)
                {
                    SetUnseenThreat(alert.IsDirect, alert.Actor, alert.Position, null);
                }
                else if (alert.Actor == Threat && !CanSeeTheThreat)
                {
                    SetUnseenThreat(alert.IsDirect, alert.Actor, alert.Position, Threat.Cover);
                }
                else if (Time.timeSinceLevelLoad - LastSeenThreatTime > 3)
                {
                    SetUnseenThreat(alert.IsDirect, alert.Actor, alert.Position, alert.IsDirect ? alert.Actor.Cover : null);
                }

                if (!alert.IsHostile && !IsScared && !IsAlerted)
                {
                    setState(CivilianState.follow);
                }
            }
        }
Example #6
0
 /// <summary>
 /// Registers a new alert and returns its ID.
 /// </summary>
 public static int Register(Vector3 position, float range)
 {
     _alerts[++_latest] = new GeneratedAlert(position, range);
     return(_latest);
 }