public void AddFrameDataFromServer(NotifyPlayersFrameInputCmd inputCmd)
 {
     if (!mDispatchedFromServer.ContainsKey(inputCmd.frame))
     {
         mDispatchedFromServer[inputCmd.frame] = inputCmd;
         mLastServerFrame = Mathf.Max(mLastServerFrame, inputCmd.frame);
     }
     mServerCmdQueues.Enqueue(inputCmd);
 }
    /// <summary>
    /// Update & dispatch all the events.
    /// </summary>
    public void DoUpdate(float timeDiff)
    {
        if (LesGameCore.Instance.CurrentGameState != GameState.State_Gaming)
        {
            return;
        }

        //while (mClientFrameIdx < mLastServerFrame)
        if (mServerCmdQueues.Count > 0)
        {
            NotifyPlayersFrameInputCmd cmd = mServerCmdQueues.Dequeue();
            //if (mDispatchedFromServer.ContainsKey(mClientFrameIdx))
            if (cmd != null)
            {
                foreach (var cmdData in cmd.ctrls)
                {
                    LesUnit unit = LesBattleField.Instance.GetUnit(cmdData.key.ToString());
                    if (!unit || unit.IsDead || unit.MarkAsVanished || !unit.gameObject.activeInHierarchy)
                    {
                        continue; // 角色特殊情况下pass掉.
                    }
                    foreach (var inputCmd in cmdData.frames)
                    {
                        mCurrentMoveDelta = new Vector2(inputCmd.x, inputCmd.y);
                        unit.ControlUnitMoveByLockStep(new Vector2(inputCmd.x, inputCmd.y), timeDiff);
                        if (inputCmd.skill == 0)
                        {
                            unit.DoNormalAttack();
                        }
                        else if (inputCmd.skill == 1 ||
                                 inputCmd.skill == 2 ||
                                 inputCmd.skill == 3 ||
                                 inputCmd.skill == 4)
                        {
                            unit.DoSkill(inputCmd.skill);
                        }
                    }
                }
            }
        }
        mClientFrameIdx++;
    }