/// <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;
                }
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
 public DeviceService(Manager man, IStateCondition stateCondition)
     : base(man)
 {
     this.stateCondition = stateCondition;
 }
 /// <summary>
 /// 添加狀態條件
 /// </summary>
 public void SetCondition(IStateCondition condition)
 {
     monsterCondition.Add(condition.GetID, condition);
 }
Ejemplo n.º 5
0
 public DeviceService(Manager man, IStateCondition stateCondition) : base(man)
 {
     this.stateCondition = stateCondition;
 }