Example #1
0
    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);
    }
Example #2
0
    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();
        }
    }
Example #3
0
    public static void DeleteAction(BaseStateItem stateItem)
    {
        StateItemType         type = stateItem.stateItemType;
        Queue <BaseStateItem> pool = null;

        if (!StateItemPool.TryGetValue(type, out pool))
        {
            return;
        }
        pool.Enqueue(stateItem);
    }
Example #4
0
 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();
         }
     }
 }
Example #5
0
 public void Exit()
 {
     for (int i = 0; i < mStateItems.Count; ++i)
     {
         BaseStateItem stateItem = mStateItems[i];
         if (stateItem == null)
         {
             continue;
         }
         mStateMgr.DelStateItem(stateItem);
     }
     mStateItems.Clear();
 }
Example #6
0
 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;
     }
 }
Example #7
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();
    }
Example #8
0
    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();
            }
        }
    }
Example #9
0
    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);
    }
Example #10
0
    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);
        }
    }