Package ch.fusun.baron.basic.command

Source Code of ch.fusun.baron.basic.command.AnnectLandCommand

package ch.fusun.baron.basic.command;

import ch.fusun.baron.core.injection.Configure;
import ch.fusun.baron.core.injection.Inject;
import ch.fusun.baron.map.Tile;
import ch.fusun.baron.map.api.GameMapService;
import ch.fusun.baron.player.Dynasty;
import ch.fusun.baron.player.api.Country;
import ch.fusun.baron.property.api.PropertyService;

/**
* Annects the land for the specified player
*/
public class AnnectLandCommand extends MoneyTurnCommand {

  @Configure(value = "10")
  private int TURN_COST;
  @Configure(value = "10")
  private int MONEY;
  @Inject
  private transient GameMapService mapService;
  @Inject
  private transient PropertyService propertyService;

  private Tile tile;
  private Dynasty dynasty;
  private Country country;

  /**
   * Injection constructor
   */
  public AnnectLandCommand() {
    // injection
  }

  /**
   * @param dynasty
   *            The dynasty
   * @param country
   *            The country
   * @param tile
   *            The tile
   */
  public AnnectLandCommand(Dynasty dynasty, Country country, Tile tile) {
    this.dynasty = dynasty;
    this.country = country;
    this.tile = tile;
  }

  @Override
  public boolean isAllowedImpl() {
    return !propertyService.isOwned(tile) && countryHasAdjacentTiles();
  }

  private boolean countryHasAdjacentTiles() {
    int width = mapService.getWidth();
    int height = mapService.getHeight();
    for (int i = -1; i < 2; i++) {
      for (int j = -1; j < 2; j++) {
        if (i * j == 0) {// Not diagonal, not the center itself
          Tile current = mapService.getTile((tile.getX() + i + width)
              % width, (tile.getY() + j + height) % height);
          if (country.equals(propertyService.getOwnership(current))) {
            return true;
          }
        }
      }
    }
    return false;
  }

  @Override
  public void executeImpl() {
    propertyService.setOwnership(country, tile);
  }

  @Override
  protected int getTurnCost() {
    return TURN_COST;
  }

  @Override
  protected Dynasty getDynasty() {
    return dynasty;
  }

  @Override
  protected int getMoneyCost() {
    return MONEY;
  }

}
TOP

Related Classes of ch.fusun.baron.basic.command.AnnectLandCommand

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.