public MultiplayerOpeningView(IGameInfo game) { StackLayout tempStack; StackLayout mainStack = new StackLayout(); mainStack.Margin = new Thickness(5); _game = game; if (_game.CanHaveExtraComputerPlayers) { tempStack = new StackLayout(); tempStack.SetName(nameof(IMultiplayerOpeningViewModel.ExtraOptionsVisible)); LoadPlayerOptions(EnumPlayOptions.ComputerExtra, tempStack); mainStack.Children.Add(tempStack); } //if bindings cannot be reused, then requires rethinking (?) Button button; string singleText; singleText = nameof(IMultiplayerOpeningViewModel.CanShowSingleOptions); if (_game.MinPlayers == 2) { button = PrivateGetButton("Start Game With No Extra Players.", nameof(IMultiplayerOpeningViewModel.StartAsync)); button.CommandParameter = 0; button.SetBinding(IsVisibleProperty, GetHostBinding); mainStack.Children.Add(button); } button = PrivateGetButton("Auto Resume Networked Game", nameof(IMultiplayerOpeningViewModel.ResumeMultiplayerGameAsync)); button.SetBinding(IsVisibleProperty, GetHostBinding); mainStack.Children.Add(button); button = PrivateGetButton("Auto Resume Local Game", nameof(IMultiplayerOpeningViewModel.ResumeSinglePlayerAsync)); mainStack.Children.Add(button); bool canHuman; bool canComputer; canHuman = OpenPlayersHelper.CanHuman(_game); canComputer = OpenPlayersHelper.CanComputer(_game); if (canHuman && canComputer) { Grid tempgrid = new Grid(); AddLeftOverColumn(tempgrid, 1); AddLeftOverColumn(tempgrid, 1); tempStack = new StackLayout(); tempStack.SetName(singleText); AddControlToGrid(tempgrid, tempStack, 0, 0); LoadPlayerOptions(EnumPlayOptions.ComputerLocal, tempStack); tempStack = new StackLayout(); tempStack.SetName(singleText); AddControlToGrid(tempgrid, tempStack, 0, 1); LoadPlayerOptions(EnumPlayOptions.HumanLocal, tempStack); mainStack.Children.Add(tempgrid); } else if (canHuman) { tempStack = new StackLayout(); tempStack.SetName(singleText); LoadPlayerOptions(EnumPlayOptions.HumanLocal, tempStack); mainStack.Children.Add(tempStack); } else if (canComputer) { tempStack = new StackLayout(); tempStack.SetName(singleText); LoadPlayerOptions(EnumPlayOptions.ComputerLocal, tempStack); mainStack.Children.Add(tempStack); } else if (_game.SinglePlayerChoice == EnumPlayerChoices.Solitaire) { tempStack = new StackLayout(); tempStack.SetName(singleText); LoadPlayerOptions(EnumPlayOptions.Solitaire, tempStack); mainStack.Children.Add(tempStack); } button = PrivateGetButton("Start Network Game (Host)", nameof(IMultiplayerOpeningViewModel.HostAsync)); mainStack.Children.Add(button); button = PrivateGetButton("Join Network Game", nameof(IMultiplayerOpeningViewModel.ConnectAsync)); mainStack.Children.Add(button); button = PrivateGetButton("Cancel Selection", nameof(IMultiplayerOpeningViewModel.CancelConnectionAsync)); mainStack.Children.Add(button); tempStack = new StackLayout(); tempStack.SetName(nameof(IMultiplayerOpeningViewModel.HostCanStart)); SimpleLabelGridXF playerInfo = new SimpleLabelGridXF(); playerInfo.AddRow("Players Connected", nameof(IMultiplayerOpeningViewModel.ClientsConnected)); playerInfo.AddRow("Previous Players", nameof(IMultiplayerOpeningViewModel.PreviousNonComputerNetworkedPlayers)); tempStack.Children.Add(playerInfo.GetContent); mainStack.Children.Add(tempStack); Content = mainStack; }