package net.sf.colossus.client; import java.awt.Color; import java.awt.Graphics2D; import java.awt.GraphicsDevice; import java.awt.geom.AffineTransform; import java.util.List; import java.util.Set; import net.sf.colossus.game.BattleCritter; import net.sf.colossus.game.BattleUnit; import net.sf.colossus.game.EntrySide; import net.sf.colossus.game.Legion; import net.sf.colossus.game.Player; import net.sf.colossus.game.PlayerColor; import net.sf.colossus.variant.BattleHex; import net.sf.colossus.variant.CreatureType; import net.sf.colossus.variant.MasterHex; import net.sf.colossus.webclient.WebClient; public interface IClientGUI { public abstract void setStartedByWebClient(boolean byWebClient); public abstract void setWebClient(WebClient wc, int inactivityWarningInterval, String gameId, String username, String password); public abstract void clearWebClient(); public abstract void setClientInWebClientNull(); /* * If webclient is just hidden, bring it back; * if it had been used, ask whether to restore; * Otherwise just do nothing */ public abstract void handleWebClientRestore(); public abstract void showWebClient(); public abstract void initBoard(); public abstract boolean hasBoard(); public abstract void actOnInitBattle(); public abstract void updateStatusScreen(); public abstract void menuCloseBoard(); public abstract void menuQuitGame(); /** Upon request with checkServerConnection, server sends a confirmation. * This method here processes the confirmation. */ public abstract void serverConfirmsConnection(); /** Timeout reached. Cancel timer and show error message */ public abstract void timeoutAbortsConnectionCheck(); public abstract void menuNewGame(); public abstract void menuLoadGame(String filename); public abstract void highlightEngagements(); public abstract int getEffectiveViewMode(); public abstract int getRecruitChitMode(); public abstract int getLegionMoveConfirmationMode(); public abstract int getNextSplitClickMode(); public abstract void eventViewerSetVisibleMaybe(); public abstract void autoInspectorSetDubiousAsBlanks(boolean newValue); public abstract void engagementResultsMaybeShow(); public abstract void actOnTellLegionLocation(Legion legion, MasterHex hex); public abstract void actOnDidSplit(int turn, Legion parent, Legion child, MasterHex hex); public abstract void actOnDoneWithMoves(); public abstract void actOnDoneWithSplits(); public abstract void actOnDidRecruit(Legion legion, CreatureType recruitName, List<CreatureType> recruiters, String reason); public abstract void actOnRemoveCreature(Legion legion, CreatureType type, String reason); public abstract void actOnRemoveCreaturePart2(Legion legion); public abstract void actOnAddCreature(Legion legion, CreatureType type, String reason); public abstract void actOnUndidSplit(Legion survivor, int turn); public abstract void actOnUndidRecruitPart(Legion legion, boolean wasReinforcement, int turnNumber); /** Present a dialog allowing the player to enter via land or teleport. * Return true if the player chooses to teleport. */ public abstract boolean chooseWhetherToTeleport(); public abstract void actOnDidMove(Legion legion, MasterHex startingHex, MasterHex currentHex, boolean teleport, CreatureType teleportingLord, boolean splitLegionHasForcedMove); public void actOnMoveNak(); public abstract void actOnUndidMove(Legion legion, MasterHex formerHex, MasterHex currentHex, boolean splitLegionHasForcedMove, boolean didTeleport); public abstract void actOnNoMoreEngagements(); public abstract void alignLegionsMaybe(Legion legion); public abstract void actOnRemoveLegion(Legion legion); public abstract void actOnDoSummon(); public abstract void updateEverything(); public abstract void replayTurnChange(int nowTurn); public abstract void actOnTellReplay(int maxTurn); public abstract void actOnTellRedoChange(); public abstract void eventViewerCancelReinforcement(CreatureType recruit, int turnNr); public abstract void eventViewerSetCreatureDead(BattleUnit battleUnit); public abstract void eventViewerNewSplitEvent(int turn, Legion parent, Legion child); public abstract void eventViewerUndoEvent(Legion splitoff, Legion survivor, int turn); public abstract void setPreferencesWindowVisible(boolean val); public abstract void didSummon(Legion summoner, Legion donor, CreatureType summon); public abstract void repaintBattleBoard(); public abstract void repaintAllWindows(); /** * TODO since we are doing Swing nowadays it would probably be much better to replace * all this rescaling code with just using {@link AffineTransform} on the right * {@link Graphics2D} instances. */ public abstract void rescaleAllWindows(); public abstract void disposeInspector(); public abstract void updateCreatureCountDisplay(); public abstract void disposePickCarryDialog(); public abstract void showNegotiate(Legion attacker, Legion defender); public abstract void respawnNegotiate(); public abstract void showConcede(Client client, Legion ally, Legion enemy); public abstract void showFlee(Client client, Legion ally, Legion enemy); public abstract void initShowEngagementResults(); public abstract void tellEngagement(Legion attacker, Legion defender, int turnNumber); public abstract void actOnTellEngagementResults(Legion winner, String method, int points, int turns); public abstract void actOnEngagementCompleted(); public abstract void tellWhatsHappening(String message); public abstract void actOnTellMovementRoll(int roll, String reason); /* pass revealed info to EventViewer and * additionally remember the images list for later, the engagement report */ public abstract void revealEngagedCreatures(Legion legion, final List<CreatureType> creatures, boolean isAttacker, String reason); public abstract void eventViewerRevealCreatures(Legion legion, final List<CreatureType> creatures, String reason); public abstract void doAcquireAngel(Legion legion, List<CreatureType> recruits); public abstract void setBoardActive(boolean val); public abstract void doPickSummonAngel(Legion legion, List<Legion> possibleDonors); public abstract List<CreatureType> doPickSplitLegion(Legion parent, String childMarker); public abstract void doPickCarries(Client client, int carryDamage, Set<String> carryTargetDescriptions); public abstract boolean isPickCarryOngoing(); public abstract void doPickColor(String playerName, List<PlayerColor> colorsLeft); public abstract void doPickInitialMarker(Set<String> markersAvailable); public abstract void doPickSplitMarker(Legion parent, Set<String> markersAvailable); public abstract CreatureType doPickRecruit(Legion legion, String hexDescription); public abstract String doPickRecruiter(List<String> recruiters, String hexDescription, Legion legion); public abstract EntrySide doPickEntrySide(MasterHex hex, Set<EntrySide> entrySides); public abstract CreatureType doPickLord(List<CreatureType> lords); public abstract void doPickStrikePenalty(Client client, List<String> choices); /** Inform this player about the other player's proposal. */ public abstract void tellProposal(String proposalString); public abstract void cleanupNegotiationDialogs(); public abstract void actOnTurnOrPlayerChange(Client c, int turnNr, Player p); public abstract void actOnGameStarting(); public abstract void actOnSetupSplit(); public abstract void actOnSetupMuster(); public abstract void actOnSetupMove(); public abstract void actOnSetupFight(); public abstract void actOnSetupBattleFight(); public abstract void actOnSetupBattleMove(); public abstract void actOnTellBattleMove(BattleHex startingHex, BattleHex endingHex, boolean rememberForUndo); public abstract void actOnPendingBattleMoveOver(); public abstract void actOnDoneWithBattleMoves(); public abstract void actOnSetupBattleRecruit(); public abstract void actOnSetupBattleSummon(); public abstract void actOnPlaceNewChit(String imageName, BattleUnit battleUnit, BattleHex hex); public abstract void resetStrikeNumbers(); public abstract void actOnTellStrikeResults(boolean wasCarry, int strikeNumber, List<String> rolls, BattleCritter striker, BattleCritter target); public abstract void highlightCrittersWithTargets(); public abstract void indicateStrikesDone(boolean auto); public abstract void revertDoneIndicator(); public abstract void actOnApplyCarries(BattleHex hex); public abstract void actOnCleanupBattle(); public abstract void undoRecruit(Legion legion); public abstract void informSplitRequiredFirstRound(); public abstract void undoLastBattleMove(); public abstract void undoAllBattleMoves(); public abstract void undoAllMoves(); public abstract void undoAllRecruits(); public abstract void defaultCursor(); public abstract void waitCursor(); public abstract void doCleanupGUI(); public abstract void actOnTellGameOver(String message, boolean disposeFollows, boolean suspended); public abstract void actOnGameStartingFailed(); public abstract void showMessageDialogAndWait(String message); // called by WebClient public abstract void doConfirmAndQuit(); public abstract void showConnectionClosedMessage(); public abstract void appendToConnectionLog(String s); public abstract void actOnReconnectCompleted(); // At least the following two are from gui package classes, // not from Client directly. // for ChooseScreen public abstract void setChosenDevice(GraphicsDevice chosen); // for PreferencesWindow public abstract void setLookAndFeel(String text); public abstract void removeBattleChit(BattleUnit battleUnit); public void setPreferencesCheckBoxValue(String name, boolean value); public void setPreferencesRadioButtonValue(String name, boolean value); // GUI keeps track for which doMove()'s server has not ackknowledged yet public void setMovePending(Legion mover, MasterHex currentHex, MasterHex targetHex); public void setMoveCompleted(Legion mover, MasterHex current, MasterHex target); public abstract void actOnHitsSet(BattleUnit targetUnit); public abstract boolean getStartedByWebClient(); public abstract boolean hasWatchdog(); public abstract void displayInactivityDialogEnsureEDT(final String title, final String text, final Color color); public abstract void inactivityAutoFleeOrConcede(boolean reply); public void askExtraRollApproval(String requestorName, boolean ourself, int requestId); public void askSuspendConfirmation(String requestorName, int timeout); public abstract String getGameId(); public abstract void actOnSplitRelatedRequestSent(); }