示例#1
0
        public override async Task <IGame> AcceptChallenge(GameCreationViewModel vm)
        {
            await Connections.Kgs.Commands.ChallengeProposalAsync(Challenge, Challenge.IncomingChallenge);

            RefreshStatus();
            return(null);
        }
示例#2
0
        public override async Task CreateChallenge(GameCreationViewModel vm)
        {
            string rulesString = "chinese";

            switch (vm.SelectedRuleset)
            {
            case Core.Rules.RulesetType.AGA:
                rulesString = RulesDescription.RulesAga;
                break;

            case Core.Rules.RulesetType.Chinese:
                rulesString = RulesDescription.RulesChinese;
                break;

            case Core.Rules.RulesetType.Japanese:
                rulesString = RulesDescription.RulesJapanese;
                break;
            }
            var rules = new RulesDescription()
            {
                Handicap = vm.Handicap,
                Komi     = float.Parse(vm.CompensationString, CultureInfo.InvariantCulture),
                Rules    = rulesString,
                Size     = vm.SelectedGameBoardSize.Width
            };

            switch (vm.TimeControl.Style)
            {
            case Core.Time.TimeControlStyle.Absolute:
                rules.TimeSystem = RulesDescription.TimeSystemAbsolute;
                rules.MainTime   = vm.TimeControl.MainTime.AsInteger() * 60;
                break;

            case Core.Time.TimeControlStyle.Canadian:
                rules.TimeSystem    = RulesDescription.TimeSystemCanadian;
                rules.MainTime      = vm.TimeControl.MainTime.AsInteger() * 60;
                rules.ByoYomiStones = vm.TimeControl.StonesPerPeriod.AsInteger();
                rules.ByoYomiTime   = vm.TimeControl.OvertimeMinutes.AsInteger() * 60;
                break;

            case Core.Time.TimeControlStyle.Japanese:
                rules.TimeSystem     = RulesDescription.TimeSystemJapanese;
                rules.MainTime       = vm.TimeControl.MainTime.AsInteger() * 60;
                rules.ByoYomiTime    = vm.TimeControl.OvertimeSeconds.AsInteger();
                rules.ByoYomiPeriods = vm.TimeControl.NumberOfJapanesePeriods.AsInteger();
                break;

            case Core.Time.TimeControlStyle.None:
                rules.TimeSystem = RulesDescription.TimeSystemNone;
                break;
            }

            await Connections.Kgs.Commands.CreateChallenge(_room, vm.IsRankedGame, vm.IsPubliclyListedGame,
                                                           rules, vm.SelectedColor);

            Mvx.Resolve <IAppNotificationService>()
            .TriggerNotification(new Notifications.BubbleNotification(LocalizedStrings.ChallengeIsBeingCreated, null, NotificationType.Info));
            vm.CloseSelf();
        }
示例#3
0
 public override void OnLoad(GameCreationViewModel vm)
 {
     vm.FormTitle   = Localizer.Creation_NewLocalGame;
     vm.BlackPlayer =
         vm.PossiblePlayers.First();
     vm.WhitePlayer =
         vm.PossiblePlayers.First();
 }
示例#4
0
 public override void OnLoad(GameCreationViewModel vm)
 {
     // "Win a solo game against Fuego where Fuego is playing black and has a handicap of 3 stones or more."
     vm.FormTitle   = Localizer.Creation_NewLocalGame;
     vm.BlackPlayer =
         vm.PossiblePlayers.Last();
     vm.Handicap = 3;
 }
示例#5
0
 public override void OnLoad(GameCreationViewModel vm)
 {
     // This is a memory leak. Might be worth fixing later.
     Connections.Kgs.Events.Disconnection += (o, reason) =>
     {
         vm.CloseSelf();
     };
 }
 public override void OnLoad(GameCreationViewModel vm)
 {
     base.OnLoad(vm);
     vm.FormTitle                   = Localizer.Creation_OutgoingIgsRequest;
     vm.TimeControl.Style           = Core.Time.TimeControlStyle.Canadian;
     vm.TimeControl.StonesPerPeriod = "25";
     vm.TimeControl.OvertimeMinutes = "10";
     vm.TimeControl.MainTime        = "90";
 }
示例#7
0
        public override void OnLoad(GameCreationViewModel vm)
        {
            _vm = vm;
            LoadProposalDataIntoForm(Challenge.Proposal);

            Connections.Kgs.Events.Unjoin += Events_Unjoin;
            Challenge.StatusChanged       += Challenge_StatusChanged;
            RefreshStatus();
            base.OnLoad(vm);
        }
示例#8
0
 public override void OnLoad(GameCreationViewModel vm)
 {
     vm.IgsLimitation = true;
     vm.SelectedRuleset = Core.Rules.RulesetType.Japanese;
     vm.TimeControlStyles.Remove(Core.Time.TimeControlStyle.Japanese);
     // This is a memory leak. Might be worth fixing later.
     Connections.Igs.Events.Disconnected += (o, e) =>
     {
         vm.CloseSelf();
     };
 }
示例#9
0
 public bool Validate(GameCreationViewModel gameCreationViewModel, ref string errorMessage)
 {
     if (IsFluffy)
     {
         if (FluffyTreeDepth < 1)
         {
             errorMessage = _localizer.Validation_FluffyDepthTooSmall;
             return(false);
         }
     }
     if (IsFuego)
     {
         if (FuegoMaxGames < 10)
         {
             errorMessage = _localizer.Validation_FuegoGamesTooFew;
             return(false);
         }
         if (FuegoSingleton.Instance.CurrentGame != null)
         {
             errorMessage = LocalizedStrings.AGameWithFuegoAlreadyOpen;
             return(false);
         }
     }
     if (player.IsAi)
     {
         bool nonSquare = this.Capabitilies?.HandlesNonSquareBoards ?? true;
         if (!nonSquare && !gameCreationViewModel.SelectedGameBoardSize.IsSquare)
         {
             errorMessage = _localizer.Validation_SquareNeeded;
             return(false);
         }
         int minimumBoardSize = this.Capabitilies?.MinimumBoardSize ?? 0;
         int maximumBoardSize = this.Capabitilies?.MaximumBoardSize ?? int.MaxValue;
         if (minimumBoardSize > gameCreationViewModel.SelectedGameBoardSize.Width ||
             minimumBoardSize > gameCreationViewModel.SelectedGameBoardSize.Height)
         {
             errorMessage = _localizer.Validation_SizeTooSmall;
             return(false);
         }
         if (maximumBoardSize < gameCreationViewModel.SelectedGameBoardSize.Width ||
             maximumBoardSize < gameCreationViewModel.SelectedGameBoardSize.Height)
         {
             errorMessage = _localizer.Validation_SizeTooLarge;
             return(false);
         }
     }
     return(true);
 }
示例#10
0
 public override void OnLoad(GameCreationViewModel vm)
 {
     base.OnLoad(vm);
     _opponentDisplayName = _igsMatchRequest.OpponentName;
     foreach (var usr in Connections.Igs.Data.OnlineUsers)
     {
         if (usr.Name == _igsMatchRequest.OpponentName)
         {
             _opponentDisplayName = usr.Name + " (" + usr.Rank + ")";
         }
     }
     vm.OpponentName                = _opponentDisplayName;
     vm.FormTitle                   = Localizer.Creation_IncomingIgsChallenge;
     vm.RefusalCaption              = Localizer.RefuseChallenge;
     vm.CustomSquareSize            = _igsMatchRequest.BoardSize.ToString();
     vm.SelectedColor               = _igsMatchRequest.YourColor;
     vm.TimeControl.Style           = Core.Time.TimeControlStyle.Canadian;
     vm.TimeControl.OvertimeMinutes = _igsMatchRequest.OvertimeMinutes.ToString();
     vm.TimeControl.MainTime        = _igsMatchRequest.MainTime.ToString();
     vm.TimeControl.StonesPerPeriod = "25";
 }
        public override async Task CreateChallenge(GameCreationViewModel gameCreationViewModel)
        {
            var timeSettings = gameCreationViewModel.TimeControl;
            int mainTime;
            int overtime;

            switch (timeSettings.Style)
            {
            case Core.Time.TimeControlStyle.Absolute:
                mainTime = int.Parse(timeSettings.MainTime);
                overtime = 0;
                break;

            case Core.Time.TimeControlStyle.Canadian:
                mainTime = int.Parse(timeSettings.MainTime);
                overtime = int.Parse(timeSettings.OvertimeMinutes);
                break;

            case Core.Time.TimeControlStyle.None:
                mainTime = 0;
                overtime = 0;
                break;

            default:
                throw new Exception("This time control system is not supported.");
            }
            await Connections.Igs.Commands.RequestBasicMatchAsync(
                selectedChallengeableUser.Name,
                gameCreationViewModel.SelectedColor,
                gameCreationViewModel.SelectedGameBoardSize.Width,
                mainTime,
                overtime
                );

            Mvx.Resolve <Notifications.IAppNotificationService>()
            .TriggerNotification(
                new Notifications.BubbleNotification(String.Format(LocalizedStrings.ChallengeToXSent, selectedChallengeableUser.Name), null, Notifications.NotificationType.Info));
            gameCreationViewModel.CloseSelf();
        }
示例#12
0
 /// <summary>
 /// Called when the <paramref name="vm"/> loads. Use this to set properties of the model's controls.
 /// </summary>
 public abstract void OnLoad(GameCreationViewModel vm);
示例#13
0
        public override async Task <IGame> AcceptChallenge(GameCreationViewModel gameCreationViewModel)
        {
            IgsGame game = await Connections.Igs.Commands.AcceptMatchRequestAsync(_igsMatchRequest);

            return(game);
        }
示例#14
0
 public override async Task RefuseChallenge(GameCreationViewModel gameCreationViewModel)
 {
     await Connections.Kgs.Commands.GenericUnjoinAsync(Challenge);
 }
示例#15
0
 public override void OnLoad(GameCreationViewModel vm)
 {
     vm.FormTitle = Localizer.Creation_KgsChallengeCreation;
     base.OnLoad(vm);
 }
示例#16
0
 /// <summary>
 /// If this bundle can create a challenge, this creates the challenge.
 /// </summary>
 /// <param name="gameCreationViewModel">The game creation view model.</param>
 public virtual Task CreateChallenge(GameCreationViewModel gameCreationViewModel)
 {
     throw new InvalidOperationException("This bundle does not support the creation of challenges.");
 }
示例#17
0
 public override async Task RefuseChallenge(GameCreationViewModel gameCreationViewModel)
 {
     await Connections.Igs.Commands.DeclineMatchRequestAsync(_igsMatchRequest);
 }
示例#18
0
 public virtual Task RefuseChallenge(GameCreationViewModel gameCreationViewModel)
 {
     throw new InvalidOperationException("This bundle does not support refusing challenges.");
 }
示例#19
0
        public override async Task <IGame> AcceptChallenge(GameCreationViewModel gameCreationViewModel)
        {
            await Connections.Kgs.Commands.AcceptChallenge(Challenge);

            return(null);
        }