@PostConstruct void initialize() { mapDimension = map.getDimension(); updateSegmentSize(20); clientServerEventBus.register(this); syncServerClientEventBus.register(this); }
@VisibleForTesting ICity calculateCostructionCity() { double width = map.getDimension().getWidth(); List<ICity> chosableCities = map.getCities().stream() .filter(city -> city.getCoordinates().getX() < width * 0.5) .collect(toList()); return chosableCities.get(rnd.nextInt(chosableCities.size())); } }
@VisibleForTesting ICity calculateCostructionCity() { double width = map.getDimension().getWidth(); List<ICity> chosableCities = map.getCities().stream() .filter(city -> city.getCoordinates().getX() < width * 0.5) .collect(toList()); return chosableCities.get(rnd.nextInt(chosableCities.size())); } }
@Override public List<ICity> findListWithConsumptionMinimalDistance(ICity distanceToCity, IWare ware, INavigableVessel vessel) { TreeMap<Double, ICity> cityMap = new TreeMap<>(); List<ICity> reachableCities = proxy.getAllReachableNonBlockadedCities(vessel); double mapWidth = map.getDimension().getWidth(); for (ICity city : productionAndConsumption.keySet() ) { if (!city.equals(distanceToCity)) { int consumptionAmount = productionAndConsumption.get(city).getConsumptionAmount(ware); double distance = distanceToCity.getCoordinates().distance(city.getCoordinates()); double distanceFactor = distance/mapWidth; if (reachableCities.contains(city)) { cityMap.put(1 / (distanceFactor * consumptionAmount), city); } } } return cityMap.values().stream().collect(Collectors.toList()); }
@Override public List<ICity> findListWithProductionsMinimalDistance(ICity distanceToCity, IWare ware, INavigableVessel vessel) { TreeMap<Double, ICity> cityMap = new TreeMap<>(); List<ICity> reachableCities = proxy.getAllReachableNonBlockadedCities(vessel); double mapWidth = map.getDimension().getWidth(); for (ICity city : productionAndConsumption.keySet() ) { if (!city.equals(distanceToCity)) { int productionAmount = productionAndConsumption.get(city).getProductionAmount(ware); double distance = distanceToCity.getCoordinates().distance(city.getCoordinates()); double distanceFactor = distance/mapWidth; if (reachableCities.contains(city)) { cityMap.put(1 / (distanceFactor * productionAmount), city); } } } return cityMap.values().stream().collect(Collectors.toList()); }
@Override public List<ICity> findCitiesWithNeedMinimalDistance(ICity distanceToCity, IWare ware, INavigableVessel vessel) { TreeMap<Double, ICity> cityMap = new TreeMap<>(); double mapWidth = map.getDimension().getWidth(); List<ICity> reachableCities = proxy.getAllReachableCities(vessel); for (ICity city : productionAndConsumption.keySet() ) { if (!city.equals(distanceToCity)) { int productionAmount = productionAndConsumption.get(city).getProductionAmount(ware); int consumtionAmount = productionAndConsumption.get(city).getConsumptionAmount(ware); double consumedRation = productionAmount - consumtionAmount; double distance = distanceToCity.getCoordinates().distance(city.getCoordinates()); double distanceFactor = distance/mapWidth; if (reachableCities.contains(city)) { cityMap.put(1 / (distanceFactor * consumedRation), city); } } } return Lists.reverse(cityMap.values().stream().collect(Collectors.toList())); } }
/** * Calculate the weekly premium. * @param city for which the refund is to be calculated * @return refund amount. */ public int getWeeklyReund(ICity city) { double xLocation = city.getCoordinates().getX(); // 2 at the right border and 1 at the left border double westwardFactor = 1 + (map.getDimension().getWidth() - xLocation) / map.getDimension().getWidth(); int currentYear = date.getCurrentDate().getYear(); if (currentYear <= 1200) { return (int)westwardFactor*30; } int from1200 = currentYear - 1200; double yearFactor = from1200*6.0/200; return (int)(westwardFactor*yearFactor)*30; }
/** * Calculate the required weapons strength for a city. * @param city for which the weapon strength is to be calculated * @return required strength */ public int getRequiredWeaponStrength(ICity city) { double xLocation = city.getCoordinates().getX(); // 2 at the right border and 1 at the left border double westwardFactor = 1 + (map.getDimension().getWidth() - xLocation) / map.getDimension().getWidth(); int currentYear = date.getCurrentDate().getYear(); if (currentYear <= 1200) { return (int)westwardFactor; } int from1200 = currentYear - 1200; double yearFactor = from1200*6.0/200; return (int)(westwardFactor*yearFactor); }
double width = map.getDimension().getWidth(); int nbRequiredWares = wares.size(); double distanceOnePenaltyPoint = width / (nbRequiredWares * 4);
@Subscribe public void handleDayChange(ClockTickDayChange event) { LocalDateTime today = date.getCurrentDate(); LocalDateTime shouldLeaveWhenArrivedBefore = today.minusDays(captainsState.getMaxDaysPresent()); for (ICaptain captain : captainsState.getAllFreeCaptains()) { Optional<ICity> city = captainsState.findCaptainsCurrentCity(captain); if (city.isPresent()) { LocalDateTime arrival = captainsState.getArrivalDate(captain); if (arrival.isBefore(shouldLeaveWhenArrivedBefore)) { ICity nextCity = getRandomCity(); while (city.get().equals(nextCity)) { nextCity = getRandomCity(); } // calculate days in between double distance = Math.abs(city.get().getCoordinates().getX() - nextCity.getCoordinates().getX()); double percentage = distance/map.getDimension().getWidth(); int days = (int) Math.rint(10*percentage); captainsState.hireCaptain(captain, city.get()); // This removes the current mapping LocalDateTime arrivalDate = date.getCurrentDate().plusDays(days); captainsState.assignCaptainToCity(captain, city.get(), arrivalDate); } } } }
if (task instanceof IBuildLandPassage) { IBuildLandPassage passage = (IBuildLandPassage) task; double width = map.getDimension().getWidth(); double heigth = map.getDimension().getHeight(); double width = map.getDimension().getWidth(); double heigth = map.getDimension().getHeight(); String orientation = messageSource.getMessage("orientation.west", new Object[]{city.getCity().getName()}, locale.getCurrentLocal()); if (newSettlement.getLocation().getY() < heigth/2) {
@Subscribe public void handleShipEntersPort(ShipEntersPortEvent event) { ICity city = event.getCity(); final IShipOwner owner = event.getShip().getOwner(); if (owner instanceof IHumanPlayer && owner.equals(viewState.getPlayer())) { List<INavigableVessel> ships = ((IHumanPlayer)owner).findShips(city); if (ships.size() == 1) { Dimension2D dim = map.getDimension(); scale = 192 / dim.getHeight(); double viewportOffset = imgView.getViewport().getMinX(); Platform.runLater(() -> drawShipPresenceInCity(city, viewportOffset)); if (shouldSwitchToCity(city)) { clientEventBus.post(new SwitchCity(city)); } } } } private boolean shouldSwitchToCity(ICity toCity) {
/** * Should repair only if deamage is heavy or if the ship is in a city in the * west half of the map. * @param vessel that should be checked for repair need. * @param city current possition of the vessel. * @return true if the vessel should be repaired in the city. */ @Override public boolean shouldRepair(INavigableVessel vessel, ICity city) { Preconditions.checkArgument(vessel.getLocation().equals(city.getCoordinates()), "The vessel is not in city "+city.getName()+" but at "+vessel.getLocation()); int damage = vessel.getDamage(); if (damage > 90) { return true; } double width = map.getDimension().getWidth(); return city.getCoordinates().getX() < width / 2; } }
int mapWidth = (int) map.getDimension().getWidth(); double eastFactor = x/mapWidth/0.5; double factor = Math.max(startYearPart-eastFactor,0);
public void initializeMapImage(IPlayer player) { Image mapImage = imageUtilities.createMapWithCities(map, player); Dimension2D dim = map.getDimension(); scale = 192 / dim.getHeight(); double widthOrigImg = 236 / scale; double xlocation = player.getHometown().getCoordinates().getX(); double x = Math.max(0, xlocation - widthOrigImg/2); Rectangle2D viewport = new Rectangle2D(x, 0, widthOrigImg, dim.getHeight()); final Image transferableMap = mapImage; Platform.runLater(() -> { imgView.setViewport(viewport); imgView.setImage(transferableMap); for (ICity city : map.getCities()) { if (city.getCoordinates().getX() >= x && city.getCoordinates().getX() <= x + widthOrigImg) { List<INavigableVessel> ships = player.findShips(city); if (!ships.isEmpty()) { drawShipPresenceInCity(city, x); } } } }); }
public void widthChange(double oldWidth, double newWidth) { List<Polygon> polygons = new ArrayList<>(); Dimension2D origDim = map.getDimension(); double scale = controlHeight/origDim.getHeight(); if (imgView instanceof MainGameImageView) { String imageName = getImageNameFromScene(); Image tmpImg = xmlLoader.getImage(imageName); ImageData imgData = xmlLoader.getImageData(imageName); Dimension2D targetDim = new Dimension2D(newWidth, controlHeight); ImageScaleState state = new ImageScaleState(new Dimension2D(tmpImg.getWidth(), tmpImg.getHeight()), targetDim, imgData.getCrop(), imgData.getMaxCrop()); ImageView tmpImgView = imageUtils.cropAndScale(imageName, state); ((MainGameImageView) imgView).setImageView(newWidth, controlHeight, tmpImgView, state); polygons = polygonInitFactory.getScenePolygonInitializer().initialzePolygons(state); } if (imgView instanceof SeamapImageView) { Dimension2D targetDim = new Dimension2D(origDim.getWidth()*scale, origDim.getHeight()*scale); IHumanPlayer player = viewState.getPlayer(); Image mapImage = imageUtils.createMapWithCities(map, player); final Font openPatrician18 = Font.font("OpenPatrician", 18); mapImage = imageUtils.addCityNames(map, mapImage, openPatrician18); mapImage = imageUtils.scale(mapImage, targetDim, scale); ((SeamapImageView)imgView).resetImage(mapImage,newWidth, controlHeight, scale); } imgView.resetPolygons(polygons); placeHolder.setWidth(newWidth); this.controlWidth = newWidth; }
public void heightChange(double oldHeight, double newHeigth) { List<Polygon> polygons = new ArrayList<>(); Dimension2D origDim = map.getDimension(); double scale = newHeigth/origDim.getHeight(); if (imgView instanceof MainGameImageView) { String imageName = getImageNameFromScene(); Image tmpImg = xmlLoader.getImage(imageName); ImageData imgData = xmlLoader.getImageData(imageName); Dimension2D targetDim = new Dimension2D(controlWidth, newHeigth); ImageScaleState state = new ImageScaleState(new Dimension2D(tmpImg.getWidth(), tmpImg.getHeight()), targetDim, imgData.getCrop(), imgData.getMaxCrop()); ImageView tmpImgView = imageUtils.cropAndScale(imageName, state); ((MainGameImageView) imgView).setImageView(controlWidth, newHeigth, tmpImgView, state); polygons = polygonInitFactory.getScenePolygonInitializer().initialzePolygons(state); } if (imgView instanceof SeamapImageView) { Dimension2D targetDim = new Dimension2D(origDim.getWidth()*scale, origDim.getHeight()*scale); IHumanPlayer player = viewState.getPlayer(); Image mapImage = imageUtils.createMapWithCities(map, player); final Font openPatrician18 = Font.font("OpenPatrician", 18); mapImage = imageUtils.addCityNames(map, mapImage, openPatrician18); mapImage = imageUtils.scale(mapImage, targetDim, scale); ((SeamapImageView)imgView).resetImage(mapImage,controlWidth, newHeigth, scale); } imgView.resetPolygons(polygons); placeHolder.setHeight(newHeigth); this.controlHeight = newHeigth; } @Subscribe