package cryodex.modules.armada;
import java.util.List;
import cryodex.CryodexController;
import cryodex.CryodexController.Modules;
import cryodex.Player;
import cryodex.modules.Module;
import cryodex.xml.XMLObject;
import cryodex.xml.XMLUtils;
import cryodex.xml.XMLUtils.Element;
public class ArmadaMatch implements XMLObject {
private ArmadaPlayer player1;
private ArmadaPlayer player2;
private ArmadaPlayer winner;
private boolean isBye = false;
private Integer player1Score;
private Integer player2Score;
private boolean isDuplicate;
private boolean isConcede;
public ArmadaMatch() {
}
public ArmadaMatch(ArmadaPlayer player1, ArmadaPlayer player2) {
this.player1 = player1;
this.player2 = player2;
}
public ArmadaMatch(Element matchElement) {
Module m = Modules.getModuleByName(getModuleName());
String player1String = matchElement.getStringFromChild("PLAYER1");
Player p = CryodexController.getPlayerByID(player1String);
if (p != null) {
player1 = (ArmadaPlayer) p.getModuleInfoByModule(m);
}
String player2String = matchElement.getStringFromChild("PLAYER2");
p = CryodexController.getPlayerByID(player2String);
if (p != null) {
player2 = (ArmadaPlayer) p.getModuleInfoByModule(m);
}
String winnerString = matchElement.getStringFromChild("WINNER");
p = CryodexController.getPlayerByID(winnerString);
if (p != null) {
winner = (ArmadaPlayer) p.getModuleInfoByModule(m);
}
isBye = matchElement.getBooleanFromChild("ISBYE");
isDuplicate = matchElement.getBooleanFromChild("ISDUPLICATE");
isConcede = matchElement.getBooleanFromChild("ISCONCEDE", false);
player1Score = matchElement.getIntegerFromChild("PLAYER1POINTS");
player2Score = matchElement.getIntegerFromChild("PLAYER2POINTS");
}
public ArmadaPlayer getPlayer1() {
return player1;
}
public void setPlayer1(ArmadaPlayer player1) {
this.player1 = player1;
}
public ArmadaPlayer getPlayer2() {
return player2;
}
public void setPlayer2(ArmadaPlayer player2) {
this.player2 = player2;
}
public ArmadaPlayer getWinner() {
return winner;
}
public void setWinner(ArmadaPlayer winner) {
this.winner = winner;
}
public boolean isBye() {
return isBye;
}
public void setBye(boolean isBye) {
this.isBye = isBye;
}
public Integer getPlayer1Score() {
return player1Score;
}
public void setPlayer1Score(Integer player1Score) {
this.player1Score = player1Score;
}
public Integer getPlayer2Score() {
return player2Score;
}
public void setPlayer2Score(Integer player2Score) {
this.player2Score = player2Score;
}
public boolean isDuplicate() {
return isDuplicate;
}
public void setDuplicate(boolean isDuplicate) {
this.isDuplicate = isDuplicate;
}
public boolean isConcede() {
return isConcede;
}
public void setConcede(boolean isConcede) {
this.isConcede = isConcede;
}
public boolean isMatchComplete() {
return isBye || winner != null;
}
public boolean isValidResult() {
return true;
}
public void checkDuplicate(List<ArmadaRound> rounds) {
if (this.getPlayer2() == null) {
this.setDuplicate(false);
return;
}
for (ArmadaRound r : rounds) {
if (r.isSingleElimination()) {
continue;
}
for (ArmadaMatch match : r.getMatches()) {
if (match.getPlayer2() == null || match == this) {
continue;
}
if ((match.getPlayer1() == this.getPlayer1() && match
.getPlayer2() == this.getPlayer2())
|| (match.getPlayer1() == this.getPlayer2() && match
.getPlayer2() == this.getPlayer1())) {
this.setDuplicate(true);
return;
}
}
}
this.setDuplicate(false);
}
@Override
public String toString() {
return getPlayer1() + " vs " + getPlayer2() + " : isDuplicate="
+ isDuplicate();
}
@Override
public StringBuilder appendXML(StringBuilder sb) {
XMLUtils.appendObject(sb, "PLAYER1", getPlayer1().getPlayer()
.getSaveId());
XMLUtils.appendObject(sb, "PLAYER2", getPlayer2() == null ? ""
: getPlayer2().getPlayer().getSaveId());
XMLUtils.appendObject(sb, "WINNER", getWinner() == null ? ""
: getWinner().getPlayer().getSaveId());
XMLUtils.appendObject(sb, "ISBYE", isBye());
XMLUtils.appendObject(sb, "PLAYER1POINTS", getPlayer1Score());
XMLUtils.appendObject(sb, "PLAYER2POINTS", getPlayer2Score());
XMLUtils.appendObject(sb, "ISDUPLICATE", isDuplicate());
XMLUtils.appendObject(sb, "ISCONCEDE", isConcede());
return sb;
}
public static boolean hasDuplicate(List<ArmadaMatch> matches) {
boolean duplicateFound = false;
for (ArmadaMatch dc : matches) {
if (dc.isDuplicate()) {
duplicateFound = true;
break;
}
}
return duplicateFound;
}
public String getModuleName() {
return Modules.ARMADA.getName();
}
}