/// <summary> /// 條件檢查 /// </summary> public void CheckCondition() { int change = -1; // 取得當前狀態 ID IMonsterStateBase ai = (IMonsterStateBase)machine.GetCurrestState; int aiID = ai.GetID; // 遍尋所有 var e = monsterCondition.GetEnumerator(); while (e.MoveNext()) { IStateCondition condition = e.Current.Value; int id = condition.CurrestStateID; // 該條件得當前狀態 ID與當前狀態 ID相同的話 if (id == aiID) { change = condition.CheckCondition(); } if (change > -1) { ChangeState(change); break; } } }
public MonsterStateMachine LoadData(string resourcesID) { // MonsterStateMachine monsterStateMachine = new MonsterStateMachine(); // 取得 json資料 TextAsset text = Resources.Load <TextAsset>( string.Format("1.MonsterAI/1.1.Json/{0}", resourcesID)); // json資料轉換 JsonDataList jsonData = JsonUtility.FromJson <JsonDataList>(text.text); // 狀態條件 for (int i = jsonData.dataBases.Count - 1; i > -1; i--) { if (typeof(JsonCondition).IsInstanceOfType(jsonData.dataBases[i])) { JsonCondition json = (JsonCondition)jsonData.dataBases[i]; Type type = Type.GetType(json.createType); var ob = Activator.CreateInstance(type); IStateCondition condition = (IStateCondition)ob; condition.SetData(json); condition.SetMonsterID = monsterID; monsterStateMachine.SetCondition(condition); jsonData.dataBases.RemoveAt(i); } } // 狀態 for (int i = 0; i < jsonData.dataBases.Count; i++) { // if (typeof(JsonMonsterAI).IsInstanceOfType(jsonData.dataBases[i])) { JsonMonsterAI json = (JsonMonsterAI)jsonData.dataBases[i]; Type type = Type.GetType(json.createType); MonsterStateBase monsterState = (MonsterStateBase)Activator.CreateInstance(type); monsterState.SetData(json, monsterID); monsterStateMachine.SetState(json, monsterState); } } monsterStateMachine.StartAI(); return(monsterStateMachine); }
public DeviceService(Manager man, IStateCondition stateCondition) : base(man) { this.stateCondition = stateCondition; }
/// <summary> /// 添加狀態條件 /// </summary> public void SetCondition(IStateCondition condition) { monsterCondition.Add(condition.GetID, condition); }