// 当存在existState时,是否允许添加newState protected bool allowAddStateByGroup(PlayerState newState, PlayerState existState) { // 任意一个状态没有所属组,则不在同一组 if (!mStateGroupList.ContainsKey(newState.GetType()) || !mStateGroupList.ContainsKey(existState.GetType())) { return(true); } List <Type> newGroup = mStateGroupList[newState.GetType()]; List <Type> existGroup = mStateGroupList[existState.GetType()]; // 有一个状态不属于任何状态组时两个状态是可以共存的 if (newGroup == null || existGroup == null) { return(true); } int count0 = newGroup.Count; int count1 = existGroup.Count; for (int i = 0; i < count0; ++i) { for (int j = 0; j < count1; ++j) { // 属于同一状态组,并且该状态组中的所有状态都不能共存,而且不允许添加跟当前状态互斥的状态,则不允许添加该状态 if (newGroup[i] != existGroup[j]) { continue; } StateGroup group = mGroupStateList[newGroup[i]]; GROUP_MUTEX_OPERATION operate = group.mCoexist; // 状态可共存 if (operate == GROUP_MUTEX_OPERATION.GMO_COEXIST) { ; } // 只与主状态互斥 else if (operate == GROUP_MUTEX_OPERATION.GMO_MUETX_WITH_MAIN) { // 有主状态时不可添加其他状态 if (group.mMainState == existState.GetType()) { return(false); } } // 不可添加新状态 else if (operate == GROUP_MUTEX_OPERATION.GMO_NO_NEW) { return(false); } // 添加新状态时移除所有旧状态 else if (operate == GROUP_MUTEX_OPERATION.GMO_REMOVE_OTHERS) { ; } } } return(true); }
public static void registeGroup <T>(GROUP_MUTEX_OPERATION mutex = GROUP_MUTEX_OPERATION.GMO_COEXIST) where T : StateGroup, new() { if (mGroupStateList == null) { mGroupStateList = new Dictionary <Type, StateGroup>(); } StateGroup group = new T(); group.setCoexist(mutex); mGroupStateList.Add(typeof(T), group); }
public void setCoexist(GROUP_MUTEX_OPERATION coexist) { mCoexist = coexist; }