void IPhotonPeerListener.OnOperationResponse(OperationResponse operationResponse) { switch (operationResponse.OperationCode) { case (byte)OperationCode.SubscribeCounter: { // init first engine var newPage = new GameTabPage { Padding = new Padding(3), UseVisualStyleBackColor = true }; this.tabControlTabs.TabPages.Add(newPage); this.StartEngine(newPage, Program.GetDefaultSettings()); newPage.Run(); break; } case (byte)OperationCode.RadarSubscribe: { break; } default: { log.ErrorFormat("diagnostics: unexpected return {0}", operationResponse.ReturnCode); break; } } }
/// <summary> /// The on paint. /// </summary> /// <param name="e"> /// The event args. /// </param> protected override void OnPaint(PaintEventArgs e) { if (this.worldData != null) { var boardSize = new[] { e.ClipRectangle.Width, e.ClipRectangle.Height }; GameTabPage.PaintGrid(e.Graphics, boardSize, this.worldData); WorldData world = this.worldData; float width = world.Width; float height = world.Height; float w = boardSize[0] / width; float h = boardSize[1] / height; float minW = Math.Max(4, w); float minH = Math.Max(4, h); Color color = Color.DeepPink; var brush = new SolidBrush(color); foreach (float[] entry in this.itemPositions.Values) { float x = ((this.worldData.BottomRightCorner[0] - entry[0]) * w) - 1; float y = (entry[1] * h) - 1; e.Graphics.FillRectangle(brush, x - (minW / 2) + 1, y - (minH / 2) + 1, minW - 1, minH - 1); } string rttString = string.Format("Online: {0}", this.itemPositions.Count); e.Graphics.DrawString(rttString, this.Font, Settings.IslandTextBrush, 0, 0); } }
/// <summary> /// The handle game world entered. /// </summary> /// <param name="page"> /// The game page. /// </param> private void HandleGameWorldEntered(GameTabPage page) { page.WorldEntered -= this.HandleGameWorldEntered; if (!this.tabPageRadar.Initialized) { this.tabPageRadar.Initialize(page.Game.WorldData); Operations.RadarSubscribe(this.diagnosticsPeer, page.Game.WorldData.Name); } }
/// <summary> /// The on text box auto move velocity leave. /// </summary> /// <param name="sender"> /// The sender. /// </param> /// <param name="e"> /// The event args. /// </param> private void OnTextBoxAutoMoveVelocityLeave(object sender, EventArgs e) { GameTabPage page = this.GetCurrentEnginePage(); if (page == null) { return; } ((Settings)page.Game.Settings).AutoMoveVelocity = int.Parse(this.textBoxAutoMoveVelocity.Text); }
/// <summary> /// Change game engine's actor name on TextboxName changed. /// </summary> private void OnTextBoxNameTextChanged(object sender, EventArgs e) { GameTabPage page = this.GetCurrentGamePage(); if (page == null) { return; } page.Game.Avatar.SetText(this.textBoxPlayerText.Text); }
/// <summary> /// The on text box send movement leave. /// </summary> /// <param name="sender"> /// The sender. /// </param> /// <param name="e"> /// The event args. /// </param> private void OnTextBoxSendMovementLeave(object sender, EventArgs e) { GameTabPage page = this.GetCurrentEnginePage(); if (page == null) { return; } ((Settings)page.Game.Settings).SendInterval = int.Parse(this.textBoxSendMovementInterval.Text); }
/// <summary> /// The on check box send reliable checked changed. /// </summary> /// <param name="sender"> /// The sender. /// </param> /// <param name="e"> /// The event args. /// </param> private void OnCheckBoxSendReliableCheckedChanged(object sender, EventArgs e) { GameTabPage page = this.GetCurrentEnginePage(); if (page == null) { return; } page.Game.Settings.SendReliable = this.checkBoxSendReliable.Checked; }
/// <summary> /// tag current game engine to settings tab or apply settings when switching back from settings tab /// </summary> /// <param name="sender"> /// The sender. /// </param> /// <param name="e"> /// The event args. /// </param> private void OnTabControlTabsSelectedIndexChanged(object sender, EventArgs e) { GameTabPage page = this.GetCurrentEnginePage(); if (page != null) { this.InitTabSettings(page); } else if (this.tabControlTabs.SelectedTab == this.tabPageLog) { this.textBoxLog.ScrollToCaret(); } }
/// <summary> /// change color on buttonColor click /// </summary> /// <param name="sender"> /// The sender. /// </param> /// <param name="e"> /// The event args. /// </param> private void OnButtonColorClick(object sender, EventArgs e) { var colorDialog = new ColorDialog(); if (colorDialog.ShowDialog() != DialogResult.Cancel) { this.buttonPlayerColor.BackColor = colorDialog.Color; GameTabPage page = this.GetCurrentEnginePage(); if (page != null) { page.Game.Avatar.SetColor(colorDialog.Color.ToArgb()); } } }
/// <summary> /// The stop engine. /// </summary> /// <param name="page"> /// The game page. /// </param> private void StopEngine(GameTabPage page) { if (this.tabControlTabs.SelectedTab == page) { // set focus on tab before closing tab this.tabControlTabs.SelectedIndex = Math.Max(0, this.tabControlTabs.SelectedIndex - 1); } // shut down engine (event handlers are removed in OnGameStateChanged handler) page.Game.Disconnect(); // remove tab this.tabControlTabs.Controls.Remove(page); page.Dispose(); }
/// <summary> /// start/stop auto moving when checkBoxAutoMove changed. /// </summary> /// <param name="sender"> /// The sender. /// </param> /// <param name="e"> /// The event args. /// </param> private void OnCheckBoxAutoMoveCheckedChanged(object sender, EventArgs e) { GameTabPage page = this.GetCurrentEnginePage(); if (page == null) { return; } ((Settings)page.Game.Settings).AutoMove = this.checkBoxAutoMoveEnabled.Checked; if (this.checkBoxAutoMoveEnabled.Checked) { page.AutoMove(); } }
/// <summary> /// The start engine. /// </summary> /// <param name="page"> /// The game page. /// </param> /// <param name="settings"> /// The settings. /// </param> private void StartEngine(GameTabPage page, Settings settings) { var engine = new Game(page, settings, Environment.UserName + ++this.gameCounter); var peer = new PhotonPeer(engine, settings.UseTcp); ////{ //// DebugOut = log.IsDebugEnabled ? DE.Exitgames.Neutron.Client.NPeer.DebugLevel.ALL : DE.Exitgames.Neutron.Client.NPeer.DebugLevel.INFO ////}; if (!this.tabPageRadar.Initialized) { page.WorldEntered += this.HandleGameWorldEntered; } engine.Initialize(peer); page.Initialize(engine); // set focus on game tab this.tabControlTabs.SelectedTab = page; }
/////// <summary> /////// The initialize. /////// </summary> ////private void Initialize() ////{ //// LogAppender.OnLog += this.LogText; //// this.tabPageArea.Run(); ////} /// <summary> /// tag page to settings tab and load values from game engine settings /// </summary> /// <param name="page"> /// The game tab page. /// </param> private void InitTabSettings(GameTabPage page) { this.tabPageSettings.Tag = page; if (page != null) { Game engine = page.Game; var settings = (Settings)engine.Settings; this.tabPageSettings.Text = engine.Avatar.Text; this.textBoxSendMovementInterval.Text = settings.SendInterval.ToString(); this.textBoxAutoMoveInterval.Text = settings.AutoMoveInterval.ToString(); this.textBoxPlayerText.Text = engine.Avatar.Text; this.buttonPlayerColor.BackColor = Color.FromArgb(engine.Avatar.Color); this.checkBoxSendReliable.Checked = settings.SendReliable; this.textBoxAutoMoveVelocity.Text = settings.AutoMoveVelocity.ToString(); this.checkBoxAutoMoveEnabled.Checked = settings.AutoMove; } else { this.tabPageSettings.Text = "Settings"; } }
/// <summary> /// The handle game world entered. /// </summary> /// <param name="page"> /// The game page. /// </param> private void HandleGameWorldEntered(GameTabPage page) { page.WorldEntered -= this.HandleGameWorldEntered; if (!this.tabPageRadar.Initialized) { this.tabPageRadar.Initialize(page.Game.WorldData); Operations.RadarSubscribe(this.diagnosticsPeer, page.Game.WorldData.Name); } }
void IPhotonPeerListener.OnOperationResponse(OperationResponse operationResponse) { switch (operationResponse.OperationCode) { case (byte)OperationCode.SubscribeCounter: { // init first engine var newPage = new GameTabPage { Padding = new Padding(3), UseVisualStyleBackColor = true }; this.tabControlTabs.TabPages.Add(newPage); this.StartEngine(newPage, Program.GetDefaultSettings()); newPage.Run(); break; } case (byte)OperationCode.RadarSubscribe: { break; } default: { log.ErrorFormat("diagnostics: unexpected return {0}", operationResponse.ReturnCode); break; } } }
private void OnKeyDown(object sender, KeyEventArgs e) { // ignore keyboard when entering text if (this.textBoxPlayerText.Focused) { return; } switch (e.KeyCode) { case Keys.Space: { this.tabControlTabs.SuspendLayout(); if (this.tabControlTabs.SelectedTab == this.tabPageSettings) { var t = this.tabPageSettings.Tag as TabPage; this.tabControlTabs.SelectedTab = t; } else { this.tabControlTabs.SelectedTab = this.tabPageSettings; } this.tabControlTabs.ResumeLayout(true); return; } case Keys.Oemplus: case Keys.Add: { var newPage = new GameTabPage { Padding = new Padding(3), UseVisualStyleBackColor = true }; this.tabControlTabs.TabPages.Add(newPage); this.StartGame(newPage, Program.GetDefaultSettings()); newPage.Run(); return; } } var page = this.tabControlTabs.SelectedTab as GameTabPage; if (page == null) { return; } Game game = page.Game; var settings = (Settings)game.Settings; switch (e.KeyCode) { case Keys.M: { if (settings.AutoMove) { settings.AutoMove = false; } else { settings.AutoMove = true; page.AutoMove(); } break; } case Keys.W: case Keys.NumPad8: { game.Avatar.MoveRelative(AddVelocity(Game.MoveUp, settings.AutoMoveVelocity), Vector.Zero); break; } case Keys.A: case Keys.NumPad4: { game.Avatar.MoveRelative(AddVelocity(Game.MoveLeft, settings.AutoMoveVelocity), Vector.Zero); break; } case Keys.S: case Keys.NumPad2: { game.Avatar.MoveRelative(AddVelocity(Game.MoveDown, settings.AutoMoveVelocity), Vector.Zero); break; } case Keys.D: case Keys.NumPad6: { game.Avatar.MoveRelative(AddVelocity(Game.MoveRight, settings.AutoMoveVelocity), Vector.Zero); break; } case Keys.NumPad5: { game.Avatar.MoveAbsolute(game.WorldData.BoundingBox.Max / 2, Vector.Zero); break; } case Keys.NumPad7: { game.Avatar.MoveRelative(AddVelocity(Game.MoveUpLeft, settings.AutoMoveVelocity), Vector.Zero); break; } case Keys.NumPad9: { game.Avatar.MoveRelative(AddVelocity(Game.MoveUpRight, settings.AutoMoveVelocity), Vector.Zero); break; } case Keys.NumPad1: { game.Avatar.MoveRelative(AddVelocity(Game.MoveDownLeft, settings.AutoMoveVelocity), Vector.Zero); break; } case Keys.NumPad3: { game.Avatar.MoveRelative(AddVelocity(Game.MoveDownRight, settings.AutoMoveVelocity), Vector.Zero); break; } case Keys.OemMinus: case Keys.Subtract: { this.StopGame(page); break; } case Keys.Insert: { page.SpawnBot(); break; } case Keys.Delete: { page.DestroyBot(); break; } case Keys.OemOpenBrackets: { Vector viewDistance = new Vector(page.MainCamera.ViewDistanceEnter); viewDistance.X = Math.Min(page.Game.WorldData.Width, viewDistance.X - (page.Game.WorldData.TileDimensions.X / 2)); viewDistance.Y = Math.Min(page.Game.WorldData.Height, viewDistance.Y - (page.Game.WorldData.TileDimensions.Y / 2)); page.MainCamera.SetViewDistance(viewDistance); break; } case Keys.OemCloseBrackets: { Vector viewDistance = new Vector(page.MainCamera.ViewDistanceEnter); viewDistance.X = Math.Min(page.Game.WorldData.Width, viewDistance.X + (page.Game.WorldData.TileDimensions.X / 2)); viewDistance.Y = Math.Min(page.Game.WorldData.Height, viewDistance.Y + (page.Game.WorldData.TileDimensions.Y / 2)); page.MainCamera.SetViewDistance(viewDistance); break; } } }
/// <summary> /// The start engine. /// </summary> /// <param name="page"> /// The game page. /// </param> /// <param name="settings"> /// The settings. /// </param> private void StartEngine(GameTabPage page, Settings settings) { var engine = new Game(page, settings, Environment.UserName + ++this.gameCounter); var peer = new PhotonPeer(engine, settings.UseTcp); ////{ //// DebugOut = log.IsDebugEnabled ? DE.Exitgames.Neutron.Client.NPeer.DebugLevel.ALL : DE.Exitgames.Neutron.Client.NPeer.DebugLevel.INFO ////}; if (!this.tabPageRadar.Initialized) { page.WorldEntered += this.HandleGameWorldEntered; } engine.Initialize(peer); page.Initialize(engine); // set focus on game tab this.tabControlTabs.SelectedTab = page; }
/////// <summary> /////// The initialize. /////// </summary> ////private void Initialize() ////{ //// LogAppender.OnLog += this.LogText; //// this.tabPageArea.Run(); ////} /// <summary> /// tag page to settings tab and load values from game engine settings /// </summary> /// <param name="page"> /// The game tab page. /// </param> private void InitTabSettings(GameTabPage page) { this.tabPageSettings.Tag = page; if (page != null) { Game engine = page.Game; var settings = (Settings)engine.Settings; this.tabPageSettings.Text = engine.Avatar.Text; this.textBoxSendMovementInterval.Text = settings.SendInterval.ToString(); this.textBoxAutoMoveInterval.Text = settings.AutoMoveInterval.ToString(); this.textBoxPlayerText.Text = engine.Avatar.Text; this.buttonPlayerColor.BackColor = Color.FromArgb(engine.Avatar.Color); this.checkBoxSendReliable.Checked = settings.SendReliable; this.textBoxAutoMoveVelocity.Text = settings.AutoMoveVelocity.ToString(); this.checkBoxAutoMoveEnabled.Checked = settings.AutoMove; } else { this.tabPageSettings.Text = "Settings"; } }
/// <summary> /// The on key down. /// </summary> /// <param name="sender"> /// The sender. /// </param> /// <param name="e"> /// The event args. /// </param> private void OnKeyDown(object sender, KeyEventArgs e) { // ignore keyboard when entering text if (this.textBoxPlayerText.Focused) { return; } switch (e.KeyCode) { case Keys.Space: { this.tabControlTabs.SuspendLayout(); if (this.tabControlTabs.SelectedTab == this.tabPageSettings) { var t = this.tabPageSettings.Tag as TabPage; this.tabControlTabs.SelectedTab = t; } else { this.tabControlTabs.SelectedTab = this.tabPageSettings; } this.tabControlTabs.ResumeLayout(true); return; } case Keys.Oemplus: case Keys.Add: { var newPage = new GameTabPage { Padding = new Padding(3), UseVisualStyleBackColor = true }; this.tabControlTabs.TabPages.Add(newPage); this.StartEngine(newPage, Program.GetDefaultSettings()); newPage.Run(); return; } } var page = this.tabControlTabs.SelectedTab as GameTabPage; if (page == null) { return; } Game engine = page.Game; var settings = (Settings)engine.Settings; switch (e.KeyCode) { case Keys.M: { if (settings.AutoMove) { settings.AutoMove = false; } else { settings.AutoMove = true; page.AutoMove(); } break; } case Keys.W: case Keys.NumPad8: { engine.Avatar.MoveRelative(AddVelocity(Game.MoveUp, settings.AutoMoveVelocity), null); break; } case Keys.A: case Keys.NumPad4: { engine.Avatar.MoveRelative(AddVelocity(Game.MoveLeft, settings.AutoMoveVelocity), null); break; } case Keys.S: case Keys.NumPad2: { engine.Avatar.MoveRelative(AddVelocity(Game.MoveDown, settings.AutoMoveVelocity), null); break; } case Keys.D: case Keys.NumPad6: { engine.Avatar.MoveRelative(AddVelocity(Game.MoveRight, settings.AutoMoveVelocity), null); break; } case Keys.NumPad5: { engine.Avatar.MoveAbsolute(new[] { engine.WorldData.BottomRightCorner[0] / 2, engine.WorldData.BottomRightCorner[1] / 2 }, null); break; } case Keys.NumPad7: { engine.Avatar.MoveRelative(AddVelocity(Game.MoveUpLeft, settings.AutoMoveVelocity), null); break; } case Keys.NumPad9: { engine.Avatar.MoveRelative(AddVelocity(Game.MoveUpRight, settings.AutoMoveVelocity), null); break; } case Keys.NumPad1: { engine.Avatar.MoveRelative(AddVelocity(Game.MoveDownLeft, settings.AutoMoveVelocity), null); break; } case Keys.NumPad3: { engine.Avatar.MoveRelative(AddVelocity(Game.MoveDownRight, settings.AutoMoveVelocity), null); break; } case Keys.OemMinus: case Keys.Subtract: { this.StopEngine(page); break; } case Keys.Insert: { page.SpawnBot(); break; } case Keys.Delete: { page.DestroyBot(); break; } } }
/// <summary> /// The on key down. /// </summary> /// <param name="sender"> /// The sender. /// </param> /// <param name="e"> /// The event args. /// </param> private void OnKeyDown(object sender, KeyEventArgs e) { // ignore keyboard when entering text if (this.textBoxPlayerText.Focused) { return; } switch (e.KeyCode) { case Keys.Space: { this.tabControlTabs.SuspendLayout(); if (this.tabControlTabs.SelectedTab == this.tabPageSettings) { var t = this.tabPageSettings.Tag as TabPage; this.tabControlTabs.SelectedTab = t; } else { this.tabControlTabs.SelectedTab = this.tabPageSettings; } this.tabControlTabs.ResumeLayout(true); return; } case Keys.Oemplus: case Keys.Add: { var newPage = new GameTabPage { Padding = new Padding(3), UseVisualStyleBackColor = true }; this.tabControlTabs.TabPages.Add(newPage); this.StartEngine(newPage, Program.GetDefaultSettings()); newPage.Run(); return; } } var page = this.tabControlTabs.SelectedTab as GameTabPage; if (page == null) { return; } Game engine = page.Game; var settings = (Settings)engine.Settings; switch (e.KeyCode) { case Keys.M: { if (settings.AutoMove) { settings.AutoMove = false; } else { settings.AutoMove = true; page.AutoMove(); } break; } case Keys.W: case Keys.NumPad8: { engine.Avatar.MoveRelative(AddVelocity(Game.MoveUp, settings.AutoMoveVelocity), null); break; } case Keys.A: case Keys.NumPad4: { engine.Avatar.MoveRelative(AddVelocity(Game.MoveLeft, settings.AutoMoveVelocity), null); break; } case Keys.S: case Keys.NumPad2: { engine.Avatar.MoveRelative(AddVelocity(Game.MoveDown, settings.AutoMoveVelocity), null); break; } case Keys.D: case Keys.NumPad6: { engine.Avatar.MoveRelative(AddVelocity(Game.MoveRight, settings.AutoMoveVelocity), null); break; } case Keys.NumPad5: { engine.Avatar.MoveAbsolute(new[] { engine.WorldData.BottomRightCorner[0] / 2, engine.WorldData.BottomRightCorner[1] / 2 }, null); break; } case Keys.NumPad7: { engine.Avatar.MoveRelative(AddVelocity(Game.MoveUpLeft, settings.AutoMoveVelocity), null); break; } case Keys.NumPad9: { engine.Avatar.MoveRelative(AddVelocity(Game.MoveUpRight, settings.AutoMoveVelocity), null); break; } case Keys.NumPad1: { engine.Avatar.MoveRelative(AddVelocity(Game.MoveDownLeft, settings.AutoMoveVelocity), null); break; } case Keys.NumPad3: { engine.Avatar.MoveRelative(AddVelocity(Game.MoveDownRight, settings.AutoMoveVelocity), null); break; } case Keys.OemMinus: case Keys.Subtract: { this.StopEngine(page); break; } case Keys.Insert: { page.SpawnBot(); break; } case Keys.Delete: { page.DestroyBot(); break; } } }
/// <summary> /// The stop engine. /// </summary> /// <param name="page"> /// The game page. /// </param> private void StopEngine(GameTabPage page) { if (this.tabControlTabs.SelectedTab == page) { // set focus on tab before closing tab this.tabControlTabs.SelectedIndex = Math.Max(0, this.tabControlTabs.SelectedIndex - 1); } // shut down engine (event handlers are removed in OnGameStateChanged handler) page.Game.Disconnect(); // remove tab this.tabControlTabs.Controls.Remove(page); page.Dispose(); }
private void OnKeyDown(object sender, KeyEventArgs e) { // ignore keyboard when entering text if (this.textBoxPlayerText.Focused) { return; } switch (e.KeyCode) { case Keys.Space: { this.tabControlTabs.SuspendLayout(); if (this.tabControlTabs.SelectedTab == this.tabPageSettings) { var t = this.tabPageSettings.Tag as TabPage; this.tabControlTabs.SelectedTab = t; } else { this.tabControlTabs.SelectedTab = this.tabPageSettings; } this.tabControlTabs.ResumeLayout(true); return; } case Keys.Oemplus: case Keys.Add: { var newPage = new GameTabPage { Padding = new Padding(3), UseVisualStyleBackColor = true }; this.tabControlTabs.TabPages.Add(newPage); this.StartGame(newPage, Program.GetDefaultSettings()); newPage.Run(); return; } } var page = this.tabControlTabs.SelectedTab as GameTabPage; if (page == null) { return; } Game game = page.Game; var settings = (Settings)game.Settings; switch (e.KeyCode) { case Keys.M: { if (settings.AutoMove) { settings.AutoMove = false; } else { settings.AutoMove = true; page.AutoMove(); } break; } case Keys.W: case Keys.NumPad8: { game.Avatar.MoveRelative(AddVelocity(Game.MoveUp, settings.AutoMoveVelocity), Vector.Zero); break; } case Keys.A: case Keys.NumPad4: { game.Avatar.MoveRelative(AddVelocity(Game.MoveLeft, settings.AutoMoveVelocity), Vector.Zero); break; } case Keys.S: case Keys.NumPad2: { game.Avatar.MoveRelative(AddVelocity(Game.MoveDown, settings.AutoMoveVelocity), Vector.Zero); break; } case Keys.D: case Keys.NumPad6: { game.Avatar.MoveRelative(AddVelocity(Game.MoveRight, settings.AutoMoveVelocity), Vector.Zero); break; } case Keys.NumPad5: { game.Avatar.MoveAbsolute(game.WorldData.BoundingBox.Max / 2, Vector.Zero); break; } case Keys.NumPad7: { game.Avatar.MoveRelative(AddVelocity(Game.MoveUpLeft, settings.AutoMoveVelocity), Vector.Zero); break; } case Keys.NumPad9: { game.Avatar.MoveRelative(AddVelocity(Game.MoveUpRight, settings.AutoMoveVelocity), Vector.Zero); break; } case Keys.NumPad1: { game.Avatar.MoveRelative(AddVelocity(Game.MoveDownLeft, settings.AutoMoveVelocity), Vector.Zero); break; } case Keys.NumPad3: { game.Avatar.MoveRelative(AddVelocity(Game.MoveDownRight, settings.AutoMoveVelocity), Vector.Zero); break; } case Keys.OemMinus: case Keys.Subtract: { this.StopGame(page); break; } case Keys.Insert: { page.SpawnBot(); break; } case Keys.Delete: { page.DestroyBot(); break; } case Keys.OemOpenBrackets: { Vector viewDistance = new Vector(page.MainCamera.ViewDistanceEnter); viewDistance.X = Math.Min(page.Game.WorldData.Width, viewDistance.X - (page.Game.WorldData.TileDimensions.X / 2)); viewDistance.Y = Math.Min(page.Game.WorldData.Height, viewDistance.Y - (page.Game.WorldData.TileDimensions.Y / 2)); page.MainCamera.SetViewDistance(viewDistance); break; } case Keys.OemCloseBrackets: { Vector viewDistance = new Vector(page.MainCamera.ViewDistanceEnter); viewDistance.X = Math.Min(page.Game.WorldData.Width, viewDistance.X + (page.Game.WorldData.TileDimensions.X/2)); viewDistance.Y = Math.Min(page.Game.WorldData.Height, viewDistance.Y + (page.Game.WorldData.TileDimensions.Y/2)); page.MainCamera.SetViewDistance(viewDistance); break; } } }