/// <summary>
 /// Perform sense link tasks
 /// </summary>
 private void DoSenseLinkWork()
 {
     if (blackboard.Get <bool>(Constants.InPursuit))
     {
         NotifyLinksWithinRange();
     }
     else
     {
         if (blackboard.Get <bool>(Constants.CheckSenseLinks))
         {
             blackboard.Set(Constants.CheckSenseLinks, false);
             var comrade = blackboard.Get <HostileBehavior>(Constants.LastComradeLinkWrite);
             lock (senseLinks)
             {
                 SenseLink link = blackboard.Get <SenseLink>(Constants.SenseLink);
                 blackboard.Set(Constants.LastKnownPosition, link.LastKnownTargetPosition);
                 blackboard.Set(Constants.CheckPosition, true);
             }
         }
     }
 }
    /// <summary>
    /// Instantiate links between all enemy game objects
    /// </summary>
    void Start()
    {
        enemyDictionary = new Dictionary <HashSet <string>, SenseLink>(HashSet <string> .CreateSetComparer());
        var enemies = GetComponentsInChildren <HostileBehavior>();

        foreach (var enemy in enemies)
        {
            foreach (var e in enemies)
            {
                if (enemy != e)
                {
                    var set  = new HashSet <string>(new[] { e.name, enemy.name });
                    var link = new SenseLink();
                    if (!enemyDictionary.ContainsKey(set))
                    {
                        enemyDictionary.Add(set, link);
                        e.senseLinks.Add(enemy, link);
                        enemy.senseLinks.Add(e, link);
                    }
                }
            }
        }
    }