예제 #1
0
 public virtual void InitWithBehavior(UNBehaviorType bType,
                                      int priority = 0,
                                      UNBehaviorStateType bState = UNBehaviorStateType.Wait,
                                      UNBehaviorChangeStateCallBack cbBeforeBehaviorChange = null,
                                      UNBehaviorChangeStateCallBack cbAfterBehaviorChange  = null)
 {
     Init();
     AddWaitBehavior(bType, priority, bState, cbBeforeBehaviorChange, cbAfterBehaviorChange);
 }
예제 #2
0
 public void AddWaitBehavior(UNBehaviorType bType,
                             int priority = 0,
                             UNBehaviorStateType bState = UNBehaviorStateType.Wait,
                             UNBehaviorChangeStateCallBack cbBeforeChange = null,
                             UNBehaviorChangeStateCallBack cbAfterChange  = null)
 {
     m_cbsBeforeBehaviorChange.Add(cbBeforeChange);
     m_cbsAfterBehaviorChange.Add(cbAfterChange);
     AddWaitBehavior(UNBehavior.New(bType, priority, bState, m_cbsBeforeBehaviorChange, m_cbsAfterBehaviorChange));
 }
예제 #3
0
    public static UNBehavior New(UNBehaviorType bType,
                                 int priority = 0,
                                 UNBehaviorStateType bState = UNBehaviorStateType.Wait,
                                 UNList <UNBehaviorChangeStateCallBack> cbsBeforeChange = null,
                                 UNList <UNBehaviorChangeStateCallBack> cbsAfterChange  = null)
    {
        var obj = New();

        obj.ResetToBehavior(bType, priority, bState, cbsBeforeChange, cbsAfterChange);
        return(obj);
    }
예제 #4
0
    public void ResetToBehavior(UNBehaviorType bType,
                                int priority = 0,
                                UNBehaviorStateType bState = UNBehaviorStateType.Wait,
                                UNList <UNBehaviorChangeStateCallBack> cbsBeforeChange = null,
                                UNList <UNBehaviorChangeStateCallBack> cbsAfterChange  = null)
    {
        m_type            = bType;
        m_priority        = priority;
        m_curState        = bState;
        m_cbsBeforeChange = cbsBeforeChange;
        m_cbsAfterChange  = cbsAfterChange;

        Init();
    }
예제 #5
0
    public virtual void ChangeToState(UNBehaviorStateType state)
    {
        var oldState = m_curState;

        if (m_cbsBeforeChange != null)
        {
            for (int i = 0; i < m_cbsBeforeChange.Count; ++i)
            {
                m_cbsBeforeChange[i](m_type, oldState, state);
            }
        }
        m_stateCbs[state]();
        if (m_cbsAfterChange != null)
        {
            for (int i = 0; i < m_cbsAfterChange.Count; ++i)
            {
                m_cbsAfterChange[i](m_type, oldState, state);
            }
        }
    }
예제 #6
0
 public void AddBehaviorImmediate(UNBehaviorType bType,
                                  int priority = 0,
                                  UNBehaviorStateType bState = UNBehaviorStateType.Wait,
                                  UNBehaviorChangeStateCallBack cbBeforeChange = null,
                                  UNBehaviorChangeStateCallBack cbAfterChange  = null)
 {
     m_cbsBeforeBehaviorChange.Add(cbBeforeChange);
     m_cbsAfterBehaviorChange.Add(cbAfterChange);
     if (m_curBehavior.IsNull())
     {
         m_curBehavior = UNBehavior.New();
         m_curBehavior.ResetToBehavior(bType, priority, bState, m_cbsBeforeBehaviorChange, m_cbsAfterBehaviorChange);
     }
     else
     {
         m_curBehavior.ChangeToState(UNBehaviorStateType.Finish);
         m_curBehavior.ResetToBehavior(bType, priority, bState, m_cbsBeforeBehaviorChange, m_cbsAfterBehaviorChange);
     }
     m_curBehavior.ChangeToState(UNBehaviorStateType.Execute);
 }
예제 #7
0
 protected void Finish()
 {
     m_curState = UNBehaviorStateType.Finish;
 }
예제 #8
0
 protected void Execute()
 {
     m_curState = UNBehaviorStateType.Execute;
 }
예제 #9
0
 protected void Wait()
 {
     m_curState = UNBehaviorStateType.Wait;
 }
예제 #10
0
 public bool CanChangeToState(UNBehaviorStateType state)
 {
     return(m_stateCheckCbs[state]());
 }