コード例 #1
0
 public void RemoveAfforTriObserver(AffordanceTrigger at)
 {
     if (!afforTriObj.Contains(at))
     {
         return;
     }
     afforTriObj.Remove(at);
 }
コード例 #2
0
 public void AddAfforTriObserver(AffordanceTrigger at)
 {
     if (afforTriObj.Contains(at))
     {
         return;
     }
     afforTriObj.Add(at);
 }
コード例 #3
0
 public void SetAfforTriUsedForFalse()
 {
     if (regAfforTriObj == null)
     {
         return;
     }
     regAfforTriObj.SetIsUsed(false);
     regAfforTriObj = null;
 }
コード例 #4
0
    //リストにして優先度の比較関数でソートして、
    //優先度が一番高いものだけでリストを作って、
    //距離でソートして一番近いものを選ぶ?
    public void RegisterAfforTri()
    {
        if (regAfforTriObj != null)
        {
            return;
        }

        SortedList <float, AffordanceTrigger> dis_affor_map = new SortedList <float, AffordanceTrigger>();

        foreach (AffordanceTrigger obj in afforTriObj)
        {
            bool exist = false;
            for (int i = 0; i < canUseProperty.Length; i++)
            {
                exist = obj.IsToMatchProperty(canUseProperty[i]);
                if (exist)
                {
                    break;
                }
            }
            if (!exist)
            {
                continue;         //属性が違うなら
            }
            bool isUsed = obj.IsUsed();
            if (isUsed)
            {
                continue;         //使われているなら
            }
            float distance = (obj.GetDestination() - transform.position).magnitude;
            dis_affor_map[distance] = obj;
        }

        //1個もないなら終了
        if (dis_affor_map.Count == 0)
        {
            return;
        }

        regAfforTriObj = dis_affor_map.Values[0];
        regAfforTriObj.SetIsUsed(true);
        regAfforTriObj.SetEnemy(gameObject);
    }