Player.java
package edu.ntnu.idi.idatt.model.player;
import edu.ntnu.idi.idatt.model.enums.PlayerStatusEnum;
import edu.ntnu.idi.idatt.model.portfolio.Portfolio;
import edu.ntnu.idi.idatt.model.transaction.TransactionArchive;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Player {
private final String name;
private final BigDecimal startingMoney;
private BigDecimal money;
private Portfolio portfolio = new Portfolio();
private TransactionArchive transactionArchive = new TransactionArchive();
public Player(String name, BigDecimal startingMoney) {
this.name = name;
this.startingMoney = startingMoney;
this.money = this.startingMoney;
}
/**
* Getters
*
* @return - Their corresponding variables.
*/
public String getName() {
return name;
}
public BigDecimal getMoney() {
return money;
}
public Portfolio getPortfolio() {
return portfolio;
}
public TransactionArchive getTransactionArchive() {
return transactionArchive;
}
/**
* Setters for money
*
* @param amount - Amount to be changed correspondingly.
*/
public void addMoney(BigDecimal amount) {
this.money = this.money.add(amount);
}
public void withdrawMoney(BigDecimal amount) {
this.money = this.money.subtract(amount);
}
/**
* Method for obtaining players net worth.
*
* @return players net worth.
*/
public BigDecimal getNetWorth() {
return money.add(portfolio.getNetWorth());
}
/**
* Method for obtaining players trading status.
*
* <p>
* A symbolic title/rank that describes the way the
* players trading career has been going.
* </p>
*
* @return String of corresponding title.
*/
public String getStatus() {
int tradingWeeks = transactionArchive.countDistinctWeeks();
BigDecimal netWorth = this.getNetWorth().divide(this.startingMoney, 2, RoundingMode.HALF_UP);
for (PlayerStatusEnum status : PlayerStatusEnum.values()) {
if (tradingWeeks >= status.getTradingWeeks() && netWorth.compareTo(status.getRatio()) >= 0) {
return status.getTitle();
}
}
return PlayerStatusEnum.NOVICE.getTitle();
}
public BigDecimal getStartingMoney() {
return startingMoney;
}
}