public FrameTable(Vector2 position) : base(position) { snap = new CircleSnap(Arranger.staticPoint(0.5f, 0.5f), (ScaleManager.CardScale * 64f / 2f) + (ScaleManager.CardScaleSmall * (64f / 2f + 13f))); trumpOffset = Arranger.staticPoint(0.5f, 0.5f); LinePoly tableTabPoly = new LinePoly( Vector2.Zero, new Vector2(29, 0), new Vector2(29, 5), new Vector2(20, 16), new Vector2(-20, 16), new Vector2(-29, 5), new Vector2(-29, 0) ); tableTab = new PolyButton(Arranger.staticPoint(3 / 4f, 1f), tableTabPoly, ContentStore.tableTab, new Vector2(27, 0), ScaleManager.CardScale, 0f); LinePoly handTabPoly = new LinePoly( Vector2.Zero, new Vector2(29, 0), new Vector2(29, -5), new Vector2(20, -16), new Vector2(-20, -16), new Vector2(-29, -5), new Vector2(-29, -0) ); handTab = new PolyButton(Arranger.staticPoint(3 / 4f, 1f), handTabPoly, ContentStore.handTab, new Vector2(27, 14), ScaleManager.CardScale, 0f); tablePatch = ContentStore.tablePatch; namePlates = new List <NamePlate>(); }
public void setUp() { ICollection <Player> playerList = ClientDataStore.Instance.Players; foreach (Player player in playerList) { NineGridRow row = scoreboard.addRow(player.ID.ToString()); NineCell playerCell = row.getCell("player"); string nameText = player.Name; if (nameText.Length > 12) { nameText = nameText.Substring(0, 10) + "..."; } playerCell.Text = nameText; playerCell.Colour = ColourHelper.getPlayerColour(player.ID, playerList.Count); NineCell scoreCell = row.getCell("score"); scoreCell.Text = "0"; scoreCell.Alignment = 'C'; NineCell bidCell = row.getCell("bid"); bidCell.Text = "-"; bidCell.Alignment = 'C'; NineCell trickCell = row.getCell("tricks"); trickCell.Text = "0"; trickCell.Alignment = 'C'; } scoreboard.blink(new Vector2(scoreboard.Position.X, 0f)); scoreTab.blink(new Vector2(scoreTab.Position.X, scoreboard.Height)); stowPosition = Arranger.staticPoint(0f, 0f); stowPosition.Y -= scoreboard.Height; patchPos = scoreboard.Position.ToPoint(); patchSize = new Point(69 * ScaleManager.InterfaceScale, scoreboard.Height); patchPos.X = (int)((scoreTab.Position.X - (32.5f * ScaleManager.InterfaceScale)) + 0.5f); }
public PlayerIndicator(Vector2 position) : base(position) { offset = Arranger.staticPoint(0f, 0.5f); indicator = ContentStore.playerIndicator; glow = ContentStore.playerIndicatorGlow; indOrigin = new Vector2(0f, 7.5f); glowOrigin = new Vector2(0f, 10.5f); }
public PageSettings(MainGame mainGame) : base(mainGame) { Arranger arranger = new Arranger(true, 1, 'C', ScaleManager.InterfaceScale * 2); muteButton = new PatchButton(15, Vector2.Zero, buttonPatch, ScaleManager.InterfaceScale, SettingsHelper.Instance.Mute ? "Un-mute Sounds" : "Mute Sounds", () => { SettingsHelper.Instance.Mute = !SettingsHelper.Instance.Mute; AudioHelper.play(ContentStore.soundPop); muteButton.Text = SettingsHelper.Instance.Mute ? "Un-mute Sounds" : "Mute Sounds"; }); addButton(muteButton); arranger.addObject(muteButton, 0); toggleUsernamesButton = new PatchButton(15, Vector2.Zero, buttonPatch, ScaleManager.InterfaceScale, SettingsHelper.Instance.ShowNameplates ? "Hide Usernames" : "Show Usernames", () => { SettingsHelper.Instance.ShowNameplates = !SettingsHelper.Instance.ShowNameplates; AudioHelper.play(ContentStore.soundPop); toggleUsernamesButton.Text = SettingsHelper.Instance.ShowNameplates ? "Hide Usernames" : "Show Usernames"; }); addButton(toggleUsernamesButton); arranger.addObject(toggleUsernamesButton, 0); playerCountCheckButton = new PatchButton(15, Vector2.Zero, buttonPatch, ScaleManager.InterfaceScale, SettingsHelper.Instance.PlayerCountCheck ? "Min. Players: 3" : "Min. Players: 1", () => { SettingsHelper.Instance.PlayerCountCheck = !SettingsHelper.Instance.PlayerCountCheck; AudioHelper.play(ContentStore.soundPop); playerCountCheckButton.Text = SettingsHelper.Instance.PlayerCountCheck ? "Min. Players: 3" : "Min. Players: 1"; }); addButton(playerCountCheckButton); arranger.addObject(playerCountCheckButton, 0); demoModeButton = new PatchButton(15, Vector2.Zero, buttonPatch, ScaleManager.InterfaceScale, SettingsHelper.Instance.DemoMode ? "Demo Mode: ON" : "Demo Mode: OFF", () => { SettingsHelper.Instance.DemoMode = !SettingsHelper.Instance.DemoMode; AudioHelper.play(ContentStore.soundPop); demoModeButton.Text = SettingsHelper.Instance.DemoMode ? "Demo Mode: ON" : "Demo Mode: OFF"; }); addButton(demoModeButton); arranger.addObject(demoModeButton, 0); resetFirstRunButton = new PatchButton(15, Vector2.Zero, buttonPatch, ScaleManager.InterfaceScale, SettingsHelper.Instance.FirstRun ? "Have fun!" : "Clear Saved Data", () => { if (!SettingsHelper.Instance.FirstRun) { SettingsHelper.Instance.ResetFirstRun(); AudioHelper.play(ContentStore.soundPop); } resetFirstRunButton.Text = SettingsHelper.Instance.FirstRun ? "Have fun!" : "Reset First Run"; }); addButton(resetFirstRunButton); arranger.addObject(resetFirstRunButton, 0); PatchButton backButton = new PatchButton(5, Vector2.Zero, buttonPatch, ScaleManager.InterfaceScale, "Back", () => { AudioHelper.play(ContentStore.soundPop); mainGame.menuController.changeActivePage(mainGame.mainMenu); }); addButton(backButton); arranger.addObject(backButton, 0); arranger.performArrangements(); }
public ParallaxBackground(Vector2 position) : base(position) { tablePoint = new ParallaxPoint(Arranger.staticPoint(0.5f, 0f), 0); couchPoint = new ParallaxPoint(Arranger.staticPoint(0.5f, 1f), 4); legLPoint = new ParallaxPoint(Arranger.staticPoint(0f, 0f), 5); legRPoint = new ParallaxPoint(Arranger.staticPoint(1f, 0f), 5); armLPoint = new ParallaxPoint(Arranger.staticPoint(0f, 1f), 2); armRPoint = new ParallaxPoint(Arranger.staticPoint(1f, 1f), 2); }
public PageTutorial(MainGame mainGame) : base(mainGame) { whiteout = new Texture2D(mainGame.GraphicsDevice, 1, 1); whiteout.SetData <Color>(new Color[] { Color.White }); slides = new Texture2D[14]; anchors = new SlideAnchor[14]; for (int i = 1; i <= 14; i++) { slides[i - 1] = mainGame.Content.Load <Texture2D>("tutorial\\Tutorial_A" + i.ToString() + ".png"); anchors[i - 1] = new SlideAnchor(Arranger.staticPoint(0.5f, 0.5f)); addMovable(anchors[i - 1]); } leftArrow = mainGame.Content.Load <Texture2D>("tutorial\\arrowLeft.png"); rightArrow = mainGame.Content.Load <Texture2D>("tutorial\\arrowRight.png"); scale = (float)screenSize.Y / (float)slides[0].Height; texCentre = new Vector2(slides[0].Width / 2f, slides[0].Height / 2f); Arranger arranger = new Arranger(true, 3, 'R', ScaleManager.InterfaceScale * 2); LinePoly backPoly = new LinePoly( Vector2.Zero, new Vector2(-9.5f, -10f), new Vector2(9.5f, -10f), new Vector2(9.5f, 10f), new Vector2(-9.5f, 10f) ); navigateBack = new PolyButton(Vector2.Zero, backPoly, leftArrow, new Vector2(7.5f, 8f), ScaleManager.CardScale, 0f); arranger.addObject(navigateBack, 0); addMovable(navigateBack); LinePoly fwdPoly = new LinePoly( Vector2.Zero, new Vector2(-9.5f, -10f), new Vector2(9.5f, -10f), new Vector2(9.5f, 10f), new Vector2(-9.5f, 10f) ); navigateForward = new PolyButton(Vector2.Zero, fwdPoly, rightArrow, new Vector2(7.5f, 8f), ScaleManager.InterfaceScale, 0f); arranger.addObject(navigateForward, 2); addMovable(navigateForward); backButton = new PatchButton(5, Vector2.Zero, ContentStore.standardPatch, ScaleManager.InterfaceScale, "Back", () => { AudioHelper.play(ContentStore.soundPop); mainGame.menuController.changeActivePage(mainGame.mainMenu); }); addButton(backButton); arranger.addObject(backButton, 1); arranger.performArrangements(); }
public void setUp() { blackout = new Texture2D(MainGame.Instance.GraphicsDevice, 1, 1); blackout.SetData <Color>(new Color[] { Color.Black }); ICollection <Player> playerList = ClientDataStore.Instance.Players; for (int i = 0; i < playerList.Count; i++) { scoreboard.addRow(i.ToString()); } Arranger arranger = new Arranger(true, 1, 'C', 0); arranger.addObject(scoreboard, 0); arranger.performArrangements(); GameClient.Instance.frameController.editStow(this, Arranger.staticPoint(0f, 1f)); }
public override void update(GameTime gameTime) { base.update(gameTime); for (int i = 0; i < 14; i++) { if (i == index) { anchors[i].moveTo(position + Arranger.staticPoint(0.5f, 0.5f), ScaleManager.InterfaceScale); } else if (i > index) { anchors[i].moveTo(position + Arranger.staticPoint(1.5f, 0.5f), ScaleManager.InterfaceScale); } else if (i < index) { anchors[i].moveTo(position + Arranger.staticPoint(-0.5f, 0.5f), ScaleManager.InterfaceScale); } } foreach (GestureSample gesture in GestureManager.Gestures) { if (gesture.GestureType == GestureType.Tap) { if (navigateBack.checkForHit(gesture.Position)) { if (index != 0) { AudioHelper.play(ContentStore.soundRoll); index--; } } if (navigateForward.checkForHit(gesture.Position)) { if (index != 13) { AudioHelper.play(ContentStore.soundRoll); index++; } } } } }
public void update(GameTime gameTime) { int dequeueCount = 0; Arranger arranger = new Arranger(true, 1, 'C', 0); continueOperation.WaitOne(); try { foreach (MessageBanner message in activeMessages) { while (message == null) { ; } if (message.Expired) { dequeueCount++; } arranger.addObject(message, 0); } } catch (Exception e) { Console.WriteLine("[MessageQueue.update] 'activeMessages' collection: " + e.Message); } continueOperation.Set(); List <Arranger.ArrangedObject> objects = arranger.calculateArrangements(); try { foreach (Arranger.ArrangedObject obj in objects) { ((Movable)obj.Object).moveTo(obj.Position, 5); ((Movable)obj.Object).update(gameTime); } } catch (Exception e) { Console.WriteLine("[MessageQueue.update] 'objects' collection: " + e.Message); } for (int i = 0; i < dequeueCount; i++) { activeMessages.Dequeue(); } }
public PageMainMenu(MainGame mainGame) : base(mainGame) { Arranger arranger = new Arranger(true, 1, 'C', ScaleManager.InterfaceScale * 2); spacer = new Arranger.ArrangerSpacer(128 * ScaleManager.InterfaceScale, 64 * ScaleManager.InterfaceScale, false); addMovable(spacer); arranger.addObject(spacer, 0); PatchButton joinButton = new PatchButton(10, Vector2.Zero, buttonPatch, ScaleManager.InterfaceScale, "Join Game", () => { AudioHelper.play(ContentStore.soundPop); mainGame.menuController.changeActivePage(mainGame.joinMenu); }); addButton(joinButton); arranger.addObject(joinButton, 0); PatchButton hostButton = new PatchButton(10, Vector2.Zero, buttonPatch, ScaleManager.InterfaceScale, "Host Game", () => { AudioHelper.play(ContentStore.soundPop); mainGame.menuController.changeActivePage(mainGame.preHostGame); }); addButton(hostButton); arranger.addObject(hostButton, 0); PatchButton settingsButton = new PatchButton(10, Vector2.Zero, buttonPatch, ScaleManager.InterfaceScale, "Settings", () => { AudioHelper.play(ContentStore.soundPop); mainGame.menuController.changeActivePage(mainGame.settingsMenu); }); addButton(settingsButton); arranger.addObject(settingsButton, 0); PatchButton helpButton = new PatchButton(10, Vector2.Zero, buttonPatch, ScaleManager.InterfaceScale, "Help", () => { AudioHelper.play(ContentStore.soundPop); mainGame.menuController.changeActivePage(mainGame.tutorialPage); }); addButton(helpButton); arranger.addObject(helpButton, 0); arranger.performArrangements(); }
public FrameBid(Vector2 position) : base(position) { ticker = new Ticker(new Vector2(screenSize.X * 3f / 5f, screenSize.Y * 1f / 3f), ScaleManager.InterfaceScale); ticker.setRange(0, 0); button = new PatchButton(9, new Vector2(screenSize.X * 4f / 5f, screenSize.Y * 1f / 3f), ContentStore.standardPatch, ScaleManager.InterfaceScale, "Place Bid", () => { UltraClient.Instance.network.SendBid(new Bid(ticker.Value, ClientDataStore.Instance.CurrentPlayer.ID), null); Console.WriteLine("SENT BID"); GameClient.Instance.frameController.stow(this); }); patch = ContentStore.bidPatch; int padding = ScaleManager.InterfaceScale * 2; Arranger arranger = new Arranger(false, 1, 'R', padding); arranger.addObject(ticker, 0); arranger.addObject(button, 0); arranger.performArrangements(); Point topLeft = new Vector2(ticker.Position.X - ((ticker.Width / 2) + padding), ticker.Position.Y - ((ticker.Height / 2) + padding)).ToPoint(); patchSize = patch.wrap(new Point(ScaleManager.ScreenSize.X - topLeft.X, ticker.Height + 2 * padding), ScaleManager.InterfaceScale); patchPos = new Point(ScaleManager.ScreenSize.X - patchSize.X, (ScaleManager.ScreenSize.Y - patchSize.Y) / 2); }
public FrameHand(Vector2 position) : base(position) { hand = new CardContainer(); handSnap = new CardSnap(new Vector2(0, screenSize.Y), (float)screenSize.X, false); dropZone = new DropZone(Arranger.staticPoint(0.5f, 0.25f), Arranger.staticPoint(1f, 0.5f), dropZoneAction); table = new QuickCardTable(new Vector2(screenSize.X / 2f, screenSize.Y / 4f), new Vector2(screenSize.X, screenSize.Y / 2f)); clientData = ClientDataStore.Instance; clientData.LeadSuitChanged += new ClientDataStore.LeadSuitChangedHandler(leadSuitChanged); LinePoly tableTabPoly = new LinePoly( Vector2.Zero, new Vector2(29, 0), new Vector2(29, 5), new Vector2(20, 16), new Vector2(-20, 16), new Vector2(-29, 5), new Vector2(-29, 0) ); tableTab = new PolyButton(Arranger.staticPoint(3 / 4f, 1f), tableTabPoly, ContentStore.tableTab, new Vector2(27, 0), ScaleManager.CardScale, 0f); }
public FrameScoreboard(Vector2 position) : base(position) { scoreboard = new NineGrid(Vector2.Zero, ScaleManager.InterfaceScale, ScaleManager.LargeFont, new string[] { "player", "score", "bid", "tricks" }, new int[] { 12, 6, 4, 4 }); NineGridRow header = scoreboard.addRow("header"); NineCell playerCell = header.getCell("player"); playerCell.Text = "Player"; playerCell.Alignment = 'C'; NineCell scoreCell = header.getCell("score"); scoreCell.Text = "Score"; scoreCell.Alignment = 'C'; NineCell bidCell = header.getCell("bid"); bidCell.Text = "Bid"; bidCell.Alignment = 'C'; NineCell trickCell = header.getCell("tricks"); trickCell.Text = "Won"; trickCell.Alignment = 'C'; LinePoly scoreTabPoly = new LinePoly( Vector2.Zero, new Vector2(34.5f, 0), new Vector2(34.5f, 5), new Vector2(25.5f, 16), new Vector2(-25.5f, 16), new Vector2(-34.5f, 5), new Vector2(-34.5f, 0) ); scoreTab = new PolyButton(Arranger.staticPoint(1 / 4f, 0f), scoreTabPoly, ContentStore.scoreTab, new Vector2(32.5f, 0), ScaleManager.CardScale, 0f); Arranger arranger = new Arranger(true, 1, 'L', 0); arranger.addObject(scoreboard, 0); arranger.performArrangements(); trayPatch = ContentStore.scorePatch; patchPos = Point.Zero; patchSize = Point.Zero; }
public GameClient() { DebugCards.init(); frameController = new FrameController(); frameTable = new FrameTable(Vector2.Zero); frameHand = new FrameHand(Vector2.Zero); frameBid = new FrameBid(Vector2.Zero); frameScoreboard = new FrameScoreboard(Vector2.Zero); playerIndicator = new PlayerIndicator(Vector2.Zero); frameEndgame = new FrameEndgame(Vector2.Zero); frameController.addFrame(frameHand, Arranger.staticPoint(0f, 1f), true); frameController.addFrame(frameTable, Arranger.staticPoint(0f, -1f), false); frameController.addFrame(frameBid, Arranger.staticPoint(1f, 0f), false); frameController.addFrame(frameScoreboard, Vector2.Zero, false); frameController.addFrame(playerIndicator, Arranger.staticPoint(-1f, 0f), false); frameController.addFrame(frameEndgame, Arranger.staticPoint(0f, 0f), false); parallax = new ParallaxBackground(Vector2.Zero); frameHand.injectParallax(parallax); playerHand = frameHand.hand; }
protected override void LoadContent() { Content.RootDirectory = "Content"; ContentStore.load(Content); spriteBatch = new SpriteBatch(GraphicsDevice); Point screenSize = new Point(GraphicsDevice.DisplayMode.Width, GraphicsDevice.DisplayMode.Height); ScaleManager.setDefaultValues(screenSize, ContentStore.getAllFonts()); DebugGUI.init(GraphicsDevice); QRRenderer.init(GraphicsDevice); Arranger.init(screenSize); Card.setTexture(ContentStore.cardAtlas); Card.setDefaultScale(ScaleManager.CardScale); game = GameClient.Instance; menuController = new MenuController(); mainMenu = new PageMainMenu(this); joinMenu = new PageJoinGame(this); hostMenu = new PageHostGame(this); settingsMenu = new PageSettings(this); tutorialPage = new PageTutorial(this); preHostGame = new PagePreHostGame(this); pages = new List <Page>() { mainMenu, joinMenu, hostMenu, settingsMenu, tutorialPage, preHostGame }; menuController.addPage(mainMenu, new Point(0, 0)); menuController.addPage(joinMenu, new Point(1, 0)); menuController.addPage(preHostGame, new Point(-1, 0)); menuController.addPage(hostMenu, new Point(-2, 0)); menuController.addPage(settingsMenu, new Point(0, 1)); menuController.addPage(tutorialPage, new Point(0, -1)); menuController.changeActivePage(mainMenu); }
public PageHostGame(MainGame mainGame) : base(mainGame) { Arranger arranger = new Arranger(true, 2, 'C', ScaleManager.InterfaceScale * 2); spacer = new Arranger.ArrangerSpacer(100 * ScaleManager.InterfaceScale, false); addMovable(spacer); arranger.addObject(spacer, 0); ipField = new PatchField(2, 13, Vector2.Zero, ScaleManager.InterfaceScale, "IP", "Starting...", null, false); addField(ipField); arranger.addObject(ipField, 0); backButton = new PatchButton(5, Vector2.Zero, buttonPatch, ScaleManager.InterfaceScale, "Back", () => { AudioHelper.play(ContentStore.soundPop); mainGame.menuController.changeActivePage(mainGame.preHostGame); UltraServer.Instance.network.CloseServer(); UltraClient.Instance.network.CloseClient(); for (int i = 1; i <= 6; i++) { NineGridRow row = joinedGrid.getRow(i.ToString()); row.getCell("player").Text = "..."; row.getCell("player").Colour = Color.White; } ClientDataStore.Instance.resetPlayers(); }); addButton(backButton); arranger.addObject(backButton, 0); joinedGrid = new NineGrid(Vector2.Zero, ScaleManager.InterfaceScale, ScaleManager.LargeFont, new string[] { "player" }, new int[] { 13 }); NineGridRow header = joinedGrid.addRow("header"); header.getCell("player").Text = "Players"; header.getCell("player").Alignment = 'C'; for (int i = 1; i <= 6; i++) { NineGridRow playerRow = joinedGrid.addRow(i.ToString()); playerRow.getCell("player").Text = ("..."); playerRow.getCell("player").Alignment = 'C'; } addMovable(joinedGrid); arranger.addObject(joinedGrid, 1); beginButton = new PatchButton(13, Vector2.Zero, buttonPatch, ScaleManager.InterfaceScale, "Begin!", () => { AudioHelper.play(ContentStore.soundPop); int playerCount = UltraServer.Instance.network.Players.GetPlayers().Count; if ((playerCount < 3 && SettingsHelper.Instance.PlayerCountCheck) || (!SettingsHelper.Instance.PlayerCountCheck && playerCount == 0)) { if (!SettingsHelper.Instance.PlayerCountCheck) { mainGame.GeneralMessageQueue.Enqueue("At least 1 more player must join!"); return; } if (3 - playerCount > 1) { mainGame.GeneralMessageQueue.Enqueue("At least " + (3 - playerCount) + " more players must join!"); } else { mainGame.GeneralMessageQueue.Enqueue("At least " + (3 - playerCount) + " more player must join!"); } return; } if (mainGame.HostOnly) { mainGame.gameIsRunning = true; UltraServer.Instance.network.SendStartGameMessage(); GameScheduler.initialise(UltraServer.Instance.network.Players.GetPlayers(), UltraServer.Instance.network, UltraServer.Instance); UltraServer.Instance.HostStarted(); } else { UltraServer.Instance.network.SendStartGameMessage(); GameScheduler.initialise(UltraServer.Instance.network.Players.GetPlayers(), UltraServer.Instance.network, UltraServer.Instance); } Thread schedulerThread = new Thread(new ThreadStart(GameScheduler.schedulerThread)); schedulerThread.Start(); }); addButton(beginButton); arranger.addObject(beginButton, 1); arranger.performArrangements(); }
public void Enqueue(string text) { continueOperation.WaitOne(); activeMessages.Enqueue(new MessageBanner(Arranger.staticPoint(0.5f, 0.5f), text, 300f, 3000f, 300f, ScaleManager.InterfaceScale)); continueOperation.Set(); }
public PageJoinGame(MainGame mainGame) : base(mainGame) { Arranger arranger = new Arranger(true, 1, 'C', ScaleManager.InterfaceScale * 2); nameField = new PatchField(4, 15, Vector2.Zero, ScaleManager.InterfaceScale, "Name", "Enter Name...", "Enter your Name:", true); if (UltraClient.Instance.network.GetLastClientName() != null) { nameField.Text = UltraClient.Instance.network.GetLastClientName(); } addField(nameField); arranger.addObject(nameField, 0); String lastIP = UltraClient.Instance.network.GetLastServerIP(); String convertedIP = ""; try { convertedIP = IPHelper.decToSimple(lastIP + ":60347"); } catch { Console.WriteLine("[IPHelper] Error: Invalid conversion."); } ipField = new PatchField(4, 15, Vector2.Zero, ScaleManager.InterfaceScale, "IP", (lastIP != null ? convertedIP : "Enter Server..."), "Enter the server's IP:", true); addField(ipField); arranger.addObject(ipField, 0); Arranger.ArrangerSpacer spacer = new Arranger.ArrangerSpacer(128 * ScaleManager.InterfaceScale, 8 * ScaleManager.InterfaceScale, false); addMovable(spacer); arranger.addObject(spacer, 0); scanButton = new PatchButton(15, Vector2.Zero, buttonPatch, ScaleManager.InterfaceScale, "Scan QR Code", async() => { if (!joinAttempted) { AudioHelper.play(ContentStore.soundPop); var scanner = new ZXing.Mobile.MobileBarcodeScanner(); var result = await scanner.Scan(); if (result != null) { ipField.Text = result.ToString(); } } }); addButton(scanButton); arranger.addObject(scanButton, 0); joinButton = new PatchButton(15, Vector2.Zero, buttonPatch, ScaleManager.InterfaceScale, "Join", () => { if (!joinAttempted) { joinAttempted = true; joinButton.Text = "Joining..."; AudioHelper.play(ContentStore.soundPop); string standardIP = ""; String ip = ""; int port = 0; try { standardIP = IPHelper.simpleToDec(ipField.Text, true); if (standardIP.StartsWith("IP")) { MainGame.Instance.GeneralMessageQueue.Enqueue(standardIP); joinAttempted = false; SetJoinButtonText("Join"); AudioHelper.play(ContentStore.soundBad); return; } ip = IPHelper.getIP(standardIP); port = int.Parse(IPHelper.getPort(standardIP)); clientTask = UltraClient.Instance.network.StartClient(ip, port, 0, new Player(nameField.Text, 2)); nameField.Enabled = false; ipField.Enabled = false; } catch (Exception e) { UltraClient.Instance.ClientJoinFailed(null); Console.WriteLine("Error: " + e.Message); } } }); addButton(joinButton); arranger.addObject(joinButton, 0); backButton = new PatchButton(5, Vector2.Zero, buttonPatch, ScaleManager.InterfaceScale, "Back", () => { AudioHelper.play(ContentStore.soundPop); if (backButton.Text != "-") { AudioHelper.play(ContentStore.soundPop); // UltraClient.Instance.network.SendLeaveGameMessage(UltraClient.Instance.network.Me); // UltraClient.Instance.network.Me = null; // mainGame.GeneralMessageQueue.Enqueue("You left the game!"); // backButton.Text = "Back"; // joinButton.Text = "Join"; // joinAttempted = false; mainGame.menuController.changeActivePage(mainGame.mainMenu); } else { AudioHelper.play(ContentStore.soundBad); } }); addButton(backButton); arranger.addObject(backButton, 0); arranger.performArrangements(); }