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()); }
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)); }