public void Initialize()
        {
            DataManager clientData = DataManager.GetInstance();

            frames   = clientData.GetSimulateBattleData();
            battleId = clientData.GetBattleId();

            // Init battle situation data.
            deltaTime   = GameConstants.LOGIC_FRAME_TIME;
            deltaTimeMs = Mathf.RoundToInt(deltaTime * 1000);
            List <Battler> battler = clientData.GetBattlers();

            sideBattleSituations = new Dictionary <MatchSide, List <BattleSituation> >();
            sideBattleSituations.Add(MatchSide.Blue, new List <BattleSituation>());
            sideBattleSituations.Add(MatchSide.Red, new List <BattleSituation>());

            for (int i = 0; i < battler.Count; i++)
            {
                BattleSituation bs        = new BattleSituation();
                long            battlerId = battler[i].playerId;

                bs.playerId = battlerId;

                if (battler[i].side == MatchSide.Blue)
                {
                    sideBattleSituations[MatchSide.Blue].Add(bs);
                }
                else if (battler[i].side == MatchSide.Red)
                {
                    sideBattleSituations[MatchSide.Red].Add(bs);
                }
            }

            status = SimulateBattleStatus.Playing;
        }
        private void SetCurrentBattleResult(NoticeC2S noticeC2S = null)
        {
            NoticeS2C  noticeS2C = new NoticeS2C();
            NoticeType type      = NoticeType.BattleResultBlueWin;

            if (noticeC2S != null)
            {
                type = noticeC2S.type;
            }
            else
            {
                type = NoticeType.BattleResultBlueWin;
            }

            DebugUtils.Log(DebugUtils.Type.SimulateBattleMessage, string.Format("Send {0} feed back succeed ", MsgCode.NoticeMessage));

            // battle end need to stop send updateS2CS
            if (type == NoticeType.BattleResultBlueWin ||
                type == NoticeType.BattleResultRedWin ||
                type == NoticeType.BattleResultDraw)
            {
                DataManager clientData = DataManager.GetInstance();

                NoticeS2C.BattleResult resultData = new NoticeS2C.BattleResult();

                resultData.battleDuration = (int)(battleDurationTimer * 0.001f);

                FillSituantionData(MatchSide.Red, resultData.redBattleSituations);
                FillSituantionData(MatchSide.Blue, resultData.blueBattleSituations);

                resultData.gainGold    = 0;
                resultData.gainExp     = 0;
                resultData.currentExp  = 0;
                resultData.upLevelExp  = 0;
                resultData.playerLevel = 0;

                noticeS2C.battleResult = resultData;
                status = SimulateBattleStatus.End;
                DebugUtils.Log(DebugUtils.Type.SimulateBattleMessage, string.Format("Send battle result feed back succeed: {0}", type));
            }

            noticeS2C.type = type;
            byte[] dataS2C = ProtobufUtils.Serialize(noticeS2C);
            simMessageHandlers[MsgCode.NoticeMessage](dataS2C);
        }
        public static void SetBattleRecordPlayState(int state)
        {
            switch (state)
            {
            case 1:
            {
                // play
                status = SimulateBattleStatus.Playing;
                DebugUtils.Log(DebugUtils.Type.SimulateBattleMessage, string.Format("Set simulate battle state {0}", status));
                break;
            }

            case 2:
            {
                // pause or continue
                if (status == SimulateBattleStatus.Pause)
                {
                    status = SimulateBattleStatus.Playing;
                }
                else
                {
                    status = SimulateBattleStatus.Pause;
                }
                DebugUtils.Log(DebugUtils.Type.SimulateBattleMessage, string.Format("Set simulate battle state {0}", status));

                break;
            }

            case 3:
            {
                // quit
                DebugUtils.Log(DebugUtils.Type.SimulateBattleMessage, string.Format("Set simulate battle state {0}", status));
                break;
            }
            }
        }