예제 #1
0
    //执行状态转换
    public void PerformTransition(EnemyTransition trans)
    {
        if (trans == EnemyTransition.NullTransition)
        {
            Debug.LogError("转换条件不能为空");
            return;
        }

        EnemyStateID nextId = currentState.GetOutputState(trans);

        if (nextId == EnemyStateID.NullStateID)
        {
            Debug.LogError("转换的状态不能为空");
            return;
        }

        foreach (EnemyState state in states)
        {
            if (state.ID != nextId)
            {
                continue;
            }

            currentState.DoBeforeLeaving();  //转换前执行现有状态的DoBeforeLeaving方法
            currentState = state;
            currentState.DoBeforeEntering(); //转换完成,执行转换后状态的DoBeforeEntering方法
            return;
        }
    }
예제 #2
0
        public void PerformTrnsition(EnemyTransition trans)
        {
            if (trans == EnemyTransition.NullTansition)
            {
                Debug.LogError(GetType() + "/PerformTrnsition()/ trans is NullTansition ");
                return;
            }

            EnemyStateID nextStateId = mCurState.GetOutputState(trans);

            if (nextStateId == EnemyStateID.NullState)
            {
                Debug.LogError(GetType() + "/PerformTrnsition()/ stateId is NullState ");
                return;
            }

            foreach (IEnemyState s in mStateLst)
            {
                if (s.StateID == nextStateId)
                {
                    mCurState.DoBeforeLeaving();
                    mCurState = s;
                    mCurState.DoBeforeEntering();
                }
            }
        }
예제 #3
0
    public void PerformTransition(EnemyTransition trans)
    {
        if (trans == EnemyTransition.NullTansition)
        {
            Debug.LogError("要执行的转换条件不能为Null"); return;
        }

        EnemyStateID nextStateID = mCurrentState.GetOutputState(trans);

        if (nextStateID == EnemyStateID.NullState)
        {
            Debug.LogError("在转换条件 [" + trans + " ]下,没有对应的转换状态"); return;
        }

        foreach (IEnemyState s in mStates)
        {
            if (s.stateID == nextStateID)
            {
                mCurrentState.DoBeforeEntering();
                mCurrentState = s;
                mCurrentState.DoBeforeEntering();
                return;
            }
        }
    }
예제 #4
0
    /// <summary>
    /// 执行转换状态
    /// </summary>
    /// <param name="trans"></param>
    public void PerformTranstion(EnemyTransition trans)
    {
        if (trans == EnemyTransition.NullTransition)
        {
            Debug.LogError("要执行的转换条件为空!");
            return;
        }
        EnemyStateID nextStateID = mCurrentState.GetOutPutStateID(trans); //得到该转换条件下的下个状态ID

        if (nextStateID == EnemyStateID.NullStateID)
        {
            Debug.LogError("在转换条件:" + "[" + trans + "]" + "没有对应的转换状态!");
            return;
        }
        mCurrentStateID = nextStateID;//更新当前状态ID
        foreach (IEnemyState s in mStates)
        {
            if (s.stateID == nextStateID)
            {
                mCurrentState.DoBeforeLeaving();
                mCurrentState = s;              //更新当前状态
                mCurrentState.DoBeforeEntering();
                break;
            }
        }
    }
예제 #5
0
    public void performTransition(EnemyTransition trans)
    {
        if (trans == EnemyTransition.NullTransition)
        {
            Debug.LogError("trans is null");
            return;
        }
        EnemyStateID nextId = mCurrState.getOutPutState(trans);

        if (nextId == EnemyStateID.NullState)
        {
            Debug.LogError("no state with trans");
            return;
        }
        foreach (IEnemyState s in mStates)
        {
            if (s.StateID == nextId)
            {
                mCurrState.doBeforeLeaving();
                mCurrState = s;
                mCurrState.doBeforeEntering();
                return;
            }
        }
    }
예제 #6
0
    public void PerformnTransition(EnemyTransition trans)
    {
        if (trans == EnemyTransition.NullTransition)
        {
            Debug.Log("PerformnTransition 无法执行 NullTransition ");
            return;
        }

        EnemyStateID id = CurrentEnemyState.GetIDByTransition(trans);

        if (id == EnemyStateID.NullState)
        {
            Debug.Log("PerformnTransition 无法执行 NullState ");
            return;
        }

        foreach (AbsEnemyState s in statesList)
        {
            if (s.StateID == id)
            {
                CurrentEnemyState.DoBeforeLeaving();
                CurrentEnemyState = s;
                CurrentEnemyState.DoBeforeEntering();
            }
        }
    }
예제 #7
0
    public void AddTransition(EnemyTransition trans, EnemyStateID id)
    {
        // Check if anyone of the args is invalid
        if (trans == EnemyTransition.NullTransition)
        {
            Debug.LogError("EnemyFSMState ERROR: NullTransition is not allowed for a real transition");
            return;
        }

        if (id == EnemyStateID.NullStateID)
        {
            Debug.LogError("EnemyFSMState ERROR: NullStateID is not allowed for a real ID");
            return;
        }

        // Since this is a Deterministic FSM,
        //   check if the current transition was already inside the map
        if (map.ContainsKey(trans))
        {
            Debug.LogError("EnemyFSMState ERROR: State " + stateID.ToString() + " already has transition " + trans.ToString() +
                           "Impossible to assign to another state");
            return;
        }

        map.Add(trans, id);
    }
예제 #8
0
    public void PerformTransition(EnemyTransition trans)
    {
        if (trans == EnemyTransition.NullTransition)
        {
            Debug.LogError("要执行的转换条件为空");
            return;
        }
        //获取要转换为的状态
        EnemyStateID nextStateID = mCurrentState.GetOutPutState(trans);

        if (nextStateID == EnemyStateID.NullState)
        {
            Debug.Log("要转换的状态ID[" + nextStateID + "]为空");
            return;
        }
        foreach (IEnemyState state in mStates)
        {
            //如果在集合中找到转换为的状态
            if (state.StateID == nextStateID)
            {
                //执行退出当前状态之前的操作
                mCurrentState.DoBeforeLeaving();
                //将当前状态变为将转换的状态
                mCurrentState = state;
                //执行进入当前状态之前的操作
                mCurrentState.DoBeforeEntering();
                break;
            }
        }
    }
예제 #9
0
 /// <summary>
 /// 下个要转换到的状态
 /// </summary>
 /// <param name="trans"></param>
 /// <returns></returns>
 public EnemyStateID GetOutPutStateID(EnemyTransition trans)
 {
     if (mMap.ContainsKey(trans))
     {
         return(mMap[trans]);
     }
     return(EnemyStateID.NullStateID);
 }
예제 #10
0
 public void DeleteTransition(EnemyTransition trans)
 {
     if (mMap.ContainsKey(trans) == false)
     {
         return;
     }
     mMap.Remove(trans);
 }
예제 #11
0
 public void DeleteTransition(EnemyTransition trans, EnemyStateID id)
 {
     if (!mMap.ContainsKey(trans))
     {
         Debug.LogError("删除转换条件的时候,转换条件: " + trans + " 不存在"); return;
     }
     mMap.Remove(trans);
 }
예제 #12
0
 public void DeleteTransition(EnemyTransition transition)
 {
     if (!m_Map.ContainsKey(transition))
     {
         Debug.LogError("删除转换条件失败,不存在该条件 : " + transition.ToString()); return;
     }
     m_Map.Remove(transition);
 }
 public void DeleteTransition(EnemyTransition trans)
 {
     if (mMap.ContainsKey(trans) == false)
     {
         Debug.LogError("删除转换条件的时候, 转换条件:[" + trans + "]不存在"); return;
     }
     mMap.Remove(trans);
 }
예제 #14
0
 /** 删除转换条件 */
 public void DeleteTransition(EnemyTransition trans)
 {
     if (mMap.ContainsKey(trans) == false)
     {
         Debug.LogError("EnemyState Error: [删除] 转换条件" + trans + "不存在"); return;
     }
     mMap.Remove(trans);
 }
예제 #15
0
 /** 根据转换条件获取状态ID */
 public EnemyStateID GetOutPutState(EnemyTransition trans)
 {
     if (mMap.ContainsKey(trans) == false)
     {
         Debug.LogError("EnemyState Error: [获取] 转换条件" + trans + "不存在");
         return(EnemyStateID.NullState);
     }
     return(mMap[trans]);
 }
예제 #16
0
 public EnemyStateID GetOutputState(EnemyTransition trans)
 {
     // Check if the map has this transition
     if (map.ContainsKey(trans))
     {
         return(map[trans]);
     }
     return(EnemyStateID.NullStateID);
 }
예제 #17
0
 public EnemyStateID getOutPutState(EnemyTransition trans)
 {
     if (!map.ContainsKey(trans))
     {
         Debug.LogError("can't find this trans");
         return(EnemyStateID.NullState);
     }
     return(map[trans]);
 }
예제 #18
0
 public void deleteTransition(EnemyTransition trans)
 {
     if (!map.ContainsKey(trans))
     {
         Debug.LogError("trans not exist");
         return;
     }
     map.Remove(trans);
 }
예제 #19
0
        public EnemyStateID GetOutputState(EnemyTransition trans)
        {
            if (mMap.ContainsKey(trans) == false)
            {
                return(EnemyStateID.NullState);
            }

            return(mMap[trans]);
        }
 public void DeleteTransition(EnemyTransition trans, EnemyStateID id)
 {
     if (!map.ContainsKey(trans))
     {
         Debug.Log("EnemyState StateID:" + StateID + " Error :" + trans + "不存在,无法删除");
         return;
     }
     map.Remove(trans);
 }
예제 #21
0
 /// <summary>
 /// 根据指定的转换条件获取状态ID
 /// </summary>
 /// <param name="transition"></param>
 /// <returns></returns>
 public EnemyStateID GetOutPutState(EnemyTransition transition)
 {
     if (!m_Map.ContainsKey(transition))
     {
         Debug.LogError("获取转换条件失败,不存在该条件 : " + transition.ToString());
         return(EnemyStateID.NullState);
     }
     return(m_Map[transition]);
 }
예제 #22
0
 //删除状态转换键值对
 public void DeleteTransition(EnemyTransition trans)
 {
     if (map.ContainsKey(trans))
     {
         map.Remove(trans);
         return;
     }
     Debug.LogError("转换条件不存在");
 }
    public EnemyStateID GetIDByTransition(EnemyTransition trans)
    {
        EnemyStateID id = EnemyStateID.NullState;

        if (!map.TryGetValue(trans, out id))
        {
            Debug.Log("EnemyState StateID:" + StateID + " Error :" + trans + "不存在,无法查找");
        }
        return(id);
    }
예제 #24
0
 //判断当前转换条件下是否能进行状态的转换
 public EnemyStateID GetOutPutState(EnemyTransition trans)
 {
     if (mMap.ContainsKey(trans) == false)//不能进行状态转换
     {
         return(EnemyStateID.NullState);
     }
     else//需要进行状态转换
     {
         return(mMap[trans]);
     }
 }
예제 #25
0
 public void DeleteTransition(EnemyTransition trans)
 {
     if (map.ContainsKey(trans) == false)
     {
         Debug.LogError("ɾ��ת������������" + trans);
     }
     else
     {
         map.Remove(trans);
     }
 }
예제 #26
0
    public EnemyStateID GetOutPutState(EnemyTransition trans)
    {
        if (!mMap.ContainsKey(trans))
        {
            Debug.LogError(":[" + trans + "]不存在!");
            return(EnemyStateID.NullState);
        }


        return(mMap[trans]);
    }
예제 #27
0
    public EnemyStateID GetOutputState(EnemyTransition trans)
    {
        EnemyStateID id = EnemyStateID.NullState;

        if (mMap.ContainsKey(trans))
        {
            //mMap.TryGetValue(trans, out id);
            id = mMap[trans];
        }
        return(id);
    }
예제 #28
0
 public EnemyStateID GetOutPutState(EnemyTransition trans)
 {
     if (map.ContainsKey(trans) == false)
     {
         //Debug.LogError("ɾ��ת������������" + trans);
         return(EnemyStateID.NullState);
     }
     else
     {
         return(map[trans]);
     }
 }
 public void AddTransition(EnemyTransition trans, EnemyStateID id)
 {
     if (trans == EnemyTransition.NullTansition)
     {
         Debug.LogError("EnemyState Error: trans不能为空"); return;
     }
     if (id == EnemyStateID.NullState)
     {
         Debug.LogError("EnemyState Error: 状态ID不能为空"); return;
     }
     if (mMap.ContainsKey(trans))
     {
         Debug.LogError("EnemyState Error: " + trans + " 已经添加上了"); return;
     }
     mMap.Add(trans, id);
 }
예제 #30
0
 public void AddTransition(EnemyTransition trans, EnemyStateID id)
 {
     if (trans == EnemyTransition.NullTansition)
     {
         return;
     }
     if (id == EnemyStateID.NullState)
     {
         return;
     }
     if (mMap.ContainsKey(trans))
     {
         return;
     }
     mMap.Add(trans, id);
 }