package org.mafagafogigante.dungeon.io; import org.mafagafogigante.dungeon.game.DungeonString; import org.mafagafogigante.dungeon.game.Game; import org.mafagafogigante.dungeon.game.Writable; import org.mafagafogigante.dungeon.gui.WritingSpecifications; /** * Writer class that encapsulates all Input/Output operations. This is the only class that should call the writing * methods of the game window. */ public final class Writer { /** * For how many milliseconds the game sleeps after writing a string of battle output. */ private static final int DEFAULT_WAIT_INTERVAL = 300; private Writer() { // Ensure that this class cannot be instantiated. throw new AssertionError(); } /** * Writes a string of text using the default output color. * * @param text the string of text to be written. */ public static void write(String text) { DungeonString string = new DungeonString(text); string.append("\n"); write(string); } /** * The preferred way to write text to the text pane of the window. * * @param writable a Writable object, not empty */ public static void write(Writable writable) { write(writable, new WritingSpecifications(true, 0)); } /** * The preferred way to write text to the text pane of the window. * * @param writable a Writable object, not empty * @param specifications a WritingSpecifications object */ public static void write(Writable writable, WritingSpecifications specifications) { if (Game.getGameWindow() != null) { // There will be no window when running the tests, so check to prevent a NPE. Game.getGameWindow().scheduleWriteToTextPane(writable, specifications); if (specifications.shouldWait()) { Sleeper.sleep(specifications.getWait()); } } } /** * Writes a Writable and waits for the default waiting interval. */ public static void writeAndWait(Writable writable) { write(writable, new WritingSpecifications(true, DEFAULT_WAIT_INTERVAL)); } }