Package ch.sahits.game.openpatrician.model

Source Code of ch.sahits.game.openpatrician.model.Player

package ch.sahits.game.openpatrician.model;

import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

import ch.sahits.game.openpatrician.model.building.IBuilding;
import ch.sahits.game.openpatrician.model.building.ITradingOffice;
import ch.sahits.game.openpatrician.model.city.ICity;
import ch.sahits.game.openpatrician.model.impl.Company;
import ch.sahits.game.openpatrician.model.personal.EEconomicCareer;
import ch.sahits.game.openpatrician.model.personal.ESocialRank;
import ch.sahits.game.openpatrician.model.personal.ICareer;
import ch.sahits.game.openpatrician.model.personal.IPersonalData;
import ch.sahits.game.openpatrician.model.personal.ISpouseData;
import ch.sahits.game.openpatrician.model.ship.IShip;
import ch.sahits.util.ClassChecker;

class Player implements IPlayer{

  private final LinkedList<IShip> fleet;
  private ESocialRank rank; // TODO this has to be updated monthly
  private ICareer careerLevel; // TODO this has to be updated
  private IPersonalData personalData;
  private ISpouseData spouse;
  private final ICompany company;
 
 
  public Player(ICity homeTown, IPersonalData personalData, long cash,ESocialRank rank) {
    super();
    fleet = new LinkedList<IShip>();
    this.rank=rank;
    careerLevel=EEconomicCareer.INEXPERIANCED;
    this.personalData=personalData;
    company = new Company(this, homeTown, cash);
  }

  @Override
  public String getName() {
    return personalData.getName();
  }

  @Override
  public String getLastName() {
    return personalData.getLastName();
  }

  @Override
  public ICity getHometown() {
    return company.getHomeTown();
  }

  @Override
  public List<IShip> getFleet() {
    return Collections.unmodifiableList(fleet);
  }

  @Override
  public boolean isMale() {
    return personalData.isMale();
  }

  @Override
  public void addShip(IShip ship) {
    fleet.add(ship);
  }

  @Override
  public void removeShip(IShip ship) {
    fleet.remove(ship);
  }

  @Override
  public long getCash() {
    return company.getCash();
  }
  /**
   * Add or subtract some cash
   * @param diff amount of money that is transferred
   */
  @Override
  public void updateCash(int diff){
    company.updateCash(diff);
  }

  @Override
  public List<IBuilding> findBuildings(ICity city) {
    ArrayList<IBuilding> result = new ArrayList<IBuilding>();
    for (IBuilding building : city.getBuildings()) {
      if (building.getOwner()==this){
        result.add(building);
      }
    }
    return result;
  }

  @Override
  public ITradingOffice findTradingOffice(ICity city) {
    for (IBuilding building : city.getBuildings()) {
      if (building.getOwner()==this && building instanceof ITradingOffice){
        return (ITradingOffice) building;
      }
    }
    return null;
  }

  @Override
  public List<IBuilding> findBuildings(ICity city,Class<? extends IBuilding> buildingClass) {
    List<IBuilding> result = new ArrayList<IBuilding>();
    for (IBuilding buidlding : city.getBuildings()) {
      ClassChecker checker = new ClassChecker(buidlding.getClass());
      if (checker.extendsClass(buildingClass) || checker.implementsInterface(buildingClass)){
        result.add(buidlding);
      }
    }
    return result;
  }

  @Override
  public ESocialRank getRank() {
    return rank;
  }

  @Override
  public ICareer getCareerLevel() {
    return careerLevel;
  }
  /**
   * Marry a spouse
   * @param spouse
   */
  public void marry(ISpouseData spouse){
    this.spouse=spouse;
  }
  /**
   * Widow and become unmarried again
   */
  public void widow(){
    spouse=null;
  }

  @Override
  public IPersonalData getPersonalData() {
    return personalData;
  }

  @Override
  public ISpouseData getSpouseData() {
    return spouse;
  }

  @Override
  public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result
        + ((personalData == null) ? 0 : personalData.hashCode());
    return result;
  }

  @Override
  public boolean equals(Object obj) {
    if (this == obj)
      return true;
    if (obj == null)
      return false;
    if (getClass() != obj.getClass())
      return false;
    Player other = (Player) obj;
    if (personalData == null) {
      if (other.personalData != null)
        return false;
    } else if (!personalData.equals(other.personalData))
      return false;
    return true;
  }

  @Override
  public ICompany getCompany() {
    return company;
  }

  @Override
  public void updateRank(ESocialRank rank) {
    this.rank=rank;
  }

}
TOP

Related Classes of ch.sahits.game.openpatrician.model.Player

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.