예제 #1
0
        public IEnumerable <Player> GetPlayerFromAttackData(AttackDto data)
        {
            List <Player> attackedPlayers = new List <Player>();

            var targetGameObjet = GridGenerator.Instance.GetCell(data.gridPos).cellGameObject;

            var colliders = Physics.OverlapSphere(targetGameObjet.transform.position, Player.Spells[data.indexSpell].Attributes.Radius.FinalValue, LayerMask.GetMask("GameplayElement"))
                            .Where(x => x.name.Contains("Grid Cell"));

            foreach (var collider in colliders)
            {
                var target = GridGenerator.Instance.GetCell(collider.gameObject);

                var attackedPlayer = LocalPlayer.PlayerTeam.Characters.FirstOrDefault(x => x.PositionOnGrid == target.Position);
                if (attackedPlayer == null)
                {
                    attackedPlayer = OtherPlayer.PlayerTeam.Characters.FirstOrDefault(x => x.PositionOnGrid == target.Position);
                }

                if (attackedPlayer != null)
                {
                    attackedPlayers.Add(attackedPlayer);
                }
            }

            return(attackedPlayers);
        }
        public AttackDto Attack()
        {
            AttackDto attackDto = new AttackDto
            {
                Damage             = RandomNumberProvider.GetNumber(15) + 25,
                ShouldBreakDefence = RandomNumberProvider.GetNumber(4) == 0
            };

            return(attackDto);
        }
예제 #3
0
        private void RaiseEventPhoton(int indexSpell, Vector2Int posGridToAttack)
        {
            byte evCode     = (byte)ConnectorPhoton.EventCode.EvSpell;
            var  attackData = new AttackDto(posGridToAttack, indexSpell);

            string content  = JsonUtility.ToJson(attackData);
            bool   reliable = true;

            PhotonNetwork.RaiseEvent(evCode, content, reliable, new RaiseEventOptions()
            {
                CachingOption = EventCaching.DoNotCache, Receivers = ReceiverGroup.All
            });
        }
        public async Task <ActionResult <AttackResultDto> > AttackShip([FromBody] AttackDto attackDto)
        {
            try
            {
                var result = await _battleShipService.AttackShip(attackDto);

                return(Ok(result));
            }
            catch (NotFoundException ex)
            {
                return(NotFound(ex.Message));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex));
            }
        }
예제 #5
0
 public static IAttack ToDomainObject(this AttackDto dto)
 {
     return(new Attack
     {
         Accuracy = dto.Accuracy,
         AdditionalEffects = dto.AdditionalEffects != null
             ? dto.AdditionalEffects.Select(x => x.ToDomainObject()).ToList()
             : null,
         BoostStats = dto.BoostStats,
         TypeID = (ElementalType)dto.TypeID,
         ID = dto.ID,
         IsSpecial = dto.IsSpecial,
         Level = dto.Level,
         Name = dto.Name,
         Power = dto.Power
     });
 }
예제 #6
0
        public async Task <AttackResultDto> AttackShip(AttackDto attackDto)
        {
            var player = await _battleShipDbContext.Players.FindAsync(attackDto.PlayerId);

            if (player == null)
            {
                throw new NotFoundException(nameof(Player), attackDto.PlayerId);
            }

            var board = await _battleShipDbContext.Boards.FindAsync(attackDto.BoardId);

            if (board == null)
            {
                throw new NotFoundException(nameof(Board), attackDto.BoardId);
            }

            var coordinate = await _battleShipDbContext.BattleShipCoordinates.Where(x => x.BattleShip.Board == board)
                             .Where(x => x.X == attackDto.X && x.Y == attackDto.Y).FirstOrDefaultAsync();

            // When miss happens
            if (coordinate == null)
            {
                return new AttackResultDto()
                       {
                           X = attackDto.X, Y = attackDto.Y, IsHit = false
                       }
            }
            ;

            // When hit happens
            if (!coordinate.IsHit)
            {
                coordinate.IsHit = true;

                await _battleShipDbContext.SaveChangesAsync();
            }

            return(new AttackResultDto()
            {
                X = coordinate.X,
                Y = coordinate.Y,
                IsHit = coordinate.IsHit
            });
        }
    }
예제 #7
0
        public async Task <AttackDto> GetAttackDto(int userId)
        {
            var currentPlayer = await _dbContext.Players
                                .Include(p => p.City)
                                .Include(p => p.Army)
                                .ThenInclude(a => a.Squads)
                                .ThenInclude(s => s.SquadUnits)
                                .ThenInclude(su => su.Unit)
                                .Include(p => p.Game)
                                .Where(p => p.UserId == userId)
                                .SingleOrDefaultAsync();

            var players = await _dbContext.Players
                          .Include(p => p.City)
                          .Include(p => p.User)
                          .Where(p => p.GameId == currentPlayer.Game.Id && p.Id != currentPlayer.Id)
                          .ToListAsync();

            var defendingSquad = currentPlayer.Army.Squads
                                 .Where(s => s.CityId == currentPlayer.City.Id)
                                 .SingleOrDefault();

            var attackDto = new AttackDto
            {
                Players = new List <PlayerMainPropertiesDto>()
            };

            attackDto.FreeUnits = _squadService.GetUnitListDto(defendingSquad);

            foreach (var player in players)
            {
                attackDto.Players.Add(new PlayerMainPropertiesDto
                {
                    Id       = player.City.Id,
                    UserName = player.User.UserName,
                    CityName = player.City.Name
                });
            }

            return(attackDto);
        }
 public async Task <AttackResultDto> AttackShip(AttackDto attackDto)
 {
     return(await _shipRepo.AttackShip(attackDto));
 }