package net.sf.colossus.gui; import java.util.logging.Level; import java.util.logging.Logger; import net.sf.colossus.common.Constants; import net.sf.colossus.variant.CreatureType; /** * Contains info about one revealed creature for RevealEvent. * * @author Clemens Katzer */ public class RevealedCreature { private static final Logger LOGGER = Logger .getLogger(RevealedCreature.class.getName()); private final CreatureType creatureType; private String titanBaseName = null; private boolean dead = false; // possible reasons why this creature was revealed: private boolean didRecruit = false; private boolean wasRecruited = false; private boolean wasReinforced = false; private boolean didTeleport = false; // private boolean didTowerTeleport = false; // private boolean didTitanTeleport = false; private boolean wasSummoned = false; private boolean wasAcquired = false; public RevealedCreature(CreatureType type) { this.creatureType = type; if (type == null) { LOGGER.log(Level.SEVERE, "Tried to create RevealedCreature with null type"); assert false : "Can not reveal creature without type"; return; } } // EventViewer does this when necessary. Would perhaps be cleaner // if our own constructor does this checking, but to construct // the basename needs the client and the marker, which in 95% // of the cases are not needed here in the RevealedCreature. public void setTitanBaseName(String tbName) { titanBaseName = tbName; } public String getName() { return titanBaseName != null ? titanBaseName : creatureType.getName(); } public String getPlainName() { return creatureType.getName(); } public boolean matches(String name) { if (name.equals(getPlainName())) { return true; } else if (titanBaseName != null && name.equals(titanBaseName)) { return true; } else { return false; } } @Override public String toString() { String infoString = getName() + ": " + (didRecruit ? "did recruit; " : "") + (wasRecruited ? "was recruited; " : "") + (wasReinforced ? "was reinforced; " : "") + (didTeleport ? "teleported; " : "") + (wasSummoned ? "was summoned; " : "") + (wasAcquired ? "was acquired; " : "") + (dead ? "is dead; " : ""); return infoString; } public Chit toChit(int scale) { String name = getName(); if (name == null) { LOGGER.log(Level.SEVERE, "revealedCreature.toChit, creature name null!"); return null; } // TODO can't simply use creature type because does getName() here does // special magic for Titans Chit creature = Chit.newCreatureChit(scale, name); if (isDead()) { creature.setDead(true); } return creature; } public void setDidRecruit(boolean value) { this.didRecruit = value; } public boolean didRecruit() { return didRecruit; } public void setWasRecruited(boolean value) { this.wasRecruited = value; } public boolean wasRecruited() { return wasRecruited; } public void setWasReinforced(boolean value) { this.wasReinforced = value; } public boolean wasReinforced() { return wasReinforced; } public void setDidTeleport(boolean value) { this.didTeleport = value; } public boolean didTeleport() { return didTeleport; } /* public void setDidTowerTeleport(boolean value) { this.didTowerTeleport = value; } public boolean didTowerTeleport() { return didTowerTeleport; } public void setDidTitanTeleport(boolean value) { this.didTitanTeleport = value; } public boolean didTitanTeleport() { return didTitanTeleport; } */ public void setWasSummoned(boolean value) { this.wasSummoned = value; } public boolean wasSummoned() { return wasSummoned; } public void setWasAcquired(boolean value) { this.wasAcquired = value; } public boolean wasAcquired() { return wasAcquired; } public void setDead(boolean value) { this.dead = value; } public boolean isDead() { return dead; } // Reason why this creature was added to the legion public void setReason(String reason) { if (reason == null) { LOGGER.log(Level.SEVERE, "RevealedCreature.setReason: reason null!!"); return; } if (reason.equals(Constants.reasonRecruited)) { setWasRecruited(true); } else if (reason.equals(Constants.reasonReinforced)) { setWasReinforced(true); } else if (reason.equals(Constants.reasonSummon)) { setWasSummoned(true); } else if (reason.equals(Constants.reasonAcquire)) { setWasAcquired(true); } else if (reason.equals("<Unknown>")) { // That's ok, probably just old server version does not // send this argument, so socketclientthread sets this dummy. } else { LOGGER.log(Level.SEVERE, "RevealedCreature.setReason: unknown reason " + reason + "!!"); } } }