public static void LanGameOptionsMenuSystem(Control control, WndWindowMessage message, ControlCallbackContext context) { logger.Info($"Have message {message.MessageType} for control {control.Name}"); if (!GameOptions.HandleSystem(control, message, context)) { switch (message.MessageType) { case WndWindowMessageType.SelectedButton: switch (message.Element.Name) { case "LanGameOptionsMenu.wnd:ButtonBack": context.Game.LobbyManager.Stop(); context.WindowManager.SetWindow(@"Menus\LanLobbyMenu.wnd"); // TODO: Go back to Single Player sub-menu break; default: logger.Warn($"No callback for {message.Element.Name}"); break; } break; } } }
public static void MainMenuSystem(Control control, WndWindowMessage message, ControlCallbackContext context) { void QueueTransition(string transition) { context.WindowManager.TransitionManager.QueueTransition(null, control.Window, transition); } switch (message.MessageType) { case WndWindowMessageType.SelectedButton: switch (message.Element.Name) { case "MainMenu.wnd:ButtonSinglePlayer": QueueTransition("MainMenuDefaultMenuBack"); QueueTransition("MainMenuSinglePlayerMenu"); break; case "MainMenu.wnd:ButtonSkirmish": context.WindowManager.SetWindow(@"Menus\SkirmishGameOptionsMenu.wnd"); break; case "MainMenu.wnd:ButtonSingleBack": QueueTransition("MainMenuSinglePlayerMenuBack"); QueueTransition("MainMenuDefaultMenu"); break; case "MainMenu.wnd:ButtonMultiplayer": QueueTransition("MainMenuDefaultMenuBack"); QueueTransition("MainMenuMultiPlayerMenu"); break; case "MainMenu.wnd:ButtonMultiBack": QueueTransition("MainMenuMultiPlayerMenuReverse"); QueueTransition("MainMenuDefaultMenu"); break; case "MainMenu.wnd:ButtonLoadReplay": QueueTransition("MainMenuDefaultMenuBack"); QueueTransition("MainMenuLoadReplayMenu"); break; case "MainMenu.wnd:ButtonLoadReplayBack": QueueTransition("MainMenuLoadReplayMenuBack"); QueueTransition("MainMenuDefaultMenu"); break; case "MainMenu.wnd:ButtonReplay": context.WindowManager.SetWindow(@"Menus\ReplayMenu.wnd"); break; case "MainMenu.wnd:ButtonOptions": context.WindowManager.PushWindow(@"Menus\OptionsMenu.wnd"); break; case "MainMenu.wnd:ButtonCredits": context.WindowManager.SetWindow(@"Menus\CreditsMenu.wnd"); break; case "MainMenu.wnd:ButtonExit": var exitWindow = context.WindowManager.PushWindow(@"Menus\QuitMessageBox.wnd"); exitWindow.Controls.FindControl("QuitMessageBox.wnd:StaticTextTitle").Text = "EXIT?"; ((Label)exitWindow.Controls.FindControl("QuitMessageBox.wnd:StaticTextTitle")).TextAlignment = TextAlignment.Leading; exitWindow.Controls.FindControl("QuitMessageBox.wnd:StaticTextMessage").Text = "Are you sure you want to exit?"; exitWindow.Controls.FindControl("QuitMessageBox.wnd:ButtonOk").Show(); exitWindow.Controls.FindControl("QuitMessageBox.wnd:ButtonOk").Text = "YES"; exitWindow.Controls.FindControl("QuitMessageBox.wnd:ButtonCancel").Show(); exitWindow.Controls.FindControl("QuitMessageBox.wnd:ButtonCancel").Text = "NO"; break; } break; } }
public static void ReplayMenuSystem(Control control, WndWindowMessage message, ControlCallbackContext context) { switch (message.MessageType) { case WndWindowMessageType.SelectedButton: switch (message.Element.Name) { case "ReplayMenu.wnd:ButtonLoadReplay": // TODO: Handle no selected item. var listBox = (ListBox)control.Window.Controls.FindControl("ReplayMenu.wnd:ListboxReplayFiles"); using (var fileSystem = GetReplaysFileSystem(context.Game)) { var replayFileEntry = fileSystem.GetFile((string)listBox.Items[listBox.SelectedIndex].DataItem); context.Game.Scene2D.WndWindowManager.PopWindow(); context.Game.LoadReplayFile(replayFileEntry); } break; case "ReplayMenu.wnd:ButtonBack": context.WindowManager.SetWindow(@"Menus\MainMenu.wnd"); // TODO: Go back to Replay sub-menu break; } break; } }
public static void JoinGame(ControlCallbackContext context, IPEndPoint endPoint) { context.Game.SkirmishManager = new SkirmishManager.Client(context.Game, endPoint); context.WindowManager.SetWindow(@"Menus\LanGameOptionsMenu.wnd"); }
public static void LanLobbyMenuSystem(Control control, WndWindowMessage message, ControlCallbackContext context) { switch (message.MessageType) { case WndWindowMessageType.SelectedButton: logger.Info($"Have message {message.MessageType} for control {message.Element.Name}"); switch (message.Element.Name) { case "LanLobbyMenu.wnd:ButtonBack": LeaveLobby(context); context.WindowManager.SetWindow(@"Menus\MainMenu.wnd"); // TODO: Go back to Multiplayer sub-menu break; case "LanLobbyMenu.wnd:ButtonHost": context.Game.SkirmishManager = new SkirmishManager.Host(context.Game); context.WindowManager.SetWindow(@"Menus\LanGameOptionsMenu.wnd"); break; case "LanLobbyMenu.wnd:ButtonJoin": var listBoxGames = (ListBox)control.Window.Controls.FindControl(ListBoxGamesPrefix); if (listBoxGames.SelectedIndex < 0) { return; } var selectedItemIndex = listBoxGames.SelectedIndex; var selectedItem = listBoxGames.Items[selectedItemIndex]; var player = (LobbyPlayer)selectedItem.DataItem; logger.Info($"Requesting to join {player.EndPoint}"); context.Game.SkirmishManager = new SkirmishManager.Client(context.Game, player.EndPoint); context.WindowManager.SetWindow(@"Menus\LanGameOptionsMenu.wnd"); break; case "LanLobbyMenu.wnd:ButtonDirectConnect": context.WindowManager.SetWindow(@"Menus\NetworkDirectConnect.wnd"); break; } break; } }
public static void OptionsMenuSystem(Control control, WndWindowMessage message, ControlCallbackContext context) { switch (message.MessageType) { case WndWindowMessageType.SelectedButton: switch (message.Element.Name) { case "OptionsMenu.wnd:ButtonBack": context.WindowManager.PopWindow(); break; } break; } }
public static void CreditsMenuInput(Control control, WndWindowMessage message, ControlCallbackContext context) { //switch (message.MessageType) //{ // case WndWindowMessageType.KeyDown: // if (message.Key == Key.Escape) // { // context.WindowManager.SetWindow(@"Menus\MainMenu.wnd"); // } // break; //} }
public static async void LanGameOptionsMenuSystem(Control control, WndWindowMessage message, ControlCallbackContext context) { Logger.Trace($"Have message {message.MessageType} for control {control.Name}"); if (!await GameOptions.HandleSystemAsync(control, message, context)) { switch (message.MessageType) { case WndWindowMessageType.SelectedButton: switch (message.Element.Name) { case "LanGameOptionsMenu.wnd:ButtonBack": context.Game.SkirmishManager.Stop(); if (UPnP.Status == UPnPStatus.PortsForwarded) { await UPnP.RemovePortForwardingAsync(); } context.WindowManager.SetWindow(@"Menus\LanLobbyMenu.wnd"); break; default: Logger.Warn($"No callback for {message.Element.Name}"); break; } break; } } }
public static void ControlBarSystem(Control control, WndWindowMessage message, ControlCallbackContext context) { switch (message.MessageType) { case WndWindowMessageType.SelectedButton: switch (message.Element.Name) { case "ControlBar.wnd:ButtonLarge": ((GeneralsControlBar)context.Game.Scene2D.ControlBar).ToggleSize(); break; case "ControlBar.wnd:ButtonOptions": context.WindowManager.PushWindow("Menus/QuitMenu.wnd"); break; } break; } }
public static void QuitMessageBoxSystem(Control control, WndWindowMessage message, ControlCallbackContext context) { switch (message.MessageType) { case WndWindowMessageType.SelectedButton: switch (message.Element.Name) { case "QuitMessageBox.wnd:ButtonCancel": context.WindowManager.PopWindow(); break; case "QuitMessageBox.wnd:ButtonOk": // TODO: Cleanup resources before closing window. context.Game.Window.Close(); break; } break; } }
public static void MainMenuSystem(Control control, WndWindowMessage message, ControlCallbackContext context) { void QueueTransition(string transition) { context.WindowManager.TransitionManager.QueueTransition(null, control.Window, transition); } void OpenSinglePlayerSideMenu(string side, string sideWindowSuffix) { _currentSide = side; _currentSideWindowSuffix = sideWindowSuffix; var selectDifficultyLabel = (Label)control.Window.Controls.FindControl("MainMenu.wnd:StaticTextSelectDifficulty"); // TODO: This should be animated as part of the transition. selectDifficultyLabel.Opacity = 1; selectDifficultyLabel.TextOpacity = 1; selectDifficultyLabel.Show(); QueueTransition("MainMenuSinglePlayerMenuBack"); QueueTransition($"MainMenuDifficultyMenu{sideWindowSuffix}"); } var translation = context.Game.ContentManager.TranslationManager; switch (message.MessageType) { case WndWindowMessageType.SelectedButton: switch (message.Element.Name) { case "MainMenu.wnd:ButtonSinglePlayer": QueueTransition("MainMenuDefaultMenuBack"); QueueTransition("MainMenuSinglePlayerMenu"); break; case "MainMenu.wnd:ButtonTRAINING": OpenSinglePlayerSideMenu("TRAINING", "Training"); break; case "MainMenu.wnd:ButtonChina": OpenSinglePlayerSideMenu("China", "China"); break; case "MainMenu.wnd:ButtonGLA": OpenSinglePlayerSideMenu("GLA", "GLA"); break; case "MainMenu.wnd:ButtonUSA": OpenSinglePlayerSideMenu("USA", "US"); break; case "MainMenu.wnd:ButtonEasy": case "MainMenu.wnd:ButtonMedium": case "MainMenu.wnd:ButtonHard": context.Game.StartCampaign(_currentSide); break; case "MainMenu.wnd:ButtonDiffBack": QueueTransition($"MainMenuDifficultyMenu{_currentSideWindowSuffix}Back"); QueueTransition($"MainMenuSinglePlayer{_currentSideWindowSuffix}MenuFromDiff"); break; case "MainMenu.wnd:ButtonSkirmish": context.WindowManager.SetWindow(@"Menus\SkirmishGameOptionsMenu.wnd"); break; case "MainMenu.wnd:ButtonSingleBack": QueueTransition("MainMenuSinglePlayerMenuBack"); QueueTransition("MainMenuDefaultMenu"); break; case "MainMenu.wnd:ButtonMultiplayer": QueueTransition("MainMenuDefaultMenuBack"); QueueTransition("MainMenuMultiPlayerMenu"); break; case "MainMenu.wnd:ButtonNetwork": context.WindowManager.SetWindow(@"Menus\LanLobbyMenu.wnd"); break; case "MainMenu.wnd:ButtonMultiBack": QueueTransition("MainMenuMultiPlayerMenuReverse"); QueueTransition("MainMenuDefaultMenu"); break; case "MainMenu.wnd:ButtonLoadReplay": QueueTransition("MainMenuDefaultMenuBack"); QueueTransition("MainMenuLoadReplayMenu"); break; case "MainMenu.wnd:ButtonLoadReplayBack": QueueTransition("MainMenuLoadReplayMenuBack"); QueueTransition("MainMenuDefaultMenu"); break; case "MainMenu.wnd:ButtonReplay": context.WindowManager.SetWindow(@"Menus\ReplayMenu.wnd"); break; case "MainMenu.wnd:ButtonLoadGame": context.WindowManager.SetWindow(@"Menus\SaveLoad.wnd"); break; case "MainMenu.wnd:ButtonOptions": context.WindowManager.PushWindow(@"Menus\OptionsMenu.wnd"); break; case "MainMenu.wnd:ButtonCredits": context.WindowManager.SetWindow(@"Menus\CreditsMenu.wnd"); break; case "MainMenu.wnd:ButtonExit": var exitWindow = context.WindowManager.PushWindow(@"Menus\QuitMessageBox.wnd"); exitWindow.Controls.FindControl("QuitMessageBox.wnd:StaticTextTitle").Text = "GUI:QuitPopupTitle".Translate(); ((Label)exitWindow.Controls.FindControl("QuitMessageBox.wnd:StaticTextTitle")).TextAlignment = TextAlignment.Leading; exitWindow.Controls.FindControl("QuitMessageBox.wnd:StaticTextMessage").Text = "GUI:QuitPopupMessage".Translate(); exitWindow.Controls.FindControl("QuitMessageBox.wnd:ButtonOk").Show(); exitWindow.Controls.FindControl("QuitMessageBox.wnd:ButtonOk").Text = "GUI:Yes".Translate(); exitWindow.Controls.FindControl("QuitMessageBox.wnd:ButtonCancel").Show(); exitWindow.Controls.FindControl("QuitMessageBox.wnd:ButtonCancel").Text = "GUI:No".Translate(); break; } break; } }
protected override void DefaultInputOverride(WndWindowMessage message, ControlCallbackContext context) { // TODO: Capture input on mouse down. // TODO: Only fire click event when mouse was pressed and released inside same button. switch (message.MessageType) { case WndWindowMessageType.MouseUp: context.WindowManager.Focus(this); Click?.Invoke(this, EventArgs.Empty); break; case WndWindowMessageType.MouseEnter: case WndWindowMessageType.MouseMove: case WndWindowMessageType.MouseExit: case WndWindowMessageType.MouseDown: break; case WndWindowMessageType.KeyDown: if (!IsReadOnly) { switch (message.Key) { case Veldrid.Key.A: case Veldrid.Key.B: case Veldrid.Key.C: case Veldrid.Key.D: case Veldrid.Key.E: case Veldrid.Key.F: case Veldrid.Key.G: case Veldrid.Key.H: case Veldrid.Key.I: case Veldrid.Key.J: case Veldrid.Key.K: case Veldrid.Key.L: case Veldrid.Key.M: case Veldrid.Key.N: case Veldrid.Key.O: case Veldrid.Key.P: case Veldrid.Key.Q: case Veldrid.Key.R: case Veldrid.Key.S: case Veldrid.Key.T: case Veldrid.Key.U: case Veldrid.Key.V: case Veldrid.Key.W: case Veldrid.Key.X: case Veldrid.Key.Y: case Veldrid.Key.Z: Text += message.Key; break; case Veldrid.Key.Space: Text += " "; break; case Veldrid.Key.Minus: Text += "-"; break; case Veldrid.Key.Number0: case Veldrid.Key.Number1: case Veldrid.Key.Number2: case Veldrid.Key.Number3: case Veldrid.Key.Number4: case Veldrid.Key.Number5: case Veldrid.Key.Number6: case Veldrid.Key.Number7: case Veldrid.Key.Number8: case Veldrid.Key.Number9: Text += message.Key.ToString().Substring(6, 1); break; case Veldrid.Key.BackSpace: if (Text != "") { Text = Text.Substring(0, Text.Length - 1); } break; } } break; default: logger.Info($"Unhandled event: {message.MessageType} {message.Element} {message.MousePosition} {message.Key}"); break; } }
public static void CreditsMenuInput(Control control, WndWindowMessage message, ControlCallbackContext context) { switch (message.MessageType) { case WndWindowMessageType.KeyDown: if (message.Key == Key.Escape) { //Should load a loading screen context.WindowManager.SetWindow(@"Menus\MainMenu.wnd"); } break; } }
public static void ControlBarSystem(Control control, WndWindowMessage message, ControlCallbackContext context) { switch (message.MessageType) { case WndWindowMessageType.SelectedButton: switch (message.Element.Name) { case "ControlBar.wnd:ButtonLarge": ((GeneralsControlBar)context.Game.Scene2D.ControlBar).ToggleSize(); break; case "ControlBar.wnd:ButtonOptions": context.WindowManager.PushWindow(Path.Combine("Menus", "QuitMenu.wnd")); break; case "ControlBar.wnd:ButtonGeneral": var window = context.WindowManager.PushWindow("GeneralsExpPoints.wnd"); GeneralsExpPointsCallbacks.SetWindow(window); break; } break; } }
public static void LanMapSelectMenuSystem(Control control, WndWindowMessage message, ControlCallbackContext context) { switch (message.MessageType) { case WndWindowMessageType.SelectedButton: switch (message.Element.Name) { case "LanMapSelectMenu.wnd:ButtonBack": LanGameOptionsMenuCallbacks.GameOptions.CloseMapSelection(context); break; case "LanMapSelectMenu.wnd:ButtonOK": LanGameOptionsMenuCallbacks.GameOptions.SetCurrentMap(_previewMap); LanGameOptionsMenuCallbacks.GameOptions.CloseMapSelection(context); break; } break; } }
public static void ReplayMenuSystem(Control control, WndWindowMessage message, ControlCallbackContext context) { switch (message.MessageType) { case WndWindowMessageType.SelectedButton: switch (message.Element.Name) { case "ReplayMenu.wnd:ButtonLoadReplay": // TODO: Handle no selected item. var listBox = (ListBox)control.Window.Controls.FindControl("ReplayMenu.wnd:ListboxReplayFiles"); ReplayFile replayFile; using (var fileSystem = GetReplaysFileSystem(context.Game)) { var replayFileEntry = fileSystem.GetFile((string)listBox.Items[listBox.SelectedIndex].DataItem); replayFile = ReplayFile.FromFileSystemEntry(replayFileEntry); } // TODO: This probably isn't right. var mapFilenameParts = replayFile.Header.Metadata.MapFile.Split('/'); var mapFilename = $"Maps\\{mapFilenameParts[1]}\\{mapFilenameParts[1]}.map"; context.Game.Scene2D.WndWindowManager.PopWindow(); // TODO: set the correct factions & colors PlayerSetting[] pSettings = new[] { new PlayerSetting("America", new ColorRgb(255, 0, 0)), new PlayerSetting("Observer", new ColorRgb(255, 255, 255)), }; context.Game.StartMultiPlayerGame( mapFilename, new ReplayConnection(replayFile), pSettings, 0); break; case "ReplayMenu.wnd:ButtonBack": context.WindowManager.SetWindow(@"Menus\MainMenu.wnd"); // TODO: Go back to Replay sub-menu break; } break; } }
public static void SkirmishGameOptionsMenuSystem(Control control, WndWindowMessage message, ControlCallbackContext context) { if (!GameOptions.HandleSystem(control, message, context)) { switch (message.MessageType) { case WndWindowMessageType.SelectedButton: switch (message.Element.Name) { case "SkirmishGameOptionsMenu.wnd:ButtonBack": context.WindowManager.SetWindow(@"Menus\MainMenu.wnd"); // TODO: Go back to Single Player sub-menu break; } break; } } }
public static void NetworkDirectConnectSystem(Control control, WndWindowMessage message, ControlCallbackContext context) { switch (message.MessageType) { case WndWindowMessageType.SelectedButton: switch (message.Element.Name) { case "NetworkDirectConnect.wnd:ButtonBack": context.WindowManager.SetWindow(@"Menus\LanLobbyMenu.wnd"); break; case "NetworkDirectConnect.wnd:ButtonHost": NetworkUtils.HostGame(context, control.Window.Tag); break; case "NetworkDirectConnect.wnd:ButtonJoin": var comboboxRemoteIp = (ComboBox)control.Window.Controls.FindControl(ComboboxRemoteIPPrefix); if (System.Net.IPAddress.TryParse(comboboxRemoteIp.Controls[0].Text, out var ipAddress)) { var endPoint = new System.Net.IPEndPoint(ipAddress, Ports.SkirmishHost); NetworkUtils.JoinGame(context, endPoint); } break; } break; } }
public async Task <bool> HandleSystemAsync(Control control, WndWindowMessage message, ControlCallbackContext context) { switch (message.MessageType) { case WndWindowMessageType.SelectedButton: if (message.Element.Name == _optionsPath + ButtonSelectMap) { OpenMapSelection(context); } else if (message.Element.Name == _optionsPath + ButtonStart) { if (_game.SkirmishManager.Settings.Slots.Count(s => s.State != SkirmishSlotState.Open && s.State != SkirmishSlotState.Closed) > CurrentMap.NumPlayers) { context.WindowManager.ShowMessageBox( "GUI:ErrorStartingGame".Translate(), "LAN:TooManyPlayers".TranslateFormatted(CurrentMap.NumPlayers)); // TODO: this doesn't replace %d correctly yet return(true); } else { var availablePositions = new List <byte>(CurrentMap.NumPlayers); for (byte a = 1; a <= CurrentMap.NumPlayers; a++) { availablePositions.Add(a); } foreach (var slot in _game.SkirmishManager.Settings.Slots) { if (slot.StartPosition != 0) { availablePositions.Remove(slot.StartPosition); } } var random = new Random(_game.SkirmishManager.Settings.Seed); foreach (var slot in _game.SkirmishManager.Settings.Slots) { // Close open slots. if (slot.State == SkirmishSlotState.Open) { slot.State = SkirmishSlotState.Closed; } if (slot.State != SkirmishSlotState.Closed) { if (slot.StartPosition == 0) { slot.StartPosition = availablePositions.Last(); availablePositions.Remove(slot.StartPosition); } if (slot.FactionIndex == 0) { slot.FactionIndex = (byte)random.Next(slot.FactionIndex, _game.GetPlayableSides().Count()); } if (slot.ColorIndex == -1) { slot.ColorIndex = (sbyte)random.Next(slot.ColorIndex, _game.AssetStore.MultiplayerColors.Count); } } } await context.Game.SkirmishManager.HandleStartButtonClickAsync(); } } break; } return(false); }
public static void LanGameOptionsMenuInput(Control control, WndWindowMessage message, ControlCallbackContext context) { logger.Info($"Have message {message.MessageType} for control {message.Element.DisplayName}"); }
public static void HostGame(ControlCallbackContext context, object windowTag = null) { context.Game.SkirmishManager = new SkirmishManager.Host(context.Game); context.WindowManager.SetWindow(@"Menus\LanGameOptionsMenu.wnd", windowTag); }
public static void LanGameOptionsMenuSystem(Control control, WndWindowMessage message, ControlCallbackContext context) { logger.Info($"Have message {message.MessageType} for control {control.Name}"); if (!GameOptions.HandleSystem(control, message, context)) { switch (message.MessageType) { case WndWindowMessageType.SelectedButton: switch (message.Element.Name) { case "LanGameOptionsMenu.wnd:ButtonBack": context.Game.SkirmishManager.Quit(); //this should be called by the OnStop callback context.WindowManager.SetWindow(@"Menus\LanLobbyMenu.wnd"); break; default: logger.Warn($"No callback for {message.Element.Name}"); break; } break; } } }
public static void LanLobbyMenuSystem(Control control, WndWindowMessage message, ControlCallbackContext context) { switch (message.MessageType) { case WndWindowMessageType.SelectedButton: logger.Info($"Have message {message.MessageType} for control {message.Element.Name}"); switch (message.Element.Name) { case "LanLobbyMenu.wnd:ButtonBack": LeaveLobby(context); context.WindowManager.SetWindow(@"Menus\MainMenu.wnd"); // TODO: Go back to Multiplayer sub-menu break; case "LanLobbyMenu.wnd:ButtonHost": context.Game.LobbyManager.Hosting = true; context.WindowManager.SetWindow(@"Menus\LanGameOptionsMenu.wnd"); context.Game.SkirmishManager.Host(); break; case "LanLobbyMenu.wnd:ButtonJoin": var listBoxGames = (ListBox)control.Window.Controls.FindControl(ListBoxGamesPrefix); var selectedItemIndex = listBoxGames.SelectedIndex; var selectedItem = listBoxGames.Items[selectedItemIndex]; var dataItem = (KeyValuePair <IPEndPoint, LobbyPlayer>)selectedItem.DataItem; var endpoint = dataItem.Key; logger.Info($"Requesting to join {endpoint}"); context.Game.SkirmishManager.Join(endpoint); // TODO: Connect to the currently selected game break; case "LanLobbyMenu.wnd:ButtonDirectConnect": context.WindowManager.SetWindow(@"Menus\NetworkDirectConnect.wnd"); break; } break; } }
public static void SkirmishGameOptionsMenuSystem(Control control, WndWindowMessage message, ControlCallbackContext context) { switch (message.MessageType) { case WndWindowMessageType.SelectedButton: switch (message.Element.Name) { case "SkirmishGameOptionsMenu.wnd:ButtonSelectMap": context.WindowManager.PushWindow(@"Menus\SkirmishMapSelectMenu.wnd"); break; case "SkirmishGameOptionsMenu.wnd:ButtonStart": context.Game.Scene2D.WndWindowManager.PopWindow(); context.Game.StartGame( @"maps\Alpine Assault\Alpine Assault.map", // TODO new EchoConnection(), new[] { "America" }, // TODO: We need to receive the player list from UI. 0); break; case "SkirmishGameOptionsMenu.wnd:ButtonBack": context.WindowManager.SetWindow(@"Menus\MainMenu.wnd"); // TODO: Go back to Single Player sub-menu break; } break; } }
private static void LeaveLobby(ControlCallbackContext context) { context.Game.LobbyManager.Stop(); }
public static void NetworkDirectConnectSystem(Control control, WndWindowMessage message, ControlCallbackContext context) { switch (message.MessageType) { case WndWindowMessageType.SelectedButton: switch (message.Element.Name) { case "NetworkDirectConnect.wnd:ButtonBack": context.WindowManager.SetWindow(@"Menus\LanLobbyMenu.wnd"); // TODO: Go back to Multiplayer sub-menu break; case "NetworkDirectConnect.wnd:ButtonHost": context.WindowManager.SetWindow(@"Menus\LanGameOptionsMenu.wnd"); break; case "NetworkDirectConnect.wnd:ButtonJoin": // TODO: Connect to the currently selected game break; } break; } }
public override InputMessageResult HandleMessage(InputMessage message) { bool GetControlAtPoint(in Point2D mousePosition, out Control control, out Point2D controlRelativePosition) { control = _windowManager.GetControlAtPoint(mousePosition); if (control != null) { controlRelativePosition = control.PointToClient(mousePosition); return(true); } controlRelativePosition = Point2D.Zero;; return(false); } var context = new ControlCallbackContext(_windowManager, _game); switch (message.MessageType) { case InputMessageType.MouseMove: { var mouseOverControls = _windowManager.GetControlsAtPoint(message.Value.MousePosition).ToList(); foreach (var control in _lastMouseOverControls) { if (!mouseOverControls.Contains(control)) { control.InputCallback.Invoke( control, new WndWindowMessage(WndWindowMessageType.MouseExit, control), context); } } foreach (var control in mouseOverControls) { if (!_lastMouseOverControls.Contains(control)) { control.InputCallback.Invoke( control, new WndWindowMessage(WndWindowMessageType.MouseEnter, control), context); } } _lastMouseOverControls.Clear(); _lastMouseOverControls.AddRange(mouseOverControls); foreach (var control in mouseOverControls) { var mousePosition = control.PointToClient(message.Value.MousePosition); control.InputCallback.Invoke( control, new WndWindowMessage(WndWindowMessageType.MouseMove, control, mousePosition), context); } return(mouseOverControls.Count > 0 ? InputMessageResult.Handled : InputMessageResult.NotHandled); } case InputMessageType.MouseLeftButtonDown: { if (GetControlAtPoint(message.Value.MousePosition, out var element, out var mousePosition)) { element.InputCallback.Invoke( element, new WndWindowMessage(WndWindowMessageType.MouseDown, element, mousePosition), context); return(InputMessageResult.Handled); } break; } case InputMessageType.MouseLeftButtonUp: { if (GetControlAtPoint(message.Value.MousePosition, out var element, out var mousePosition)) { element.InputCallback.Invoke( element, new WndWindowMessage(WndWindowMessageType.MouseUp, element, mousePosition), context); return(InputMessageResult.Handled); } break; } // For the time being, just consume right and middle click events so that they don't go through controls: case InputMessageType.MouseRightButtonUp: case InputMessageType.MouseRightButtonDown: case InputMessageType.MouseMiddleButtonDown: case InputMessageType.MouseMiddleButtonUp: { return(GetControlAtPoint(message.Value.MousePosition, out var _, out var _) ? InputMessageResult.Handled : InputMessageResult.NotHandled); } case InputMessageType.KeyDown: { if (GetControlAtPoint(message.Value.MousePosition, out var element, out var mousePosition)) { element.InputCallback.Invoke( element, new WndWindowMessage(WndWindowMessageType.KeyDown, element, mousePosition, message.Value.Key), context); return(InputMessageResult.Handled); } break; } } return(InputMessageResult.NotHandled); }
public static void QuitMessageBoxSystem(Control control, WndWindowMessage message, ControlCallbackContext context) { switch (message.MessageType) { case WndWindowMessageType.SelectedButton: switch (message.Element.Name) { case "QuitMessageBox.wnd:ButtonCancel": context.WindowManager.PopWindow(); break; case "QuitMessageBox.wnd:ButtonOk": context.Game.Exit(); break; } break; } }
public static void LanLobbyMenuInput(Control control, WndWindowMessage message, ControlCallbackContext context) { logger.Trace($"Have message {message.MessageType} for control {control.Name}"); }
public async Task <bool> HandleSystemAsync(Control control, WndWindowMessage message, ControlCallbackContext context) { switch (message.MessageType) { case WndWindowMessageType.SelectedButton: if (message.Element.Name == _optionsPath + ButtonSelectMap) { OpenMapSelection(context); } else if (message.Element.Name == _optionsPath + ButtonStart) { if (_game.SkirmishManager.Settings.Slots.Count(s => s.State != SkirmishSlotState.Open && s.State != SkirmishSlotState.Closed) > CurrentMap.NumPlayers) { context.WindowManager.ShowMessageBox( "GUI:ErrorStartingGame".Translate(), "LAN:TooManyPlayers".TranslateFormatted(CurrentMap.NumPlayers)); // TODO: this doesn't replace %d correctly yet return(true); } else { await context.Game.SkirmishManager.HandleStartButtonClickAsync(); } } break; } return(false); }