public void HandleMessage(ProtoBase proto) { switch (proto.MessageID) { case MessageId.SC_StartLevel: { if (m_curSubGameType != ESubGame.Battle) { ProtoSCStartLevel startLevel = proto as ProtoSCStartLevel; m_globalData.CurrLevel = startLevel.LevelId; SwitchToSubgame(ESubGame.Battle); } break; } case MessageId.SC_LeaveGame: { ExitRoom(); break; } default: break; } // update subgame if (m_curSubGame != null) { m_curSubGame.HandleMessage(proto); } }
public override void HandleMessage(ProtoBase proto) { switch (proto.MessageID) { case MessageId.SC_StartLevel: { ProtoSCStartLevel startLevel = proto as ProtoSCStartLevel; GameCore.Instance.m_globalData.CurrLevel = startLevel.LevelId; Reset(); SyncClock(); break; } case MessageId.SC_LeaveLevel: { GameCore.Instance.SwitchToSubgame(ESubGame.SelectLevel); break; } case MessageId.SC_StartBattle: { ProtoSCStartBattle startBattle = proto as ProtoSCStartBattle; m_state = EBattleState.Ready; m_startFightTime = startBattle.StartTime + m_startFightDelay; m_viewSceneTarget = startBattle.Translation; Vector2 startPos = new Vector2(-6, m_viewSceneTarget.y); m_battleField.BattleFieldObj.transform.position = startPos; m_viewSceneSpeed = (m_viewSceneTarget.x + 6) / m_viewSceneTime; for (int i = 0; i < startBattle.BallQueueA.Count; ++i) { m_battleField.m_ballReserve[0].Enqueue((ELevelBallType)startBattle.BallQueueA[i]); } m_battleField.CheckBallDisplay(0); for (int i = 0; i < startBattle.BallQueueB.Count; ++i) { m_battleField.m_ballReserve[1].Enqueue((ELevelBallType)startBattle.BallQueueB[i]); } m_battleField.CheckBallDisplay(1); if (GameCore.Instance.m_globalData.CurrLevel % 2 == 1) { AudioMgr.PlayAudio(2, Guid.Empty); } else { AudioMgr.PlayAudio(3, Guid.Empty); } break; } case MessageId.SC_EndBattle: { ProtoSCEndBattle endBattle = proto as ProtoSCEndBattle; StartTimer(() => { OnEndBattle(endBattle.IsWin); }, 2f); break; } case MessageId.SC_BattleCommand: { ProtoSCBattleCommand battleCommand = proto as ProtoSCBattleCommand; HandleBattleCommand(battleCommand.Command); break; } } }