Example #1
0
        protected async Task <AppResult <List <GameCard> > > GetTargetsByTitle(DtoEffectTargets effect, TargetingEffectParameters parameters, Game game)
        {
            var title = parameters.TargetParameter.ToString();

            var targets = await dbContext.GameCards.IncludeAll()
                          .Where(_ => _.Card.Title.Name == title && _.CardLocation == CardLocation.Board)
                          .ToListAsync();

            return(AppResult <List <GameCard> > .Success(targets));
        }
        public async Task <VoidAppResult> ExecuteEffect(DtoEffectTargets effect, Game game, User currentTurnPlayer,
                                                        CancellationToken cancellationToken = default(CancellationToken))
        {
            var cardEffect = await this.dbContext.CardEffects.SingleOrDefaultAsync(_ => _.Id == effect.CardEffectId);

            if (cardEffect == null)
            {
                return(VoidAppResult.Error(ErrorPreset.OnLoadingData));
            }

            return(await this.effects[cardEffect.EffectType].ExecuteEffect(effect, cardEffect, game, currentTurnPlayer));
        }
        public async Task <VoidAppResult> ExecuteEffect(DtoEffectTargets effect, CardEffect cardEffect, Game game, User currentTurnPlayer,
                                                        CancellationToken cancellationToken = default(CancellationToken))
        {
            var parameters = JsonConvert.DeserializeObject <ChangeStatsEffectParameters>(cardEffect.EffectParameters);

            AppResult <List <GameCard> > targetsResult;

            switch (parameters.TargetingType)
            {
            case TargetingType.Title:
                targetsResult = await base.GetTargetsByTitle(effect, parameters, game);

                break;

            case TargetingType.CharacterName:
                targetsResult = await base.GetTargetsByCharacterName(effect, parameters, game);

                break;

            default:     // TargetingType.NumberOfTargets
                targetsResult = await base.GetTargetsByIds(effect, parameters, game);

                break;
            }
            if (targetsResult.IsErrorResult)
            {
                return(targetsResult.GetVoidAppResult());
            }
            var targets = targetsResult.SuccessReturnValue;

            if (targets.Any(_ => _.CardLocation != CardLocation.Board))
            {
                return(VoidAppResult.Error(ErrorPreset.InvalidTargets));
            }

            foreach (var target in targets)
            {
                target.Health             += parameters.EffectStrength;
                target.StatModifiersCount += parameters.EffectStrength;

                if (target.Health <= 0)
                {
                    target.CardLocation = CardLocation.OutOfPlay;
                }
            }

            return(VoidAppResult.Success());
        }
Example #4
0
        protected async Task <AppResult <List <GameCard> > > GetTargetsByIds(DtoEffectTargets effect, TargetingEffectParameters parameters, Game game)
        {
            var targetsCount = Convert.ToInt32(parameters.TargetParameter);

            if (targetsCount != effect.TargetIds.Count)
            {
                return(AppResult <List <GameCard> > .Error(AppActionResultType.RuleError, $"You must choose exactly {targetsCount} targets to destroy."));
            }
            var targets = await dbContext.GameCards.IncludeAll()
                          .Where(_ => effect.TargetIds.Contains(_.Id))
                          .ToListAsync();

            if (targets.Count != effect.TargetIds.Count)
            {
                return(VoidAppResult.Error(ErrorPreset.InvalidTargets).GetErrorAppResult <List <GameCard> >());
            }

            return(AppResult <List <GameCard> > .Success(targets));
        }
        public async Task <VoidAppResult> ExecuteEffect(DtoEffectTargets effect, CardEffect cardEffect, Game game, User currentTurnPlayer, CancellationToken cancellationToken = default(CancellationToken))
        {
            var parameters = JsonConvert.DeserializeObject <DrawCardsEffectParameters>(cardEffect.EffectParameters);

            return(await this.cardService.DrawCard(game, currentTurnPlayer.Mail, parameters.CardsCount));
        }