public static BaseStateItem CreateStateItem(StateItemType type) { Queue <BaseStateItem> pool = null; if (!StateItemPool.TryGetValue(type, out pool)) { pool = new Queue <BaseStateItem>(); StateItemPool.Add(type, pool); } BaseStateItem stateItem = null; if (pool.Count == 0) { stateItem = NewStateItem(type); } else { stateItem = pool.Dequeue(); } if (stateItem != null) { return(stateItem); } return(null); }
public void DelStateItem(BaseStateItem stateItem) { StateItemType type = stateItem.stateItemType; List <BaseStateItem> items = mStateItems[(int)StateItemType.Count]; if (items == null) { return; } if (items.Count == 0) { return; } BaseStateItem lastItem = items[items.Count - 1]; items.Remove(stateItem); lastItem.Exit(); if (lastItem == stateItem && items.Count > 0) { lastItem = items[items.Count - 1]; lastItem.OnOverlay(); } }
public static void DeleteAction(BaseStateItem stateItem) { StateItemType type = stateItem.stateItemType; Queue <BaseStateItem> pool = null; if (!StateItemPool.TryGetValue(type, out pool)) { return; } pool.Enqueue(stateItem); }
void UpdateDefaultItem() { for (int i = 0; i < mStateItems.Length; ++i) { List <BaseStateItem> stateItems = mStateItems[i]; if (stateItems == null || stateItems.Count == 0) { BaseStateItem defaultStateItem = mDefaultStateItems[i]; defaultStateItem.OnDefault(); } } }
public void Exit() { for (int i = 0; i < mStateItems.Count; ++i) { BaseStateItem stateItem = mStateItems[i]; if (stateItem == null) { continue; } mStateMgr.DelStateItem(stateItem); } mStateItems.Clear(); }
public StateMgr(Character cha) { mOwner = cha; for (int i = 0; i < mDefaultStateItems.Length; ++i) { StateItemType type = (StateItemType)i; BaseStateItem item = BaseStateItem.CreateStateItem(type); mDefaultStateItems[i] = item; } for (int i = 0; i < mCannotFlagCount.Length; ++i) { mCannotFlagCount[i] = 0; } }
public void AddStateItem(BaseStateItem stateItem) { StateItemType type = stateItem.stateItemType; List <BaseStateItem> items = mStateItems[(int)StateItemType.Count]; if (items == null) { items = new List <BaseStateItem>(); mStateItems[(int)type] = items; } stateItem.Enter(); items.Add(stateItem); stateItem.OnOverlay(); }
public void LogicTick() { for (int i = 0; i < mStateList.Count; ++i) { StateGroup state = mStateList[i]; if (!state.LogicTick()) { DelState(state); } } if (mRemoveList.Count > 0) { for (int i = 0; i < mRemoveList.Count; ++i) { StateGroup state = mRemoveList[i]; if (state == null) { continue; } mStates.Remove(state.mExcel.id); mStateList.Remove(state); } mRemoveList.Clear(); UpdateDefaultItem(); } for (int i = 0; i < mStateItems.Length; ++i) { List <BaseStateItem> items = mStateItems[i]; if (items == null) { continue; } for (int j = 0; j < items.Count; ++j) { BaseStateItem item = items[j]; if (item == null) { continue; } item.LogicTick(); } } }
private static BaseStateItem NewStateItem(StateItemType type) { BaseStateItem stateItem = null; switch (type) { case StateItemType.CannotFlag: stateItem = new StateItemCannotFlag(); break; case StateItemType.ModifyHp: stateItem = new StateItemModifyHp(); break; } stateItem.stateItemType = type; return(stateItem); }
public void Enter() { mStartTime = Time.realtimeSinceStartup; for (int i = 0; i < mExcel.stateEffectIDs.Length; ++i) { int stateEffectID = mExcel.stateEffectIDs[i]; excel_state_effect excel = excel_state_effect.Find(stateEffectID); if (excel == null) { continue; } StateItemType stateItemType = (StateItemType)excel.type; BaseStateItem stateItem = BaseStateItem.CreateStateItem(stateItemType); stateItem.excel = excel; stateItem.stateGroup = this; mStateMgr.AddStateItem(stateItem); mStateItems.Add(stateItem); } }