예제 #1
0
 protected STATE_MUTEX mMutexType;               // 该状态是否允许叠加
 public PlayerState()
 {
     mMutexType     = STATE_MUTEX.COEXIST;
     mBuffStateType = BUFF_STATE_TYPE.NONE;
     mActive        = true;
     mStateMaxTime  = -1.0f;
     mStateTime     = -1.0f;
 }
    // 是否因为与当前已存在的同类型的互斥而无法添加此状态,返回值表示是否可以添加新的状态,如果可添加,则needRemoveState返回需要被移除的状态
    protected bool mutexWithExistState(PlayerState state, out PlayerState needRemoveState)
    {
        needRemoveState = null;
        // 移除自身不可共存的状态
        PlayerState existState = getFirstState(Typeof(state));

        if (existState == null)
        {
            return(true);
        }
        STATE_MUTEX operate = existState.getMutexType();

        // 移除旧状态
        if (operate == STATE_MUTEX.REMOVE_OLD)
        {
            needRemoveState = existState;
            return(true);
        }
        // 不允许添加新状态
        else if (operate == STATE_MUTEX.CAN_NOT_ADD_NEW)
        {
            return(false);
        }
        // 相同的状态可以共存
        else if (operate == STATE_MUTEX.COEXIST)
        {
            return(true);
        }
        // 只保留优先级最高的状态
        else if (operate == STATE_MUTEX.KEEP_HIGH_PRIORITY)
        {
            // 移除优先级低的旧状态,因为每次都只会保留优先级最高的状态,所以同时最多只会存在一个状态
            if (existState.getPriority() < state.getPriority())
            {
                needRemoveState = existState;
            }
            return(existState.getPriority() < state.getPriority());
        }
        return(true);
    }