package ee.tkasekamp.vickywaranalyzer.core;
import ee.tkasekamp.vickywaranalyzer.util.Constants;
import java.util.Arrays;
public class Battle {
private String date;
private String name;
private int location;
private Result res; // To display in the table
private Type battleType; // Default value
private int totalLosses;
// Attacker
private String attacker; // Not shown, used to identify
private String leaderAttacker;
private Unit[] attackerUnits; // There are only 20 different unit types in total
private int attackerLosses;
// Defender
private String defender; // Not shown, used to identify
private String leaderDefender = "";
private Unit[] defenderUnits; // There are only 20 different unit types in total
private int defenderLosses;
public Battle(String date, String name) {
super();
this.date = "";
this.date = date;
this.name = "";
this.name = name;
battleType = Type.LAND;
totalLosses = 0;
attacker = "";
leaderAttacker = "";
defender = "";
defenderLosses = 0;
attackerLosses = 0;
}
/**
* Battle result. Yes or no.
* Used in wargoal aswell because it also has yes and no states.
*/
public enum Result {
YES, NO
}
/**
* Battle result. Land or naval.
*/
public enum Type {
LAND, NAVAL
}
@Override
public String toString() {
return "Battle [date=" + date + ", name=" + name + ", location="
+ location + ", res=" + res + ", battleType=" + battleType
+ ", totalLosses=" + totalLosses + ", attacker=" + attacker
+ ", leaderAttacker=" + leaderAttacker + ", attackerUnits="
+ Arrays.toString(attackerUnits) + ", attackerLosses="
+ attackerLosses + ", defender=" + defender
+ ", leaderDefender=" + leaderDefender + ", defenderUnits="
+ Arrays.toString(defenderUnits) + ", defenderLosses="
+ defenderLosses + "]";
}
/**
* Checks if any of the units are ships. If they are, sets the battleType to true.
* Also sets the Result.
*/
public void determineType() {
/* Some battles have no attacker units. Catching these strange battles */
String unit;
try {
if (!(attackerUnits.length == 0) || !(defenderUnits.length == 0)) {
unit = attackerUnits[0].getType();
for (String ship : Constants.NAVAL_UNITS) {
if (unit.equals(ship)) {
setBattleType(Type.NAVAL);
}
}
}
} catch (NullPointerException | ArrayIndexOutOfBoundsException e) {
}
}
public int attackerUnitSize() {
return getUnitSize(attackerUnits);
}
public int defenderUnitSize() {
return getUnitSize(defenderUnits);
}
public static int getUnitSize(Unit[] units) {
int size = 0;
for (Unit unit : units) {
size += unit.getNumber();
}
return size;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getLocation() {
return location;
}
public void setLocation(int location) {
this.location = location;
}
public String getAttacker() {
return attacker;
}
public void setAttacker(String attacker) {
this.attacker = attacker;
}
public String getLeaderAttacker() {
return leaderAttacker;
}
public void setLeaderAttacker(String leaderAttacker) {
this.leaderAttacker = leaderAttacker;
}
public Unit[] getAttackerUnits() {
return attackerUnits;
}
public void setAttackerUnits(Unit[] attackerUnits) {
this.attackerUnits = attackerUnits;
}
public String getDefender() {
return defender;
}
public void setDefender(String defender) {
this.defender = defender;
}
public String getLeaderDefender() {
return leaderDefender;
}
public void setLeaderDefender(String leaderDefender) {
this.leaderDefender = leaderDefender;
}
public Unit[] getDefenderUnits() {
return defenderUnits;
}
public void setDefenderUnits(Unit[] defenderUnits) {
this.defenderUnits = defenderUnits;
}
public int getAttackerLosses() {
return attackerLosses;
}
public void setAttackerLosses(int attackerLosses) {
this.attackerLosses = attackerLosses;
}
public int getDefenderLosses() {
return defenderLosses;
}
public void setDefenderLosses(int defenderLosses) {
this.defenderLosses = defenderLosses;
}
public int getTotalLosses() {
return totalLosses;
}
public void setTotalLosses(int totalLosses) {
this.totalLosses = totalLosses;
}
public Type getBattleType() {
return battleType;
}
public void setBattleType(Type battleType) {
this.battleType = battleType;
}
public Result getRes() {
return res;
}
public void setRes(Result res) {
this.res = res;
}
}