public void RemoveAfforTriObserver(AffordanceTrigger at) { if (!afforTriObj.Contains(at)) { return; } afforTriObj.Remove(at); }
public void AddAfforTriObserver(AffordanceTrigger at) { if (afforTriObj.Contains(at)) { return; } afforTriObj.Add(at); }
public void SetAfforTriUsedForFalse() { if (regAfforTriObj == null) { return; } regAfforTriObj.SetIsUsed(false); regAfforTriObj = null; }
//リストにして優先度の比較関数でソートして、 //優先度が一番高いものだけでリストを作って、 //距離でソートして一番近いものを選ぶ? 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); }