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); }