public AttackOutcome AttackOpponent(Guid boardId, AttackRequest attackRequest) { _setupValidationService.ValidateCoordinatePlacement(attackRequest.Coordinate); var attackCoordinate = attackRequest.Coordinate; var board = _boardRepository.Find(boardId); if (board == null) { throw new BadRequestException($"Board ID '{boardId}' was not found."); } var ships = board.Ships; foreach (var ship in ships) { var shipCoordinates = CoordinateHelper.GetCoordinates(ship.TopLeftCoordinate, ship.ShipLength, ship.Alignment); var conflictWithExistingShip = shipCoordinates.FirstOrDefault(a => a.Equals(attackCoordinate)); if (conflictWithExistingShip != null) { ship.SuccessfulHits.Add(attackCoordinate); return(AttackOutcome.Hit); } } return(AttackOutcome.Miss); }
public async Task <Result <IEnumerable <Party> > > RequestPartyWithFilter() { Result <IEnumerable <Party> > requestResult = new Result <IEnumerable <Party> >(); Coordinates coordinates = await CoordinateHelper.GetCoordinates(); try { //Format coordinates var uri = $"?lat={coordinates.Latitude}&lon={coordinates.Longitude}&radius={_storageService.Storage.FilterRadius}" .Replace(",", "."); //Backend does not like , in the request requestResult = await _clientService.SendRequest <IEnumerable <Party> >("api/party", RestType.Get, urlQuery : uri, token : Token?.AccessToken); } catch (Exception e) { DebugHelper.PrintDebug(DebugType.Error, "Fetching parties failed.\n" + e); requestResult.RequestFailedToException = true; } await HandleCaching(requestResult, PartyListType.Local); //Check if the request was a success SetNearParties(requestResult.Data); return(requestResult); }
private async Task InitializeMapCoordinates() { var coordinates = await CoordinateHelper.GetCoordinates(); if (coordinates != null) { MoveMapToCoordinates(coordinates); } }
private void ShipNotConflicting(PlaceShipRequest placeShipRequest) { var newShipCoordinates = CoordinateHelper.GetCoordinates(placeShipRequest.TopLeftCoordinate, placeShipRequest.ShipLength, placeShipRequest.Alignment); var board = _boardRepository.Find(placeShipRequest.BoardId); var ships = board.Ships; foreach (var existingShip in ships) { var existingCoordinates = CoordinateHelper.GetCoordinates(existingShip.TopLeftCoordinate, existingShip.ShipLength, existingShip.Alignment); var conflictWithExistingShip = newShipCoordinates.Any(s => existingCoordinates.Any(e => e.Equals(s))); if (conflictWithExistingShip) { throw new BadRequestException("This coordinate is already occupied by an existing ship."); } } }