From 09d0d34c5164e0363d7504d9d4db5f7e9db6d86e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Hru=C5=A1ka?= Date: Mon, 19 May 2014 02:45:55 +0200 Subject: [PATCH] Frameworkization, Keys configurable, Refactoring, Cleaning. --- src/mightypork/gamecore/Config.java | 54 +++ src/mightypork/gamecore/ConfigSetup.java | 10 + src/mightypork/gamecore/WorkDir.java | 64 ++++ src/mightypork/gamecore/app/BaseApp.java | 204 +++++----- .../components/input/ClickableComponent.java | 4 +- .../gui/components/painters/TextPainter.java | 4 +- .../gamecore/gui/screens/Overlay.java | 5 +- .../gamecore/gui/screens/Screen.java | 5 +- .../gamecore/input/InputSystem.java | 19 +- src/mightypork/gamecore/input/KeyBinder.java | 4 +- src/mightypork/gamecore/input/KeyBinding.java | 31 +- .../gamecore/input/KeyBindingPool.java | 9 +- src/mightypork/gamecore/input/KeyConfig.java | 114 ++++++ src/mightypork/gamecore/input/KeySetup.java | 7 + src/mightypork/gamecore/input/KeyStroke.java | 148 ++++--- src/mightypork/gamecore/input/Keys.java | 361 ++++++++++++------ .../input/events/InputReadyEvent.java | 15 + .../input/events/InputReadyListener.java | 7 + .../gamecore/input/events/KeyEvent.java | 4 +- ...{KeyListener.java => KeyEventHandler.java} | 2 +- .../input/events/MouseButtonEvent.java | 4 +- ...nListener.java => MouseButtonHandler.java} | 2 +- .../input/events/MouseMotionEvent.java | 4 +- ...nListener.java => MouseMotionHandler.java} | 2 +- .../gamecore/render/DisplayReadyEvent.java | 15 + .../gamecore/render/DisplayReadyListener.java | 7 + .../gamecore/render/DisplaySystem.java | 2 + .../{loading => }/AsyncResourceLoader.java | 43 +-- ...esource.java => BaseDeferredResource.java} | 12 +- .../Deferred.java => DeferredResource.java} | 4 +- .../{loading => }/MustLoadInMainThread.java | 2 +- src/mightypork/gamecore/resources/Res.java | 101 +++++ .../{events => }/ResourceLoadRequest.java | 11 +- .../gamecore/resources/ResourceLoader.java | 29 ++ .../gamecore/resources/ResourceSetup.java | 38 ++ .../resources/audio/AudioReadyEvent.java | 15 + .../resources/audio/AudioReadyListener.java | 7 + .../resources/audio/DeferredAudio.java | 4 +- .../gamecore/resources/audio/SoundSystem.java | 4 +- .../events/ResourceLoadRequestListener.java | 20 - .../gamecore/resources/fonts/FontBank.java | 4 +- .../resources/fonts/impl/DeferredFont.java | 6 +- .../resources/textures/DeferredTexture.java | 6 +- .../resources/textures/TextureBank.java | 24 +- .../gamecore/util/files/OsUtils.java | 107 ++---- .../gamecore/util/files/config/Property.java | 71 ++++ .../util/files/config/PropertyManager.java | 245 ++++-------- .../util/objects/EnumerationIterator.java | 52 +++ src/mightypork/rogue/Config.java | 84 ---- src/mightypork/rogue/Const.java | 5 +- src/mightypork/rogue/Launcher.java | 59 +++ src/mightypork/rogue/Paths.java | 65 ---- .../rogue/{App.java => RogueApp.java} | 118 +----- src/mightypork/rogue/RogueConfig.java | 16 + src/mightypork/rogue/RogueKeys.java | 23 ++ .../{GameLoop.java => RogueMainLoop.java} | 8 +- .../rogue/{Res.java => RogueResources.java} | 127 ++---- ...ateManager.java => RogueStateManager.java} | 8 +- .../rogue/events/GameStateRequest.java | 12 +- src/mightypork/rogue/screens/FpsOverlay.java | 5 +- .../rogue/screens/LoadingOverlay.java | 2 +- .../rogue/screens/game/AskSaveLayer.java | 5 +- .../rogue/screens/game/DeathLayer.java | 6 +- .../rogue/screens/game/HudLayer.java | 2 +- .../rogue/screens/game/IngameNav.java | 2 +- .../rogue/screens/game/InvSlot.java | 2 +- .../rogue/screens/game/InventoryLayer.java | 17 +- .../rogue/screens/game/NavButton.java | 2 +- .../rogue/screens/game/ScreenGame.java | 37 +- .../screens/game/WorldConsoleRenderer.java | 2 +- .../layout_testing/LayoutTestScreen.java | 2 +- .../rogue/screens/menu/ScreenMainMenu.java | 13 +- .../select_world/ScreenSelectWorld.java | 21 +- .../rogue/screens/select_world/WorldSlot.java | 2 +- src/mightypork/rogue/world/WorldRenderer.java | 6 +- .../entity/render/EntityRendererMobLR.java | 2 +- src/mightypork/rogue/world/gui/MapView.java | 4 +- src/mightypork/rogue/world/gui/Minimap.java | 8 +- .../world/gui/interaction/MIPKeyboard.java | 8 +- .../item/impl/active/ItemHeartPiece.java | 2 +- .../world/item/impl/food/ItemCheese.java | 2 +- .../rogue/world/item/impl/food/ItemMeat.java | 2 +- .../world/item/impl/food/ItemSandwich.java | 2 +- .../world/item/impl/weapons/ItemAxe.java | 2 +- .../world/item/impl/weapons/ItemBone.java | 2 +- .../world/item/impl/weapons/ItemClub.java | 2 +- .../world/item/impl/weapons/ItemKnife.java | 2 +- .../world/item/impl/weapons/ItemRock.java | 2 +- .../world/item/impl/weapons/ItemSword.java | 2 +- .../world/item/impl/weapons/ItemTwig.java | 2 +- src/mightypork/rogue/world/tile/Tile.java | 4 +- .../rogue/world/tile/TileRenderer.java | 2 +- .../rogue/world/tile/impl/TileWithItems.java | 4 +- .../world/tile/impl/brick/TileBrickChest.java | 2 +- .../world/tile/impl/brick/TileBrickDoor.java | 2 +- .../tile/impl/brick/TileBrickEntrance.java | 2 +- .../world/tile/impl/brick/TileBrickExit.java | 2 +- .../world/tile/impl/brick/TileBrickFloor.java | 2 +- .../tile/impl/brick/TileBrickPassage.java | 2 +- .../tile/impl/brick/TileBrickSecretDoor.java | 2 +- .../world/tile/impl/brick/TileBrickWall.java | 2 +- 101 files changed, 1554 insertions(+), 1079 deletions(-) create mode 100644 src/mightypork/gamecore/Config.java create mode 100644 src/mightypork/gamecore/ConfigSetup.java create mode 100644 src/mightypork/gamecore/WorkDir.java create mode 100644 src/mightypork/gamecore/input/KeyConfig.java create mode 100644 src/mightypork/gamecore/input/KeySetup.java create mode 100644 src/mightypork/gamecore/input/events/InputReadyEvent.java create mode 100644 src/mightypork/gamecore/input/events/InputReadyListener.java rename src/mightypork/gamecore/input/events/{KeyListener.java => KeyEventHandler.java} (85%) rename src/mightypork/gamecore/input/events/{MouseButtonListener.java => MouseButtonHandler.java} (84%) rename src/mightypork/gamecore/input/events/{MouseMotionListener.java => MouseMotionHandler.java} (84%) create mode 100644 src/mightypork/gamecore/render/DisplayReadyEvent.java create mode 100644 src/mightypork/gamecore/render/DisplayReadyListener.java rename src/mightypork/gamecore/resources/{loading => }/AsyncResourceLoader.java (73%) rename src/mightypork/gamecore/resources/{loading/DeferredResource.java => BaseDeferredResource.java} (88%) rename src/mightypork/gamecore/resources/{loading/Deferred.java => DeferredResource.java} (77%) rename src/mightypork/gamecore/resources/{loading => }/MustLoadInMainThread.java (86%) create mode 100644 src/mightypork/gamecore/resources/Res.java rename src/mightypork/gamecore/resources/{events => }/ResourceLoadRequest.java (52%) create mode 100644 src/mightypork/gamecore/resources/ResourceLoader.java create mode 100644 src/mightypork/gamecore/resources/ResourceSetup.java create mode 100644 src/mightypork/gamecore/resources/audio/AudioReadyEvent.java create mode 100644 src/mightypork/gamecore/resources/audio/AudioReadyListener.java delete mode 100644 src/mightypork/gamecore/resources/events/ResourceLoadRequestListener.java create mode 100644 src/mightypork/gamecore/util/files/config/Property.java create mode 100644 src/mightypork/gamecore/util/objects/EnumerationIterator.java delete mode 100644 src/mightypork/rogue/Config.java create mode 100644 src/mightypork/rogue/Launcher.java delete mode 100644 src/mightypork/rogue/Paths.java rename src/mightypork/rogue/{App.java => RogueApp.java} (50%) create mode 100644 src/mightypork/rogue/RogueConfig.java create mode 100644 src/mightypork/rogue/RogueKeys.java rename src/mightypork/rogue/{GameLoop.java => RogueMainLoop.java} (87%) rename src/mightypork/rogue/{Res.java => RogueResources.java} (67%) rename src/mightypork/rogue/{GameStateManager.java => RogueStateManager.java} (81%) diff --git a/src/mightypork/gamecore/Config.java b/src/mightypork/gamecore/Config.java new file mode 100644 index 0000000..9917097 --- /dev/null +++ b/src/mightypork/gamecore/Config.java @@ -0,0 +1,54 @@ +package mightypork.gamecore; + + +import java.io.File; + +import mightypork.gamecore.util.files.config.PropertyManager; + + +/** + * Static application config file accessor + * + * @author MightyPork + */ +public class Config { + + private static PropertyManager cfg; + + + public static void init(File file, String comment) + { + cfg = new PropertyManager(file, comment); + } + + + public static PropertyManager getProp() + { + return cfg; + } + + + public static void load() + { + cfg.load(); + } + + + public static void save() + { + cfg.save(); + } + + + public static T get(String key) + { + return cfg.getValue(key); + } + + + public static void set(String key, T value) + { + cfg.setValue(key, value); + } + +} diff --git a/src/mightypork/gamecore/ConfigSetup.java b/src/mightypork/gamecore/ConfigSetup.java new file mode 100644 index 0000000..9d1af28 --- /dev/null +++ b/src/mightypork/gamecore/ConfigSetup.java @@ -0,0 +1,10 @@ +package mightypork.gamecore; + + +import mightypork.gamecore.util.files.config.PropertyManager; + + +public interface ConfigSetup { + + void addOptions(PropertyManager prop); +} diff --git a/src/mightypork/gamecore/WorkDir.java b/src/mightypork/gamecore/WorkDir.java new file mode 100644 index 0000000..1daabbd --- /dev/null +++ b/src/mightypork/gamecore/WorkDir.java @@ -0,0 +1,64 @@ +package mightypork.gamecore; + + +import java.io.File; + +import mightypork.gamecore.logging.Log; + + +/** + * Static application workdir accessor. + * + * @author MightyPork + */ +public class WorkDir { + + private static File workdir; + + + public static void init(File workdir) + { + WorkDir.workdir = workdir; + } + + + /** + * Get workdir folder, create if not exists. + * + * @param path dir path relative to workdir + * @return dir file + */ + public static File getDir(String path) + { + final File f = new File(workdir, path); + if (!f.exists() && !f.mkdirs()) { + Log.w("Could not create a directory: " + f); + } + + return f; + } + + + /** + * Get workdir file, create parent if not exists. + * + * @param path dir path relative to workdir + * @return dir file + */ + public static File getFile(String path) + { + final File f = new File(workdir, path); + + // create the parent dir + getDir(f.getParent()); + + return f; + + } + + + public static File getWorkDir() + { + return workdir; + } +} diff --git a/src/mightypork/gamecore/app/BaseApp.java b/src/mightypork/gamecore/app/BaseApp.java index a9f7be9..fb454b5 100644 --- a/src/mightypork/gamecore/app/BaseApp.java +++ b/src/mightypork/gamecore/app/BaseApp.java @@ -3,19 +3,30 @@ package mightypork.gamecore.app; import java.io.File; import java.lang.Thread.UncaughtExceptionHandler; +import java.util.ArrayList; +import java.util.List; import java.util.logging.Level; import javax.swing.JOptionPane; +import mightypork.gamecore.Config; +import mightypork.gamecore.ConfigSetup; +import mightypork.gamecore.WorkDir; import mightypork.gamecore.eventbus.EventBus; import mightypork.gamecore.eventbus.events.DestroyEvent; import mightypork.gamecore.gui.screens.ScreenRegistry; import mightypork.gamecore.gui.screens.impl.CrossfadeOverlay; import mightypork.gamecore.input.InputSystem; +import mightypork.gamecore.input.KeyConfig; +import mightypork.gamecore.input.KeySetup; import mightypork.gamecore.logging.Log; import mightypork.gamecore.logging.SlickLogRedirector; import mightypork.gamecore.logging.writers.LogWriter; import mightypork.gamecore.render.DisplaySystem; +import mightypork.gamecore.resources.AsyncResourceLoader; +import mightypork.gamecore.resources.Res; +import mightypork.gamecore.resources.ResourceLoader; +import mightypork.gamecore.resources.ResourceSetup; import mightypork.gamecore.resources.audio.SoundSystem; import mightypork.gamecore.util.annot.DefaultImpl; import mightypork.gamecore.util.files.InstanceLock; @@ -40,6 +51,72 @@ public abstract class BaseApp implements AppAccess, UncaughtExceptionHandler { private MainLoop gameLoop; private ScreenRegistry screenRegistry; + private String logDirName = "log"; + private String logFilePrefix = "runtime"; + private int logArchiveCount = 0; + private boolean busLogging = false; + private String configFile = "settings.cfg"; + private String configComment = "Main config file"; + private final List resourcesToLoad = new ArrayList<>(); + private final List keysToLoad = new ArrayList<>(); + private final List cfgsToLoad = new ArrayList<>(); + private ResourceLoader resourceLoader = new AsyncResourceLoader(); + private Level logLevel = Level.ALL; + + + public BaseApp(File workdir, boolean singleInstance) + { + WorkDir.init(workdir); + + if (singleInstance) initLock(); + } + + + public void setConfigFile(String filename, String comment) + { + this.configFile = filename; + this.configComment = comment; + } + + + public void setLogOptions(String logDir, String filePrefix, int archived, Level logLevel) + { + this.logDirName = logDir; + this.logFilePrefix = filePrefix; + this.logArchiveCount = archived; + this.logLevel = logLevel; + } + + + public void setBusLogging(boolean yes) + { + this.busLogging = yes; + } + + + public void addResources(ResourceSetup res) + { + this.resourcesToLoad.add(res); + } + + + public void addKeys(KeySetup keys) + { + this.keysToLoad.add(keys); + } + + + public void addConfig(ConfigSetup cfg) + { + this.cfgsToLoad.add(cfg); + } + + + public void setResourceLoader(ResourceLoader resLoader) + { + this.resourceLoader = resLoader; + } + /** * Start the application @@ -48,6 +125,8 @@ public abstract class BaseApp implements AppAccess, UncaughtExceptionHandler { { Thread.setDefaultUncaughtExceptionHandler(this); + Log.i("Using workdir: " + WorkDir.getWorkDir()); + initialize(); Log.i("Starting main loop..."); @@ -62,42 +141,45 @@ public abstract class BaseApp implements AppAccess, UncaughtExceptionHandler { */ protected void initialize() { - /* - * Lock working directory - */ - initLock(); + Config.init(WorkDir.getFile(configFile), configComment); + for (final KeySetup l : keysToLoad) { + KeyConfig.addKeyLayout(l); + } + KeyConfig.inst().addOptions(Config.getProp()); + for (final ConfigSetup cfgl : cfgsToLoad) { + cfgl.addOptions(Config.getProp()); + } + Config.load(); + /* * Setup logging */ - final LogWriter log = createLog(); - if (log != null) { - Log.setMainLogger(log); - org.newdawn.slick.util.Log.setLogSystem(new SlickLogRedirector(log)); - } + final LogWriter log = Log.create(logFilePrefix, new File(WorkDir.getDir(logDirName), logFilePrefix + ".log"), logArchiveCount); + log.setLevel(logLevel); + Log.setMainLogger(log); + org.newdawn.slick.util.Log.setLogSystem(new SlickLogRedirector(log)); + Log.i("=== Starting initialization sequence ==="); + // hook + Log.f2("Calling pre-init hook..."); preInit(); - - - /* - * Ionizables - */ - Log.f3("initializing ION..."); - registerIonizables(); - - /* * Event bus */ Log.f2("Starting Event Bus..."); eventBus = new EventBus(); + eventBus.detailedLogging = busLogging; - Log.f3("Registering channels..."); - initBus(eventBus); + /* + * Ionizables + */ + Log.f3("initializing ION..."); + registerIonizables(); /* * Display @@ -134,7 +216,11 @@ public abstract class BaseApp implements AppAccess, UncaughtExceptionHandler { * Resources should be registered to banks, and AsyncResourceLoader will load them. */ Log.f1("Loading resources..."); - initResources(); + resourceLoader.init(this); + Res.init(this); + for (final ResourceSetup rl : resourcesToLoad) { + Res.load(rl); + } /* * Screen registry @@ -176,20 +262,6 @@ public abstract class BaseApp implements AppAccess, UncaughtExceptionHandler { } - /** - * Create and configure a log (using {@link Log}) - * - * @return new log instance - */ - @DefaultImpl - protected LogWriter createLog() - { - final LogWriter log = Log.create("runtime", new File("runtime.log")); - log.setLevel(Level.ALL); - return log; - } - - /** * Create window and configure display system * @@ -198,7 +270,7 @@ public abstract class BaseApp implements AppAccess, UncaughtExceptionHandler { @DefaultImpl protected void initDisplay(DisplaySystem display) { - display.createMainWindow(800, 600, true, false, "BaseApp using LWJGL display."); + display.createMainWindow(800, 600, true, false, "LWJGL game"); display.setTargetFps(60); } @@ -214,26 +286,6 @@ public abstract class BaseApp implements AppAccess, UncaughtExceptionHandler { } - /** - * Configure input system (ie. define global keystrokes) - * - * @param input - */ - @DefaultImpl - protected void initInputSystem(InputSystem input) - { - } - - - /** - * Initialize resource banks. - */ - @DefaultImpl - protected void initResources() - { - } - - /** * Register game screens to the registry. * @@ -254,37 +306,25 @@ public abstract class BaseApp implements AppAccess, UncaughtExceptionHandler { protected abstract MainLoop createMainLoop(); - /** - * Initialize event bus. Usually, no action is needed, since the bus - * automatically recognizes new event types. - * - * @param bus - */ - @DefaultImpl - protected void initBus(EventBus bus) - { - } - - /* * Try to obtain lock. */ private void initLock() { - final File lockFile = getLockFile(); - - if (lockFile == null) { - // lock off - return; - } - - if (!InstanceLock.onFile(lockFile)) { + final File lock = WorkDir.getFile(".lock"); + if (!InstanceLock.onFile(lock)) { onLockError(); return; } } + @DefaultImpl + protected void initInputSystem(InputSystem input) + { + } + + /** * Triggered when lock cannot be obtained.
* App should terminate gracefully. @@ -306,18 +346,6 @@ public abstract class BaseApp implements AppAccess, UncaughtExceptionHandler { } - /** - * Get lock file path; Used to enforce single-instance policy. - * - * @return lock file, or null to disable lock. - */ - @DefaultImpl - protected File getLockFile() - { - return new File(".lock"); - } - - @Override public final SoundSystem getSoundSystem() { diff --git a/src/mightypork/gamecore/gui/components/input/ClickableComponent.java b/src/mightypork/gamecore/gui/components/input/ClickableComponent.java index 6dd2991..186c7ab 100644 --- a/src/mightypork/gamecore/gui/components/input/ClickableComponent.java +++ b/src/mightypork/gamecore/gui/components/input/ClickableComponent.java @@ -5,10 +5,10 @@ import mightypork.gamecore.gui.Action; import mightypork.gamecore.gui.ActionTrigger; import mightypork.gamecore.gui.components.InputComponent; import mightypork.gamecore.input.events.MouseButtonEvent; -import mightypork.gamecore.input.events.MouseButtonListener; +import mightypork.gamecore.input.events.MouseButtonHandler; -public abstract class ClickableComponent extends InputComponent implements ActionTrigger, MouseButtonListener { +public abstract class ClickableComponent extends InputComponent implements ActionTrigger, MouseButtonHandler { protected boolean btnDownOver; private Action action; diff --git a/src/mightypork/gamecore/gui/components/painters/TextPainter.java b/src/mightypork/gamecore/gui/components/painters/TextPainter.java index 920c410..374f645 100644 --- a/src/mightypork/gamecore/gui/components/painters/TextPainter.java +++ b/src/mightypork/gamecore/gui/components/painters/TextPainter.java @@ -14,7 +14,6 @@ import mightypork.gamecore.util.math.constraints.rect.Rect; import mightypork.gamecore.util.math.constraints.vect.Vect; import mightypork.gamecore.util.strings.StringProvider; import mightypork.gamecore.util.strings.StringWrapper; -import mightypork.rogue.Config; /** @@ -24,6 +23,7 @@ import mightypork.rogue.Config; */ public class TextPainter extends BaseComponent implements DynamicWidthComponent { + private static final boolean DEBUG_FONT_RENDER = false; private final FontRenderer font; private Color color; private AlignX align; @@ -102,7 +102,7 @@ public class TextPainter extends BaseComponent implements DynamicWidthComponent final Rect r = (shadow ? rect.move(shadowOffset.neg()) : rect).round(); font.draw(str, r, align, color); - if (Config.DEBUG_FONT_RENDER) Render.quadColor(r, RGB.PINK.withAlpha(0.4)); + if (DEBUG_FONT_RENDER) Render.quadColor(r, RGB.PINK.withAlpha(0.4)); } diff --git a/src/mightypork/gamecore/gui/screens/Overlay.java b/src/mightypork/gamecore/gui/screens/Overlay.java index e8f9063..c062403 100644 --- a/src/mightypork/gamecore/gui/screens/Overlay.java +++ b/src/mightypork/gamecore/gui/screens/Overlay.java @@ -14,6 +14,7 @@ import mightypork.gamecore.gui.events.LayoutChangeListener; import mightypork.gamecore.input.KeyBinder; import mightypork.gamecore.input.KeyBindingPool; import mightypork.gamecore.input.KeyStroke; +import mightypork.gamecore.input.KeyStroke.Edge; import mightypork.gamecore.render.Renderable; import mightypork.gamecore.util.annot.DefaultImpl; import mightypork.gamecore.util.math.color.Color; @@ -64,9 +65,9 @@ public abstract class Overlay extends AppSubModule implements Comparable loadAliasMap = new HashMap<>(); + private static HashMap saveAliasMap = new HashMap<>(); + + static { + // init maps + loadAliasMap.put("ENTER", "RETURN"); + loadAliasMap.put("PGDN", "NEXT"); + loadAliasMap.put("PGUP", "PRIOR"); + loadAliasMap.put("PAGE_DOWN", "NEXT"); + loadAliasMap.put("PAGE_UP", "PRIOR"); + loadAliasMap.put("SPACEBAR", "SPACE"); + loadAliasMap.put("ESC", "ESCAPE"); + loadAliasMap.put("NUMPAD_DIVIDE", "DIVIDE"); + loadAliasMap.put("NUMPAD_MULTIPLY", "MULTIPLY"); + loadAliasMap.put("NUMPAD_ADD", "ADD"); + loadAliasMap.put("NUMPAD_SUBTRACT", "SUBTRACT"); + loadAliasMap.put("CAPS_LOCK", "CAPITAL"); + loadAliasMap.put("SCROLL_LOCK", "SROLL"); + loadAliasMap.put("NUM_LOCK", "NUMLOCK"); + loadAliasMap.put("BACKSPACE", "BACK"); + + saveAliasMap.put("RETURN", "ENTER"); + saveAliasMap.put("NEXT", "PAGE_DOWN"); + saveAliasMap.put("PRIOR", "PAGE_UP"); + saveAliasMap.put("DIVIDE", "NUMPAD_DIVIDE"); + saveAliasMap.put("MULTIPLY", "NUMPAD_MULTIPLY"); + saveAliasMap.put("ADD", "NUMPAD_ADD"); + saveAliasMap.put("SUBTRACT", "NUMPAD_SUBTRACT"); + saveAliasMap.put("CAPITAL", "CAPS_LOCK"); + saveAliasMap.put("SROLL", "SCROLL_LOCK"); + saveAliasMap.put("NUMLOCK", "NUM_LOCK"); + saveAliasMap.put("BACK", "BACKSPACE"); + } + + + public static int keyFromString(String key) + { + String key1 = key; + if (loadAliasMap.containsKey(key1)) key1 = loadAliasMap.get(key1); + + final int index = Keyboard.getKeyIndex(key1); + if (index == Keys.NONE && !key1.equals("NONE")) { + Log.w("Could not parse key: " + key + " (" + key1 + ")"); + } + return index; + } + + + public static int modFromString(String mod) + { + int mod_mask = Keys.MOD_NONE; + + if (mod.contains("CTRL")) { + mod_mask |= Keys.MOD_CONTROL; + } + + if (mod.contains("ALT")) { + mod_mask |= Keys.MOD_ALT; + } + + if (mod.contains("SHIFT")) { + mod_mask |= Keys.MOD_SHIFT; + } + + if (mod.contains("META") || mod.contains("WIN")) { + mod_mask |= Keys.MOD_META; + } + + return mod_mask; + } + + + public static String modToString(int mod) + { + String s = ""; + + if ((mod & Keys.MOD_CONTROL) != 0) { + s += "CTRL+"; + } + + if ((mod & Keys.MOD_ALT) != 0) { + s += "ALT+"; + } + + if ((mod & Keys.MOD_SHIFT) != 0) { + s += "SHIFT+"; + } + + if ((mod & Keys.MOD_META) != 0) { + s += "META+"; + } + + return s; + } + + + public static String keyToString(int key) + { + String s = Keyboard.getKeyName(key); + if (saveAliasMap.containsKey(s)) s = saveAliasMap.get(s); + if (s == null) { + Log.w("Could not stringify key: " + key); + s = "NONE"; + } + return s.toUpperCase(); + } + + + public static int keyToMod(int key) + { + if (key == L_SHIFT || key == R_SHIFT) return MOD_SHIFT; + if (key == L_CONTROL || key == R_CONTROL) return MOD_CONTROL; + if (key == L_ALT || key == R_ALT) return MOD_ALT; + if (key == L_META || key == R_META) return MOD_META; + return MOD_NONE; + } + } diff --git a/src/mightypork/gamecore/input/events/InputReadyEvent.java b/src/mightypork/gamecore/input/events/InputReadyEvent.java new file mode 100644 index 0000000..1c2156d --- /dev/null +++ b/src/mightypork/gamecore/input/events/InputReadyEvent.java @@ -0,0 +1,15 @@ +package mightypork.gamecore.input.events; + + +import mightypork.gamecore.eventbus.BusEvent; + + +public class InputReadyEvent extends BusEvent { + + @Override + protected void handleBy(InputReadyListener handler) + { + handler.onInputReady(); + } + +} diff --git a/src/mightypork/gamecore/input/events/InputReadyListener.java b/src/mightypork/gamecore/input/events/InputReadyListener.java new file mode 100644 index 0000000..f48b22a --- /dev/null +++ b/src/mightypork/gamecore/input/events/InputReadyListener.java @@ -0,0 +1,7 @@ +package mightypork.gamecore.input.events; + + +public interface InputReadyListener { + + void onInputReady(); +} diff --git a/src/mightypork/gamecore/input/events/KeyEvent.java b/src/mightypork/gamecore/input/events/KeyEvent.java index f972859..b14fdc3 100644 --- a/src/mightypork/gamecore/input/events/KeyEvent.java +++ b/src/mightypork/gamecore/input/events/KeyEvent.java @@ -13,7 +13,7 @@ import org.lwjgl.input.Keyboard; * @author MightyPork */ @NotLoggedEvent -public class KeyEvent extends BusEvent { +public class KeyEvent extends BusEvent { private final int key; private final boolean down; @@ -70,7 +70,7 @@ public class KeyEvent extends BusEvent { @Override - public void handleBy(KeyListener keh) + public void handleBy(KeyEventHandler keh) { keh.receive(this); } diff --git a/src/mightypork/gamecore/input/events/KeyListener.java b/src/mightypork/gamecore/input/events/KeyEventHandler.java similarity index 85% rename from src/mightypork/gamecore/input/events/KeyListener.java rename to src/mightypork/gamecore/input/events/KeyEventHandler.java index d2da429..fd031d4 100644 --- a/src/mightypork/gamecore/input/events/KeyListener.java +++ b/src/mightypork/gamecore/input/events/KeyEventHandler.java @@ -6,7 +6,7 @@ package mightypork.gamecore.input.events; * * @author MightyPork */ -public interface KeyListener { +public interface KeyEventHandler { /** * Handle an event diff --git a/src/mightypork/gamecore/input/events/MouseButtonEvent.java b/src/mightypork/gamecore/input/events/MouseButtonEvent.java index f6e0848..78b7c49 100644 --- a/src/mightypork/gamecore/input/events/MouseButtonEvent.java +++ b/src/mightypork/gamecore/input/events/MouseButtonEvent.java @@ -14,7 +14,7 @@ import mightypork.gamecore.util.math.constraints.vect.VectConst; * @author MightyPork */ @NotLoggedEvent -public class MouseButtonEvent extends BusEvent { +public class MouseButtonEvent extends BusEvent { public static final int BUTTON_LEFT = 0; public static final int BUTTON_MIDDLE = 1; @@ -119,7 +119,7 @@ public class MouseButtonEvent extends BusEvent { @Override - public void handleBy(MouseButtonListener handler) + public void handleBy(MouseButtonHandler handler) { handler.receive(this); } diff --git a/src/mightypork/gamecore/input/events/MouseButtonListener.java b/src/mightypork/gamecore/input/events/MouseButtonHandler.java similarity index 84% rename from src/mightypork/gamecore/input/events/MouseButtonListener.java rename to src/mightypork/gamecore/input/events/MouseButtonHandler.java index 23d81a1..74a1a06 100644 --- a/src/mightypork/gamecore/input/events/MouseButtonListener.java +++ b/src/mightypork/gamecore/input/events/MouseButtonHandler.java @@ -6,7 +6,7 @@ package mightypork.gamecore.input.events; * * @author MightyPork */ -public interface MouseButtonListener { +public interface MouseButtonHandler { /** * Handle an event diff --git a/src/mightypork/gamecore/input/events/MouseMotionEvent.java b/src/mightypork/gamecore/input/events/MouseMotionEvent.java index 11180f3..7fb4d69 100644 --- a/src/mightypork/gamecore/input/events/MouseMotionEvent.java +++ b/src/mightypork/gamecore/input/events/MouseMotionEvent.java @@ -13,7 +13,7 @@ import mightypork.gamecore.util.math.constraints.vect.VectConst; * @author MightyPork */ @NotLoggedEvent -public class MouseMotionEvent extends BusEvent { +public class MouseMotionEvent extends BusEvent { private final VectConst move; private final VectConst pos; @@ -49,7 +49,7 @@ public class MouseMotionEvent extends BusEvent { @Override - public void handleBy(MouseMotionListener keh) + public void handleBy(MouseMotionHandler keh) { keh.receive(this); } diff --git a/src/mightypork/gamecore/input/events/MouseMotionListener.java b/src/mightypork/gamecore/input/events/MouseMotionHandler.java similarity index 84% rename from src/mightypork/gamecore/input/events/MouseMotionListener.java rename to src/mightypork/gamecore/input/events/MouseMotionHandler.java index 4854735..07d306a 100644 --- a/src/mightypork/gamecore/input/events/MouseMotionListener.java +++ b/src/mightypork/gamecore/input/events/MouseMotionHandler.java @@ -6,7 +6,7 @@ package mightypork.gamecore.input.events; * * @author MightyPork */ -public interface MouseMotionListener { +public interface MouseMotionHandler { /** * Handle an event diff --git a/src/mightypork/gamecore/render/DisplayReadyEvent.java b/src/mightypork/gamecore/render/DisplayReadyEvent.java new file mode 100644 index 0000000..3e87fdb --- /dev/null +++ b/src/mightypork/gamecore/render/DisplayReadyEvent.java @@ -0,0 +1,15 @@ +package mightypork.gamecore.render; + + +import mightypork.gamecore.eventbus.BusEvent; + + +public class DisplayReadyEvent extends BusEvent { + + @Override + protected void handleBy(DisplayReadyListener handler) + { + handler.onDisplayReady(); + } + +} diff --git a/src/mightypork/gamecore/render/DisplayReadyListener.java b/src/mightypork/gamecore/render/DisplayReadyListener.java new file mode 100644 index 0000000..90716d2 --- /dev/null +++ b/src/mightypork/gamecore/render/DisplayReadyListener.java @@ -0,0 +1,7 @@ +package mightypork.gamecore.render; + + +public interface DisplayReadyListener { + + void onDisplayReady(); +} diff --git a/src/mightypork/gamecore/render/DisplaySystem.java b/src/mightypork/gamecore/render/DisplaySystem.java index b85803f..ee77f96 100644 --- a/src/mightypork/gamecore/render/DisplaySystem.java +++ b/src/mightypork/gamecore/render/DisplaySystem.java @@ -104,6 +104,8 @@ public class DisplaySystem extends AppModule implements RectBound { Display.update(); } + getEventBus().send(new DisplayReadyEvent()); + } catch (final LWJGLException e) { throw new RuntimeException("Could not initialize screen", e); } diff --git a/src/mightypork/gamecore/resources/loading/AsyncResourceLoader.java b/src/mightypork/gamecore/resources/AsyncResourceLoader.java similarity index 73% rename from src/mightypork/gamecore/resources/loading/AsyncResourceLoader.java rename to src/mightypork/gamecore/resources/AsyncResourceLoader.java index d23d252..a49e0dd 100644 --- a/src/mightypork/gamecore/resources/loading/AsyncResourceLoader.java +++ b/src/mightypork/gamecore/resources/AsyncResourceLoader.java @@ -1,4 +1,4 @@ -package mightypork.gamecore.resources.loading; +package mightypork.gamecore.resources; import java.util.concurrent.ExecutorService; @@ -9,8 +9,6 @@ import mightypork.gamecore.app.MainLoopRequest; import mightypork.gamecore.eventbus.BusAccess; import mightypork.gamecore.eventbus.events.Destroyable; import mightypork.gamecore.logging.Log; -import mightypork.gamecore.resources.events.ResourceLoadRequestListener; -import mightypork.gamecore.util.annot.FactoryMethod; /** @@ -18,31 +16,26 @@ import mightypork.gamecore.util.annot.FactoryMethod; * * @author MightyPork */ -public class AsyncResourceLoader extends Thread implements ResourceLoadRequestListener, Destroyable { - - /** - * Start a new loader thread. - * - * @param app app access - * @return the launched thread - */ - @FactoryMethod - public static AsyncResourceLoader launch(BusAccess app) - { - final AsyncResourceLoader loader = new AsyncResourceLoader(app); - loader.setDaemon(true); - loader.start(); - return loader; - } +public class AsyncResourceLoader extends Thread implements ResourceLoader, Destroyable { private final ExecutorService exs = Executors.newCachedThreadPool(); - private final LinkedBlockingQueue toLoad = new LinkedBlockingQueue<>(); + private final LinkedBlockingQueue toLoad = new LinkedBlockingQueue<>(); private volatile boolean stopped; - private final BusAccess app; + private BusAccess app; private volatile boolean mainLoopQueuing = false; + @Override + public synchronized void init(BusAccess app) + { + this.app = app; + app.getEventBus().subscribe(this); + setDaemon(true); + super.start(); + } + + public void enableMainLoopQueuing(boolean yes) { mainLoopQueuing = yes; @@ -52,16 +45,14 @@ public class AsyncResourceLoader extends Thread implements ResourceLoadRequestLi /** * @param app app acceess */ - public AsyncResourceLoader(BusAccess app) + public AsyncResourceLoader() { super("Deferred loader"); - this.app = app; - app.getEventBus().subscribe(this); } @Override - public void loadResource(final Deferred resource) + public void loadResource(final DeferredResource resource) { if (resource.isLoaded()) return; @@ -98,7 +89,7 @@ public class AsyncResourceLoader extends Thread implements ResourceLoadRequestLi while (!stopped) { try { - final Deferred def = toLoad.take(); + final DeferredResource def = toLoad.take(); if (def == null) continue; if (!def.isLoaded()) { diff --git a/src/mightypork/gamecore/resources/loading/DeferredResource.java b/src/mightypork/gamecore/resources/BaseDeferredResource.java similarity index 88% rename from src/mightypork/gamecore/resources/loading/DeferredResource.java rename to src/mightypork/gamecore/resources/BaseDeferredResource.java index ec3ca6e..0804eb3 100644 --- a/src/mightypork/gamecore/resources/loading/DeferredResource.java +++ b/src/mightypork/gamecore/resources/BaseDeferredResource.java @@ -1,4 +1,4 @@ -package mightypork.gamecore.resources.loading; +package mightypork.gamecore.resources; import mightypork.gamecore.eventbus.events.Destroyable; @@ -12,7 +12,7 @@ import mightypork.gamecore.logging.LogAlias; * @author MightyPork */ @LogAlias(name = "Resource") -public abstract class DeferredResource implements Deferred, Destroyable { +public abstract class BaseDeferredResource implements DeferredResource, Destroyable { private final String resource; private volatile boolean loadFailed = false; @@ -23,7 +23,7 @@ public abstract class DeferredResource implements Deferred, Destroyable { * @param resource resource path / name; this string is later used in * loadResource() */ - public DeferredResource(String resource) + public BaseDeferredResource(String resource) { this.resource = resource; } @@ -33,11 +33,9 @@ public abstract class DeferredResource implements Deferred, Destroyable { public synchronized final void load() { if (loadFailed) return; - if (loadAttempted) return; loadAttempted = true; - loadFailed = false; try { @@ -118,8 +116,8 @@ public abstract class DeferredResource implements Deferred, Destroyable { { if (this == obj) return true; if (obj == null) return false; - if (!(obj instanceof DeferredResource)) return false; - final DeferredResource other = (DeferredResource) obj; + if (!(obj instanceof BaseDeferredResource)) return false; + final BaseDeferredResource other = (BaseDeferredResource) obj; if (resource == null) { if (other.resource != null) return false; } else if (!resource.equals(other.resource)) return false; diff --git a/src/mightypork/gamecore/resources/loading/Deferred.java b/src/mightypork/gamecore/resources/DeferredResource.java similarity index 77% rename from src/mightypork/gamecore/resources/loading/Deferred.java rename to src/mightypork/gamecore/resources/DeferredResource.java index b39a9fa..ba92fe7 100644 --- a/src/mightypork/gamecore/resources/loading/Deferred.java +++ b/src/mightypork/gamecore/resources/DeferredResource.java @@ -1,4 +1,4 @@ -package mightypork.gamecore.resources.loading; +package mightypork.gamecore.resources; /** @@ -6,7 +6,7 @@ package mightypork.gamecore.resources.loading; * * @author MightyPork */ -public interface Deferred { +public interface DeferredResource { /** * Load the actual resource, if not loaded yet. diff --git a/src/mightypork/gamecore/resources/loading/MustLoadInMainThread.java b/src/mightypork/gamecore/resources/MustLoadInMainThread.java similarity index 86% rename from src/mightypork/gamecore/resources/loading/MustLoadInMainThread.java rename to src/mightypork/gamecore/resources/MustLoadInMainThread.java index 0aef4f0..1418fec 100644 --- a/src/mightypork/gamecore/resources/loading/MustLoadInMainThread.java +++ b/src/mightypork/gamecore/resources/MustLoadInMainThread.java @@ -1,4 +1,4 @@ -package mightypork.gamecore.resources.loading; +package mightypork.gamecore.resources; import java.lang.annotation.*; diff --git a/src/mightypork/gamecore/resources/Res.java b/src/mightypork/gamecore/resources/Res.java new file mode 100644 index 0000000..544dc27 --- /dev/null +++ b/src/mightypork/gamecore/resources/Res.java @@ -0,0 +1,101 @@ +package mightypork.gamecore.resources; + + +import mightypork.gamecore.app.AppAccess; +import mightypork.gamecore.resources.audio.SoundBank; +import mightypork.gamecore.resources.audio.players.EffectPlayer; +import mightypork.gamecore.resources.audio.players.LoopPlayer; +import mightypork.gamecore.resources.fonts.FontBank; +import mightypork.gamecore.resources.fonts.GLFont; +import mightypork.gamecore.resources.textures.GLTexture; +import mightypork.gamecore.resources.textures.TextureBank; +import mightypork.gamecore.resources.textures.TxQuad; +import mightypork.gamecore.resources.textures.TxSheet; + + +/** + * Static resource repository + * + * @author MightyPork + */ +public final class Res { + + private static TextureBank textures; + private static SoundBank sounds; + private static FontBank fonts; + + private static boolean initialized = false; + + + /** + * Load on behalf of given base app + * + * @param app app access + */ + public static void init(AppAccess app) + { + if (initialized) return; + initialized = true; + + textures = new TextureBank(app); + sounds = new SoundBank(app); + fonts = new FontBank(app); + } + + + public static GLTexture getTexture(String key) + { + return textures.getTexture(key); + } + + + /** + * Get a texture sheet by key + * + * @param key + * @return sheet + */ + public static TxSheet getTxSheet(String key) + { + return textures.getSheet(key); + } + + + /** + * Get a texture quad by key + * + * @param key + * @return quad + */ + public static TxQuad getTxQuad(String key) + { + return textures.getQuad(key); + } + + + public static LoopPlayer getSoundLoop(String key) + { + return sounds.getLoop(key); + } + + + public static EffectPlayer getSoundEffect(String key) + { + return sounds.getEffect(key); + } + + + public static GLFont getFont(String key) + { + return fonts.getFont(key); + } + + + public static void load(ResourceSetup binder) + { + binder.addFonts(fonts); + binder.addSounds(sounds); + binder.addTextures(textures); + } + +} diff --git a/src/mightypork/gamecore/resources/events/ResourceLoadRequest.java b/src/mightypork/gamecore/resources/ResourceLoadRequest.java similarity index 52% rename from src/mightypork/gamecore/resources/events/ResourceLoadRequest.java rename to src/mightypork/gamecore/resources/ResourceLoadRequest.java index 799a7f6..8ffe1b3 100644 --- a/src/mightypork/gamecore/resources/events/ResourceLoadRequest.java +++ b/src/mightypork/gamecore/resources/ResourceLoadRequest.java @@ -1,9 +1,8 @@ -package mightypork.gamecore.resources.events; +package mightypork.gamecore.resources; import mightypork.gamecore.eventbus.BusEvent; import mightypork.gamecore.eventbus.event_flags.SingleReceiverEvent; -import mightypork.gamecore.resources.loading.Deferred; /** @@ -12,22 +11,22 @@ import mightypork.gamecore.resources.loading.Deferred; * @author MightyPork */ @SingleReceiverEvent -public class ResourceLoadRequest extends BusEvent { +public class ResourceLoadRequest extends BusEvent { - private final Deferred resource; + private final DeferredResource resource; /** * @param resource resource to load */ - public ResourceLoadRequest(Deferred resource) + public ResourceLoadRequest(DeferredResource resource) { this.resource = resource; } @Override - public void handleBy(ResourceLoadRequestListener handler) + public void handleBy(ResourceLoader handler) { handler.loadResource(resource); } diff --git a/src/mightypork/gamecore/resources/ResourceLoader.java b/src/mightypork/gamecore/resources/ResourceLoader.java new file mode 100644 index 0000000..671383c --- /dev/null +++ b/src/mightypork/gamecore/resources/ResourceLoader.java @@ -0,0 +1,29 @@ +package mightypork.gamecore.resources; + + +import mightypork.gamecore.eventbus.BusAccess; + + +/** + * {@link ResourceLoadRequest} listener + * + * @author MightyPork + */ +public interface ResourceLoader { + + /** + * Load a resource + * + * @param resource + */ + void loadResource(DeferredResource resource); + + + /** + * Initialize the loader (async loader may start a stread) + * + * @param app app the loader works for. The event bus must already be + * initialized. + */ + void init(BusAccess app); +} diff --git a/src/mightypork/gamecore/resources/ResourceSetup.java b/src/mightypork/gamecore/resources/ResourceSetup.java new file mode 100644 index 0000000..1e3ac10 --- /dev/null +++ b/src/mightypork/gamecore/resources/ResourceSetup.java @@ -0,0 +1,38 @@ +package mightypork.gamecore.resources; + + +import mightypork.gamecore.resources.audio.SoundBank; +import mightypork.gamecore.resources.fonts.FontBank; +import mightypork.gamecore.resources.textures.TextureBank; + + +/** + * Resource binder; used by apps to specify what resources are to be loaded. + * + * @author MightyPork + */ +public interface ResourceSetup { + + /** + * Add fonts to load. + * + * @param fonts font registry + */ + void addFonts(FontBank fonts); + + + /** + * Add sounds to load. + * + * @param sounds sound registry + */ + void addSounds(SoundBank sounds); + + + /** + * Add textures to load + * + * @param textures texture registry + */ + void addTextures(TextureBank textures); +} diff --git a/src/mightypork/gamecore/resources/audio/AudioReadyEvent.java b/src/mightypork/gamecore/resources/audio/AudioReadyEvent.java new file mode 100644 index 0000000..24566e9 --- /dev/null +++ b/src/mightypork/gamecore/resources/audio/AudioReadyEvent.java @@ -0,0 +1,15 @@ +package mightypork.gamecore.resources.audio; + + +import mightypork.gamecore.eventbus.BusEvent; + + +public class AudioReadyEvent extends BusEvent { + + @Override + protected void handleBy(AudioReadyListener handler) + { + handler.onInputReady(); + } + +} diff --git a/src/mightypork/gamecore/resources/audio/AudioReadyListener.java b/src/mightypork/gamecore/resources/audio/AudioReadyListener.java new file mode 100644 index 0000000..c9a8d01 --- /dev/null +++ b/src/mightypork/gamecore/resources/audio/AudioReadyListener.java @@ -0,0 +1,7 @@ +package mightypork.gamecore.resources.audio; + + +public interface AudioReadyListener { + + void onInputReady(); +} diff --git a/src/mightypork/gamecore/resources/audio/DeferredAudio.java b/src/mightypork/gamecore/resources/audio/DeferredAudio.java index e8ab58f..db77c53 100644 --- a/src/mightypork/gamecore/resources/audio/DeferredAudio.java +++ b/src/mightypork/gamecore/resources/audio/DeferredAudio.java @@ -5,7 +5,7 @@ import java.io.IOException; import java.io.InputStream; import mightypork.gamecore.logging.LogAlias; -import mightypork.gamecore.resources.loading.DeferredResource; +import mightypork.gamecore.resources.BaseDeferredResource; import mightypork.gamecore.util.files.FileUtils; import mightypork.gamecore.util.math.constraints.vect.Vect; @@ -19,7 +19,7 @@ import org.newdawn.slick.openal.SoundStore; * @author MightyPork */ @LogAlias(name = "Audio") -public class DeferredAudio extends DeferredResource { +public class DeferredAudio extends BaseDeferredResource { private enum PlayMode { diff --git a/src/mightypork/gamecore/resources/audio/SoundSystem.java b/src/mightypork/gamecore/resources/audio/SoundSystem.java index 7ab85f7..8f6d7fa 100644 --- a/src/mightypork/gamecore/resources/audio/SoundSystem.java +++ b/src/mightypork/gamecore/resources/audio/SoundSystem.java @@ -8,9 +8,9 @@ import java.util.Set; import mightypork.gamecore.app.AppAccess; import mightypork.gamecore.eventbus.clients.RootBusNode; import mightypork.gamecore.eventbus.events.Updateable; +import mightypork.gamecore.resources.ResourceLoadRequest; import mightypork.gamecore.resources.audio.players.EffectPlayer; import mightypork.gamecore.resources.audio.players.LoopPlayer; -import mightypork.gamecore.resources.events.ResourceLoadRequest; import mightypork.gamecore.util.math.Calc.Buffers; import mightypork.gamecore.util.math.constraints.vect.Vect; import mightypork.gamecore.util.math.constraints.vect.mutable.VectVar; @@ -87,6 +87,8 @@ public class SoundSystem extends RootBusNode implements Updateable { setListener(INITIAL_LISTENER_POS); soundSystemInited = true; + + getEventBus().send(new AudioReadyEvent()); } } diff --git a/src/mightypork/gamecore/resources/events/ResourceLoadRequestListener.java b/src/mightypork/gamecore/resources/events/ResourceLoadRequestListener.java deleted file mode 100644 index ce3329f..0000000 --- a/src/mightypork/gamecore/resources/events/ResourceLoadRequestListener.java +++ /dev/null @@ -1,20 +0,0 @@ -package mightypork.gamecore.resources.events; - - -import mightypork.gamecore.resources.loading.Deferred; - - -/** - * {@link ResourceLoadRequest} listener - * - * @author MightyPork - */ -public interface ResourceLoadRequestListener { - - /** - * Load a resource - * - * @param resource - */ - void loadResource(Deferred resource); -} diff --git a/src/mightypork/gamecore/resources/fonts/FontBank.java b/src/mightypork/gamecore/resources/fonts/FontBank.java index 790234d..cf4ab63 100644 --- a/src/mightypork/gamecore/resources/fonts/FontBank.java +++ b/src/mightypork/gamecore/resources/fonts/FontBank.java @@ -5,7 +5,7 @@ import java.util.HashMap; import mightypork.gamecore.app.AppAccess; import mightypork.gamecore.app.LightAppModule; -import mightypork.gamecore.resources.events.ResourceLoadRequest; +import mightypork.gamecore.resources.ResourceLoadRequest; import mightypork.gamecore.resources.fonts.impl.DeferredFont; import org.newdawn.slick.opengl.Texture; @@ -36,7 +36,7 @@ public class FontBank extends LightAppModule { * @param key font key * @param font font instance */ - public void loadFont(String key, DeferredFont font) + public void addFont(String key, DeferredFont font) { getEventBus().send(new ResourceLoadRequest(font)); diff --git a/src/mightypork/gamecore/resources/fonts/impl/DeferredFont.java b/src/mightypork/gamecore/resources/fonts/impl/DeferredFont.java index 873afe9..94d09e9 100644 --- a/src/mightypork/gamecore/resources/fonts/impl/DeferredFont.java +++ b/src/mightypork/gamecore/resources/fonts/impl/DeferredFont.java @@ -7,9 +7,9 @@ import java.io.IOException; import java.io.InputStream; import mightypork.gamecore.logging.LogAlias; +import mightypork.gamecore.resources.BaseDeferredResource; +import mightypork.gamecore.resources.MustLoadInMainThread; import mightypork.gamecore.resources.fonts.GLFont; -import mightypork.gamecore.resources.loading.DeferredResource; -import mightypork.gamecore.resources.loading.MustLoadInMainThread; import mightypork.gamecore.resources.textures.FilterMode; import mightypork.gamecore.util.files.FileUtils; import mightypork.gamecore.util.math.color.Color; @@ -23,7 +23,7 @@ import mightypork.gamecore.util.math.constraints.vect.Vect; */ @MustLoadInMainThread @LogAlias(name = "Font") -public class DeferredFont extends DeferredResource implements GLFont { +public class DeferredFont extends BaseDeferredResource implements GLFont { public static enum FontStyle { diff --git a/src/mightypork/gamecore/resources/textures/DeferredTexture.java b/src/mightypork/gamecore/resources/textures/DeferredTexture.java index 924f7cd..eb84614 100644 --- a/src/mightypork/gamecore/resources/textures/DeferredTexture.java +++ b/src/mightypork/gamecore/resources/textures/DeferredTexture.java @@ -3,8 +3,8 @@ package mightypork.gamecore.resources.textures; import mightypork.gamecore.logging.LogAlias; import mightypork.gamecore.render.Render; -import mightypork.gamecore.resources.loading.DeferredResource; -import mightypork.gamecore.resources.loading.MustLoadInMainThread; +import mightypork.gamecore.resources.BaseDeferredResource; +import mightypork.gamecore.resources.MustLoadInMainThread; import mightypork.gamecore.util.math.constraints.rect.Rect; import org.lwjgl.opengl.GL11; @@ -17,7 +17,7 @@ import org.lwjgl.opengl.GL11; */ @LogAlias(name = "Texture") @MustLoadInMainThread -public class DeferredTexture extends DeferredResource implements GLTexture { +public class DeferredTexture extends BaseDeferredResource implements GLTexture { public static DeferredTexture lastBind = null; diff --git a/src/mightypork/gamecore/resources/textures/TextureBank.java b/src/mightypork/gamecore/resources/textures/TextureBank.java index d863f2e..c03b77c 100644 --- a/src/mightypork/gamecore/resources/textures/TextureBank.java +++ b/src/mightypork/gamecore/resources/textures/TextureBank.java @@ -6,8 +6,9 @@ import java.util.Map; import mightypork.gamecore.app.AppAccess; import mightypork.gamecore.app.LightAppModule; -import mightypork.gamecore.resources.events.ResourceLoadRequest; +import mightypork.gamecore.resources.ResourceLoadRequest; import mightypork.gamecore.util.error.KeyAlreadyExistsException; +import mightypork.gamecore.util.math.constraints.rect.Rect; /** @@ -32,31 +33,33 @@ public class TextureBank extends LightAppModule { /** - * Load a texture from resource, with the resource-path as a name. + * Load a texture from resource, without a key. This texture will not be + * added to the bank. * * @param resourcePath resource path of the texture * @param filter * @param wrap * @return texture reference */ - public GLTexture loadTexture(String resourcePath, FilterMode filter, WrapMode wrap) + public GLTexture addTexture(String resourcePath, FilterMode filter, WrapMode wrap) { - return loadTexture(resourcePath, resourcePath, filter, wrap); + return addTexture(resourcePath, resourcePath, filter, wrap); } /** - * Load a texture from resource + * Load a texture from resource; if key is not null, the texture will be + * added to the bank. * - * @param key texture key + * @param key texture key, can be null. * @param resourcePath resource path of the texture * @param filter * @param wrap * @return texture reference */ - public GLTexture loadTexture(String key, String resourcePath, FilterMode filter, WrapMode wrap) + public GLTexture addTexture(String key, String resourcePath, FilterMode filter, WrapMode wrap) { - if (textures.containsKey(key)) throw new KeyAlreadyExistsException(); + if (key != null) if (textures.containsKey(key)) throw new KeyAlreadyExistsException(); final DeferredTexture texture = new DeferredTexture(resourcePath); texture.setFilter(filter); @@ -64,7 +67,10 @@ public class TextureBank extends LightAppModule { getEventBus().send(new ResourceLoadRequest(texture)); - textures.put(key, texture); + if (key != null) { + textures.put(key, texture); + add(key, texture.makeQuad(Rect.ONE)); + } return texture; } diff --git a/src/mightypork/gamecore/util/files/OsUtils.java b/src/mightypork/gamecore/util/files/OsUtils.java index 7429bfc..e1598c3 100644 --- a/src/mightypork/gamecore/util/files/OsUtils.java +++ b/src/mightypork/gamecore/util/files/OsUtils.java @@ -31,80 +31,7 @@ public class OsUtils { private static EnumOS cachedOs; - /** - * Get App dir, ensure it exists - * - * @param dirname - * @return app dir - */ - public static File getWorkDir(String dirname) - { - return getWorkDir(dirname, true); - } - - - /** - * Get App sub-folder - * - * @param dirname - * @param subfolderName - * @param create - * @return the folder - */ - public static File getWorkDir(String dirname, String subfolderName, boolean create) - { - final File f = new File(getWorkDir(dirname), subfolderName); - - if (!f.exists() && create) { - if (!f.mkdirs()) { - throw new RuntimeException("Could not create."); - } - } - - return f; - } - - - /** - * Get App sub-folder, create - * - * @param dirname - * @param subfolderName - * @return the folder - */ - public static File getWorkDir(String dirname, String subfolderName) - { - return getWorkDir(dirname, subfolderName, true); - } - - - public static EnumOS getOs() - { - if (cachedOs != null) return cachedOs; - - final String s = System.getProperty("os.name").toLowerCase(); - - if (s.contains("win")) { - cachedOs = EnumOS.windows; - - } else if (s.contains("mac")) { - cachedOs = EnumOS.macos; - - } else if (s.contains("linux") || s.contains("unix")) { - cachedOs = EnumOS.linux; - - } else if (s.contains("solaris") || s.contains("sunos")) { - cachedOs = EnumOS.solaris; - - } else { - cachedOs = EnumOS.unknown; - } - - return cachedOs; - } - - - private static File getWorkDir(String dirname, boolean create) + public static File getHomeWorkDir(String dirname) { final String userhome = System.getProperty("user.home", "."); File file; @@ -135,15 +62,33 @@ public class OsUtils { break; } - if (!file.exists() || !file.isDirectory()) { - if (create) { - if (!file.mkdirs()) { - throw new RuntimeException("Could not create working directory."); - } - } + return file; + } + + + public static EnumOS getOs() + { + if (cachedOs != null) return cachedOs; + + final String s = System.getProperty("os.name").toLowerCase(); + + if (s.contains("win")) { + cachedOs = EnumOS.windows; + + } else if (s.contains("mac")) { + cachedOs = EnumOS.macos; + + } else if (s.contains("linux") || s.contains("unix")) { + cachedOs = EnumOS.linux; + + } else if (s.contains("solaris") || s.contains("sunos")) { + cachedOs = EnumOS.solaris; + + } else { + cachedOs = EnumOS.unknown; } - return file; + return cachedOs; } } diff --git a/src/mightypork/gamecore/util/files/config/Property.java b/src/mightypork/gamecore/util/files/config/Property.java new file mode 100644 index 0000000..dfeb97d --- /dev/null +++ b/src/mightypork/gamecore/util/files/config/Property.java @@ -0,0 +1,71 @@ +package mightypork.gamecore.util.files.config; + + +import mightypork.gamecore.util.objects.Convert; + + +public abstract class Property { + + private final String comment; + private final String key; + + private T value; + private final T defaultValue; + + + public Property(String key, T defaultValue, String comment) + { + super(); + this.comment = comment; + this.key = key; + this.value = defaultValue; + this.defaultValue = defaultValue; + } + + + public final void parse(String string) + { + setValue(decode(string, defaultValue)); + } + + + public abstract T decode(String string, T defval); + + + public String encode(T value) + { + return Convert.toString(value, Convert.toString(defaultValue)); + } + + + @Override + public final String toString() + { + return encode(value); + } + + + public T getValue() + { + return value; + } + + + @SuppressWarnings("unchecked") + public void setValue(Object value) + { + this.value = (T) value; + } + + + public String getComment() + { + return comment; + } + + + public String getKey() + { + return key; + } +} diff --git a/src/mightypork/gamecore/util/files/config/PropertyManager.java b/src/mightypork/gamecore/util/files/config/PropertyManager.java index 94ec0ce..75d39bc 100644 --- a/src/mightypork/gamecore/util/files/config/PropertyManager.java +++ b/src/mightypork/gamecore/util/files/config/PropertyManager.java @@ -9,9 +9,6 @@ import java.util.ArrayList; import java.util.Map.Entry; import java.util.TreeMap; -import mightypork.gamecore.util.math.Range; -import mightypork.gamecore.util.math.constraints.vect.Vect; -import mightypork.gamecore.util.math.constraints.vect.VectConst; import mightypork.gamecore.util.objects.Convert; @@ -24,35 +21,6 @@ import mightypork.gamecore.util.objects.Convert; */ public class PropertyManager { - private abstract class Property { - - public String comment; - public String key; - - public T value; - public T defaultValue; - - - public Property(String key, T defaultValue, String comment) - { - super(); - this.comment = comment; - this.key = key; - this.defaultValue = defaultValue; - this.value = defaultValue; - } - - - public abstract void parse(String string); - - - @Override - public String toString() - { - return Convert.toString(value); - } - } - private class BooleanProperty extends Property { public BooleanProperty(String key, Boolean defaultValue, String comment) @@ -62,9 +30,9 @@ public class PropertyManager { @Override - public void parse(String string) + public Boolean decode(String string, Boolean defval) { - value = Convert.toBoolean(string, defaultValue); + return Convert.toBoolean(string, defval); } } @@ -77,9 +45,9 @@ public class PropertyManager { @Override - public void parse(String string) + public Integer decode(String string, Integer defval) { - value = Convert.toInteger(string, defaultValue); + return Convert.toInteger(string, defval); } } @@ -92,9 +60,9 @@ public class PropertyManager { @Override - public void parse(String string) + public Double decode(String string, Double defval) { - value = Convert.toDouble(string, defaultValue); + return Convert.toDouble(string, defval); } } @@ -107,39 +75,9 @@ public class PropertyManager { @Override - public void parse(String string) + public String decode(String string, String defval) { - value = Convert.toString(string, defaultValue); - } - } - - private class RangeProperty extends Property { - - public RangeProperty(String key, Range defaultValue, String comment) - { - super(key, defaultValue, comment); - } - - - @Override - public void parse(String string) - { - value = Convert.toRange(string, defaultValue); - } - } - - private class CoordProperty extends Property { - - public CoordProperty(String key, Vect defaultValue, String comment) - { - super(key, defaultValue, comment); - } - - - @Override - public void parse(String string) - { - value = Convert.toVect(string, defaultValue); + return Convert.toString(string, defval); } } @@ -155,7 +93,6 @@ public class PropertyManager { private final TreeMap> entries; private final TreeMap renameTable; - private final TreeMap overrideValues; private SortedProperties props = new SortedProperties(); @@ -169,7 +106,6 @@ public class PropertyManager { { this.file = file; this.entries = new TreeMap<>(); - this.overrideValues = new TreeMap<>(); this.renameTable = new TreeMap<>(); this.fileComment = comment; } @@ -178,7 +114,7 @@ public class PropertyManager { /** * Load, fix and write to file. */ - public void apply() + public void load() { boolean needsSave = false; if (!file.getParentFile().mkdirs()) { @@ -201,38 +137,30 @@ public class PropertyManager { // rename keys for (final Entry entry : renameTable.entrySet()) { - if (props.getProperty(entry.getKey()) == null) { - continue; - } - props.setProperty(entry.getValue(), props.getProperty(entry.getKey())); + + final String pr = props.getProperty(entry.getKey()); + + if (pr == null) continue; + props.remove(entry.getKey()); - needsSave = true; - } - - // set the override values into the freshly loaded properties file - for (final Entry entry : overrideValues.entrySet()) { - props.setProperty(entry.getKey(), entry.getValue()); + props.setProperty(entry.getValue(), pr); needsSave = true; } // validate entries one by one, replace with default when needed for (final Property entry : entries.values()) { - keyList.add(entry.key); + keyList.add(entry.getKey()); - final String propOrig = props.getProperty(entry.key); + final String propOrig = props.getProperty(entry.getKey()); entry.parse(propOrig); - if (!entry.toString().equals(propOrig)) { - needsSave = true; - } - - if (entry.comment != null) { - props.setKeyComment(entry.key, entry.comment); + if (entry.getComment() != null) { + props.setKeyComment(entry.getKey(), entry.getComment()); } if (propOrig == null || !entry.toString().equals(propOrig)) { - props.setProperty(entry.key, entry.toString()); + props.setProperty(entry.getKey(), entry.toString()); needsSave = true; } @@ -244,23 +172,27 @@ public class PropertyManager { props.remove(propname); needsSave = true; } - } // save if needed if (needsSave || cfgForceSave) { - try { - props.store(new FileOutputStream(file), fileComment); - } catch (final IOException ioe) { - ioe.printStackTrace(); - } + save(); } - overrideValues.clear(); renameTable.clear(); } + public void save() + { + try { + props.store(new FileOutputStream(file), fileComment); + } catch (final IOException ioe) { + ioe.printStackTrace(); + } + } + + /** * @param newlineBeforeComments put newline before comments */ @@ -291,13 +223,13 @@ public class PropertyManager { /** * Get a property entry (rarely used) * - * @param n key + * @param k key * @return the entry */ - private Property get(String n) + private Property getProperty(String k) { try { - return entries.get(n); + return entries.get(k); } catch (final Throwable t) { return null; } @@ -307,137 +239,117 @@ public class PropertyManager { /** * Get boolean property * - * @param n key + * @param k key * @return the boolean found, or false */ - public Boolean getBoolean(String n) + public Boolean getBoolean(String k) { - return Convert.toBoolean(get(n).value); + return Convert.toBoolean(getProperty(k).getValue()); } /** * Get numeric property * - * @param n key + * @param k key * @return the int found, or null */ - public Integer getInteger(String n) + public Integer getInteger(String k) { - return Convert.toInteger(get(n).value); + return Convert.toInteger(getProperty(k).getValue()); } /** * Get numeric property as double * - * @param n key + * @param k key * @return the double found, or null */ - public Double getDouble(String n) + public Double getDouble(String k) { - return Convert.toDouble(get(n).value); + return Convert.toDouble(getProperty(k).getValue()); } /** * Get string property * - * @param n key + * @param k key * @return the string found, or null */ - public String getString(String n) + public String getString(String k) { - return Convert.toString(get(n).value); + return Convert.toString(getProperty(k).getValue()); } /** - * Get range property + * Get arbitrary property. Make sure it's of the right type! * - * @param n key - * @return the range found, or null + * @param k key + * @return the prioperty found */ - public Range getRange(String n) + @SuppressWarnings("unchecked") + public T getValue(String k) { - return Convert.toRange(get(n).value); - } - - - /** - * Get coord property - * - * @param n key - * @return the coord found, or null - */ - public VectConst getCoord(String n) - { - return Convert.toVect(get(n).value); + try { + return ((Property) getProperty(k)).getValue(); + } catch (final ClassCastException e) { + return null; + } } /** * Add a boolean property * - * @param n key + * @param k key * @param d default value * @param comment the in-file comment */ - public void putBoolean(String n, boolean d, String comment) + public void putBoolean(String k, boolean d, String comment) { - entries.put(n, new BooleanProperty(n, d, comment)); + putProperty(new BooleanProperty(k, d, comment)); } /** * Add a numeric property (double) * - * @param n key + * @param k key * @param d default value * @param comment the in-file comment */ - public void putDouble(String n, double d, String comment) + public void putDouble(String k, double d, String comment) { - entries.put(n, new DoubleProperty(n, d, comment)); + putProperty(new DoubleProperty(k, d, comment)); } /** * Add a numeric property * - * @param n key + * @param k key * @param d default value * @param comment the in-file comment */ - public void putInteger(String n, int d, String comment) + public void putInteger(String k, int d, String comment) { - entries.put(n, new IntegerProperty(n, d, comment)); + putProperty(new IntegerProperty(k, d, comment)); } /** * Add a string property * - * @param n key + * @param k key * @param d default value * @param comment the in-file comment */ - public void putString(String n, String d, String comment) + public void putString(String k, String d, String comment) { - entries.put(n, new StringProperty(n, d, comment)); - } - - - /** - * Add a coord property - * - * @param n key - * @param d default value - * @param comment the in-file comment - */ - public void putCoord(String n, Vect d, String comment) - { - entries.put(n, new CoordProperty(n, d, comment)); + putProperty(new StringProperty(k, d, comment)); } @@ -445,17 +357,16 @@ public class PropertyManager { * Add a range property * * @param n key - * @param d default value - * @param comment the in-file comment + * @param prop property to put */ - public void putRange(String n, Range d, String comment) + public void putProperty(Property prop) { - entries.put(n, new RangeProperty(n, d, comment)); + entries.put(prop.getKey(), prop); } /** - * Rename key before doing "apply"; value is preserved + * Rename key before loading; value is preserved * * @param oldKey old key * @param newKey new key @@ -468,16 +379,20 @@ public class PropertyManager { /** - * Set value saved to certain key; use to save runtime-changed configuration - * values. + * Set value saved to certain key. * * @param key key * @param value the saved value */ public void setValue(String key, Object value) { - overrideValues.put(key, value.toString()); - return; + getProperty(key).setValue(value); + } + + + public void setFileComment(String fileComment) + { + this.fileComment = fileComment; } } diff --git a/src/mightypork/gamecore/util/objects/EnumerationIterator.java b/src/mightypork/gamecore/util/objects/EnumerationIterator.java new file mode 100644 index 0000000..82714dd --- /dev/null +++ b/src/mightypork/gamecore/util/objects/EnumerationIterator.java @@ -0,0 +1,52 @@ +package mightypork.gamecore.util.objects; + + +import java.util.Enumeration; +import java.util.Iterator; + + +/** + * Helper class for iterationg over an {@link Enumeration} + * + * @author MightyPork + * @param target element type (will be cast) + */ +public class EnumerationIterator implements Iterable { + + private final Enumeration enumeration; + + + public EnumerationIterator(Enumeration enumeration) + { + this.enumeration = enumeration; + } + + + @Override + public Iterator iterator() + { + return new Iterator() { + + @Override + public boolean hasNext() + { + return enumeration.hasMoreElements(); + } + + + @Override + public T next() + { + return enumeration.nextElement(); + } + + + @Override + public void remove() + { + throw new UnsupportedOperationException("Operation not supported."); + } + }; + } + +} diff --git a/src/mightypork/rogue/Config.java b/src/mightypork/rogue/Config.java deleted file mode 100644 index 2ba36b8..0000000 --- a/src/mightypork/rogue/Config.java +++ /dev/null @@ -1,84 +0,0 @@ -package mightypork.rogue; - - -import mightypork.gamecore.logging.Log; -import mightypork.gamecore.util.files.config.PropertyManager; - - -/** - * Main Config class - * - * @author MightyPork - */ -public final class Config { - - private static PropertyManager mgr; - - // opts - public static final int def_LAST_RUN_VERSION = 0; - public static int LAST_RUN_VERSION; - - public static final boolean def_START_IN_FS = false; - public static boolean START_IN_FS; - - // property keys - private static final String PK_LAST_RUN_VERSION = "status.last_run_version"; - private static final String PK_START_IN_FS = "cfg.start_in_fullscreen"; - - - /** - * Prepare config manager and load user settings - */ - public static void init() - { - Log.f2("Initializing configuration manager."); - - final String comment = Const.APP_NAME + " config file"; - - mgr = new PropertyManager(Paths.CONFIG, comment); - - mgr.cfgNewlineBeforeComments(true); - mgr.cfgSeparateSections(true); - - mgr.putInteger(PK_LAST_RUN_VERSION, def_LAST_RUN_VERSION, null); - mgr.putBoolean(PK_START_IN_FS, def_START_IN_FS, "Go to fullscreen on startup."); - - load(); // load what has been "put" - } - - - /** - * Save changed fields to config file - */ - public static void save() - { - mgr.setValue(PK_LAST_RUN_VERSION, Const.VERSION); - mgr.setValue(PK_START_IN_FS, START_IN_FS); - - mgr.apply(); - } - - - /** - * Load config file and assign values to fields - */ - public static void load() - { - mgr.apply(); - - LAST_RUN_VERSION = mgr.getInteger(PK_LAST_RUN_VERSION); - START_IN_FS = mgr.getBoolean(PK_START_IN_FS); - } - - // options that can't be configured via config file - - public static boolean LOGGING_ENABLED = true; - public static boolean LOG_TO_STDOUT = true; - public static boolean SINGLE_INSTANCE = true; - - /** Render dark in unknown area & skip invisible stuff */ - public static boolean RENDER_UFOG = true; - - /** Render a font bounding box in text painters. */ - public static boolean DEBUG_FONT_RENDER = false; -} diff --git a/src/mightypork/rogue/Const.java b/src/mightypork/rogue/Const.java index 05a91f7..6ebbc9b 100644 --- a/src/mightypork/rogue/Const.java +++ b/src/mightypork/rogue/Const.java @@ -9,7 +9,7 @@ package mightypork.rogue; public final class Const { // STRINGS - public static final int VERSION = 3; + public static final int VERSION = 4; public static final String APP_NAME = "Rogue"; public static final String TITLEBAR = APP_NAME + " v." + VERSION; @@ -20,4 +20,7 @@ public final class Const { // INITIAL WINDOW SIZE public static final int WINDOW_W = 1024; public static final int WINDOW_H = 768; + + /** Render dark in unknown area & skip invisible stuff */ + public static boolean RENDER_UFOG = true; } diff --git a/src/mightypork/rogue/Launcher.java b/src/mightypork/rogue/Launcher.java new file mode 100644 index 0000000..9e482c4 --- /dev/null +++ b/src/mightypork/rogue/Launcher.java @@ -0,0 +1,59 @@ +package mightypork.rogue; + + +import java.io.File; +import java.util.Arrays; + +import mightypork.gamecore.app.BaseApp; +import mightypork.gamecore.logging.Log; +import mightypork.gamecore.util.files.OsUtils; + + +public class Launcher { + + /** + * Launcher + * + * @param args + */ + public static void main(String[] args) + { + Log.f3(Arrays.toString(args)); + + File workdir = null; + + try { + boolean localWorkdir = false; + String lwdDir = null; + + for (int i = 0; i < args.length; i++) { + if (args[i].equals("--workdir") || args[i].equals("-w")) { + localWorkdir = true; + lwdDir = args[i + 1]; + i++; + } + } + + if (!localWorkdir) { + workdir = OsUtils.getHomeWorkDir(lwdDir); + } else { + workdir = new File(".rogue-save"); + } + + } catch (final ArrayIndexOutOfBoundsException e) { + Log.e("Malformed arguments."); + } + + final BaseApp app = new RogueApp(workdir, true); + + app.addResources(new RogueResources()); + app.addKeys(new RogueKeys()); + app.addConfig(new RogueConfig()); + + app.setBusLogging(false); + app.setConfigFile("config.ini", "Rogue config file"); + app.setLogOptions("/", "runtime", 5, java.util.logging.Level.ALL); + + app.start(); + } +} diff --git a/src/mightypork/rogue/Paths.java b/src/mightypork/rogue/Paths.java deleted file mode 100644 index 91e0a8b..0000000 --- a/src/mightypork/rogue/Paths.java +++ /dev/null @@ -1,65 +0,0 @@ -package mightypork.rogue; - - -import java.io.File; - -import mightypork.gamecore.util.files.OsUtils; - - -public final class Paths { - - private static final String WORKDIR_NAME = ".rogue-save"; - - public static File WORKDIR; - public static File LOG_FILE; - public static File SCREENSHOTS; - public static File CONFIG; - public static File LOCK; - - public static File SAVE_SLOT_1; - public static File SAVE_SLOT_2; - public static File SAVE_SLOT_3; - - - /** - * Initialize for local workdir - * - * @param local_wd_name workdir name - */ - public static void init(String local_wd_name) - { - init(true, local_wd_name); - } - - - /** - * Initialize for gloal workdir - */ - public static void init() - { - init(false, WORKDIR_NAME); - } - - - private static void init(boolean local_workdir, String workdir_name) - { - if (local_workdir) { - WORKDIR = new File(workdir_name); - } else { - WORKDIR = OsUtils.getWorkDir(workdir_name); - } - - LOG_FILE = new File(WORKDIR, "runtime.log"); - - SCREENSHOTS = new File(WORKDIR, "screenshots"); - - CONFIG = new File(WORKDIR, "config.ini"); - - LOCK = new File(WORKDIR, ".lock"); - - SAVE_SLOT_1 = new File(WORKDIR, "saves/slot_1.ion"); - SAVE_SLOT_2 = new File(WORKDIR, "saves/slot_2.ion"); - SAVE_SLOT_3 = new File(WORKDIR, "saves/slot_3.ion"); - } - -} diff --git a/src/mightypork/rogue/App.java b/src/mightypork/rogue/RogueApp.java similarity index 50% rename from src/mightypork/rogue/App.java rename to src/mightypork/rogue/RogueApp.java index 241306d..d5e0733 100644 --- a/src/mightypork/rogue/App.java +++ b/src/mightypork/rogue/RogueApp.java @@ -2,25 +2,19 @@ package mightypork.rogue; import java.io.File; -import java.util.Arrays; -import java.util.Locale; +import mightypork.gamecore.Config; import mightypork.gamecore.app.BaseApp; import mightypork.gamecore.app.MainLoop; import mightypork.gamecore.app.MainLoopRequest; import mightypork.gamecore.eventbus.BusEvent; -import mightypork.gamecore.eventbus.EventBus; import mightypork.gamecore.gui.screens.ScreenRegistry; import mightypork.gamecore.input.InputSystem; -import mightypork.gamecore.input.KeyStroke; -import mightypork.gamecore.input.Keys; -import mightypork.gamecore.logging.Log; -import mightypork.gamecore.logging.writers.LogWriter; +import mightypork.gamecore.input.KeyConfig; +import mightypork.gamecore.input.KeyStroke.Edge; import mightypork.gamecore.render.DisplaySystem; -import mightypork.gamecore.resources.loading.AsyncResourceLoader; import mightypork.gamecore.util.ion.Ion; -import mightypork.gamecore.util.strings.StringUtils; -import mightypork.rogue.GameStateManager.GameState; +import mightypork.rogue.RogueStateManager.RogueState; import mightypork.rogue.events.ActionRequest; import mightypork.rogue.events.ActionRequest.RequestType; import mightypork.rogue.events.GameStateRequest; @@ -40,66 +34,11 @@ import mightypork.rogue.world.level.Level; * * @author MightyPork */ -public final class App extends BaseApp { +public final class RogueApp extends BaseApp { - /** - * Launcher - * - * @param args - */ - public static void main(String[] args) + public RogueApp(File workdir, boolean singleInstance) { - Log.f3(Arrays.toString(args)); - - try { - boolean lwd = false; - String lwdDir = null; - - for (int i = 0; i < args.length; i++) { - if (args[i].equals("--workdir") || args[i].equals("-w")) { - lwd = true; - lwdDir = args[i + 1]; - i++; - } - } - - if (!lwd) { - Paths.init(); - } else { - Paths.init(lwdDir); - } - - } catch (ArrayIndexOutOfBoundsException e) { - Log.e("Malformed arguments."); - } - - Log.i("Using workdir: " + Paths.WORKDIR.getAbsolutePath()); - - (new App()).start(); - } - - - @Override - protected File getLockFile() - { - return Paths.LOCK; - } - - - @Override - protected void preInit() - { - Config.init(); - Config.save(); - } - - - @Override - protected LogWriter createLog() - { - Locale.setDefault(Locale.ENGLISH); // for decimal point in numbers - - return Log.create("runtime", Paths.LOG_FILE, 5); + super(workdir, singleInstance); } @@ -113,31 +52,14 @@ public final class App extends BaseApp { } - @Override - protected void initBus(EventBus bus) - { - bus.detailedLogging = true; - } - - @Override protected void initDisplay(DisplaySystem display) { - display.createMainWindow(Const.WINDOW_W, Const.WINDOW_H, true, Config.START_IN_FS, Const.TITLEBAR); + display.createMainWindow(Const.WINDOW_W, Const.WINDOW_H, true, Config. get("opt.fullscreen"), Const.TITLEBAR); display.setTargetFps(Const.FPS_RENDER); } - @Override - protected void initResources() - { - final AsyncResourceLoader thread = AsyncResourceLoader.launch(this); - thread.enableMainLoopQueuing(true); - - Res.load(this); - } - - @Override protected void initScreens(ScreenRegistry screens) { @@ -145,8 +67,8 @@ public final class App extends BaseApp { /* game screen references world provider instance */ WorldProvider.init(this); + getEventBus().subscribe(new RogueStateManager(this)); - getEventBus().subscribe(new GameStateManager(this)); screens.addScreen("main_menu", new ScreenMainMenu(this)); screens.addScreen("select_world", new ScreenSelectWorld(this)); @@ -162,23 +84,17 @@ public final class App extends BaseApp { protected void initInputSystem(InputSystem input) { // this will work only with reusable events (such as requests) - bindEventToKey(new ActionRequest(RequestType.FULLSCREEN), Keys.F11); - bindEventToKey(new ActionRequest(RequestType.SCREENSHOT), Keys.F2); + bindEventToKey(new ActionRequest(RequestType.FULLSCREEN), "key.global.fullscreen"); + bindEventToKey(new ActionRequest(RequestType.SCREENSHOT), "key.global.screenshot"); - bindEventToKey(new GameStateRequest(GameState.EXIT), Keys.Q, Keys.MOD_SHIFT | Keys.MOD_CONTROL); - bindEventToKey(new GameStateRequest(GameState.MAIN_MENU), Keys.M, Keys.MOD_SHIFT | Keys.MOD_CONTROL); - } - - - private void bindEventToKey(final BusEvent event, int key) - { - bindEventToKey(event, key, Keys.MOD_NONE); + bindEventToKey(new GameStateRequest(RogueState.EXIT), "key.global.quit"); + bindEventToKey(new GameStateRequest(RogueState.MAIN_MENU), "key.global.menu"); } - private void bindEventToKey(final BusEvent event, int key, int mod) + private void bindEventToKey(final BusEvent event, String strokeName) { - getInput().bindKey(new KeyStroke(key, mod), new Runnable() { + getInput().bindKey(KeyConfig.get(strokeName), Edge.RISING, new Runnable() { @Override public void run() @@ -192,7 +108,7 @@ public final class App extends BaseApp { @Override protected MainLoop createMainLoop() { - return new GameLoop(this); + return new RogueMainLoop(this); } @@ -204,7 +120,7 @@ public final class App extends BaseApp { @Override public void run() { - getEventBus().send(new GameStateRequest(GameState.MAIN_MENU)); + getEventBus().send(new GameStateRequest(RogueState.MAIN_MENU)); //getEventBus().send(new CrossfadeRequest("test.layout", true)); } })); diff --git a/src/mightypork/rogue/RogueConfig.java b/src/mightypork/rogue/RogueConfig.java new file mode 100644 index 0000000..4eb58de --- /dev/null +++ b/src/mightypork/rogue/RogueConfig.java @@ -0,0 +1,16 @@ +package mightypork.rogue; + + +import mightypork.gamecore.ConfigSetup; +import mightypork.gamecore.util.files.config.PropertyManager; + + +public class RogueConfig implements ConfigSetup { + + @Override + public void addOptions(PropertyManager prop) + { + prop.putBoolean("opt.fullscreen", false, "Start in fullscreen"); + } + +} diff --git a/src/mightypork/rogue/RogueKeys.java b/src/mightypork/rogue/RogueKeys.java new file mode 100644 index 0000000..4b6caef --- /dev/null +++ b/src/mightypork/rogue/RogueKeys.java @@ -0,0 +1,23 @@ +package mightypork.rogue; + + +import mightypork.gamecore.input.KeyConfig; +import mightypork.gamecore.input.KeySetup; + + +public class RogueKeys implements KeySetup { + + @Override + public void addKeys(KeyConfig keys) + { + keys.add("key.global.quit", "CTRL+SHIFT+Q"); + keys.add("key.global.menu", "CTRL+SHIFT+M"); + keys.add("key.global.screenshot", "F2"); + keys.add("key.global.fullscreen", "F11"); + + keys.add("key.general.cancel", "ESC"); + keys.add("key.general.confirm", "ENTER"); + keys.add("key.general.yes", "Y"); + keys.add("key.general.no", "N"); + } +} diff --git a/src/mightypork/rogue/GameLoop.java b/src/mightypork/rogue/RogueMainLoop.java similarity index 87% rename from src/mightypork/rogue/GameLoop.java rename to src/mightypork/rogue/RogueMainLoop.java index db88b6f..d96d892 100644 --- a/src/mightypork/rogue/GameLoop.java +++ b/src/mightypork/rogue/RogueMainLoop.java @@ -7,19 +7,21 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; +import mightypork.gamecore.WorkDir; import mightypork.gamecore.app.BaseApp; import mightypork.gamecore.app.MainLoop; import mightypork.gamecore.gui.Action; import mightypork.gamecore.logging.Log; import mightypork.gamecore.render.Screenshot; +import mightypork.gamecore.resources.Res; import mightypork.gamecore.util.Utils; import mightypork.rogue.events.ActionRequest; import mightypork.rogue.events.ActionRequest.RequestType; -public final class GameLoop extends MainLoop implements ActionRequest.Listener { +public final class RogueMainLoop extends MainLoop implements ActionRequest.Listener { - public GameLoop(BaseApp app) + public RogueMainLoop(BaseApp app) { super(app); } @@ -100,7 +102,7 @@ public final class GameLoop extends MainLoop implements ActionRequest.Listener { File file; int index = 0; while (true) { - file = new File(Paths.SCREENSHOTS, fname + (index > 0 ? "-" + index : "") + ".png"); + file = new File(WorkDir.getDir("screenshots"), fname + (index > 0 ? "-" + index : "") + ".png"); if (!file.exists()) break; index++; } diff --git a/src/mightypork/rogue/Res.java b/src/mightypork/rogue/RogueResources.java similarity index 67% rename from src/mightypork/rogue/Res.java rename to src/mightypork/rogue/RogueResources.java index bc1d6ff..d354175 100644 --- a/src/mightypork/rogue/Res.java +++ b/src/mightypork/rogue/RogueResources.java @@ -1,63 +1,34 @@ package mightypork.rogue; -import mightypork.gamecore.app.BaseApp; +import mightypork.gamecore.resources.ResourceSetup; import mightypork.gamecore.resources.audio.SoundBank; -import mightypork.gamecore.resources.audio.players.EffectPlayer; -import mightypork.gamecore.resources.audio.players.LoopPlayer; import mightypork.gamecore.resources.fonts.FontBank; -import mightypork.gamecore.resources.fonts.GLFont; import mightypork.gamecore.resources.fonts.Glyphs; import mightypork.gamecore.resources.fonts.impl.DeferredFont; -import mightypork.gamecore.resources.textures.*; +import mightypork.gamecore.resources.textures.FilterMode; +import mightypork.gamecore.resources.textures.GLTexture; +import mightypork.gamecore.resources.textures.QuadGrid; +import mightypork.gamecore.resources.textures.TextureBank; +import mightypork.gamecore.resources.textures.WrapMode; import mightypork.gamecore.util.math.constraints.rect.Rect; -/** - * Static resource repository - * - * @author MightyPork - */ -public final class Res { +public class RogueResources implements ResourceSetup { - private static TextureBank textures; - private static SoundBank sounds; - private static FontBank fonts; - private static boolean initialized = false; - - - /** - * Load on behalf of given base app - * - * @param app app access - */ - public static void load(BaseApp app) - { - if (initialized) return; - initialized = true; - - textures = new TextureBank(app); - sounds = new SoundBank(app); - fonts = new FontBank(app); - - loadSounds(); - loadFonts(); - loadTextures(); - } - - - private static void loadFonts() + @Override + public void addFonts(FontBank fonts) { DeferredFont font; //fonts.loadFont("polygon_pixel", new DeferredFont("/res/font/PolygonPixel5x7Standard.ttf", Glyphs.basic, 16)); - fonts.loadFont("press_start", font = new DeferredFont("/res/font/PressStart2P.ttf", Glyphs.basic, 16)); + fonts.addFont("press_start", font = new DeferredFont("/res/font/PressStart2P.ttf", Glyphs.basic, 16)); - fonts.loadFont("battlenet", font = new DeferredFont("/res/font/battlenet.ttf", Glyphs.basic, 16)); + fonts.addFont("battlenet", font = new DeferredFont("/res/font/battlenet.ttf", Glyphs.basic, 16)); font.setDiscardRatio(3 / 16D, 2 / 16D); - fonts.loadFont("tinyutf", font = new DeferredFont("/res/font/TinyUnicode2.ttf", Glyphs.basic, 16)); + fonts.addFont("tinyutf", font = new DeferredFont("/res/font/TinyUnicode2.ttf", Glyphs.basic, 16)); font.setDiscardRatio(5 / 16D, 3 / 16D); // aliases @@ -67,13 +38,21 @@ public final class Res { } - private static void loadTextures() + @Override + public void addSounds(SoundBank sounds) + { + sounds.addEffect("gui.shutter", "/res/audio/shutter.ogg", 1, 1); + } + + + @Override + public void addTextures(TextureBank textures) { GLTexture texture; QuadGrid grid; // gui - texture = textures.loadTexture("/res/img/gui.png", FilterMode.NEAREST, WrapMode.CLAMP); + texture = textures.addTexture("/res/img/gui.png", FilterMode.NEAREST, WrapMode.CLAMP); // small gui elements grid = texture.grid(32, 32); @@ -106,7 +85,7 @@ public final class Res { // sprites - texture = textures.loadTexture("/res/img/sprites.png", FilterMode.NEAREST, WrapMode.CLAMP); + texture = textures.addTexture("/res/img/sprites.png", FilterMode.NEAREST, WrapMode.CLAMP); grid = texture.grid(8, 8); textures.add("sprite.player", grid.makeSheet(0, 0, 4, 1)); textures.add("sprite.rat.gray", grid.makeSheet(0, 1, 4, 1)); @@ -116,14 +95,14 @@ public final class Res { // logo - texture = textures.loadTexture("/res/img/logo.png", FilterMode.NEAREST, WrapMode.CLAMP); + texture = textures.addTexture("/res/img/logo.png", FilterMode.NEAREST, WrapMode.CLAMP); textures.add("logo", texture.makeQuad(Rect.make(0, 0, 0.543, 0.203))); grid = texture.grid(8, 8); textures.add("death", grid.makeQuad(0, 2)); // tiles - texture = textures.loadTexture("tiles", "/res/img/tiles.png", FilterMode.NEAREST, WrapMode.CLAMP); + texture = textures.addTexture("tiles", "/res/img/tiles.png", FilterMode.NEAREST, WrapMode.CLAMP); grid = texture.grid(8, 8); textures.add("tile.brick.floor", grid.makeSheet(0, 1, 5, 1)); @@ -163,7 +142,7 @@ public final class Res { textures.add("tile.ufog.full", grid.makeQuad(6, 7)); - texture = textures.loadTexture("items", "/res/img/items.png", FilterMode.NEAREST, WrapMode.CLAMP); + texture = textures.addTexture("items", "/res/img/items.png", FilterMode.NEAREST, WrapMode.CLAMP); grid = texture.grid(8, 8); textures.add("item.meat", grid.makeQuad(0, 0)); textures.add("item.club", grid.makeQuad(1, 0)); @@ -178,58 +157,4 @@ public final class Res { textures.add("item.twig", grid.makeQuad(2, 1)); } - - private static void loadSounds() - { - sounds.addEffect("gui.shutter", "/res/audio/shutter.ogg", 1, 1); - } - - - public static GLTexture getTexture(String key) - { - return textures.getTexture(key); - } - - - /** - * Get a texture sheet by key - * - * @param key - * @return sheet - */ - public static TxSheet getTxSheet(String key) - { - return textures.getSheet(key); - } - - - /** - * Get a texture quad by key - * - * @param key - * @return quad - */ - public static TxQuad getTxQuad(String key) - { - return textures.getQuad(key); - } - - - public static LoopPlayer getSoundLoop(String key) - { - return sounds.getLoop(key); - } - - - public static EffectPlayer getSoundEffect(String key) - { - return sounds.getEffect(key); - } - - - public static GLFont getFont(String key) - { - return fonts.getFont(key); - } - } diff --git a/src/mightypork/rogue/GameStateManager.java b/src/mightypork/rogue/RogueStateManager.java similarity index 81% rename from src/mightypork/rogue/GameStateManager.java rename to src/mightypork/rogue/RogueStateManager.java index db03238..d808e7b 100644 --- a/src/mightypork/rogue/GameStateManager.java +++ b/src/mightypork/rogue/RogueStateManager.java @@ -7,20 +7,20 @@ import mightypork.gamecore.gui.events.CrossfadeRequest; import mightypork.gamecore.logging.Log; -public class GameStateManager extends AppModule { +public class RogueStateManager extends AppModule { - public GameStateManager(AppAccess app) + public RogueStateManager(AppAccess app) { super(app); } - public static enum GameState + public static enum RogueState { MAIN_MENU, SELECT_WORLD, PLAY_WORLD, EXIT } - public void triggerAction(GameState state) + public void triggerAction(RogueState state) { switch (state) { case MAIN_MENU: diff --git a/src/mightypork/rogue/events/GameStateRequest.java b/src/mightypork/rogue/events/GameStateRequest.java index 98f33cd..14c0438 100644 --- a/src/mightypork/rogue/events/GameStateRequest.java +++ b/src/mightypork/rogue/events/GameStateRequest.java @@ -2,8 +2,8 @@ package mightypork.rogue.events; import mightypork.gamecore.eventbus.BusEvent; -import mightypork.rogue.GameStateManager; -import mightypork.rogue.GameStateManager.GameState; +import mightypork.rogue.RogueStateManager; +import mightypork.rogue.RogueStateManager.RogueState; /** @@ -11,19 +11,19 @@ import mightypork.rogue.GameStateManager.GameState; * * @author MightyPork */ -public class GameStateRequest extends BusEvent { +public class GameStateRequest extends BusEvent { - final private GameState requested; + final private RogueState requested; - public GameStateRequest(GameState requested) + public GameStateRequest(RogueState requested) { this.requested = requested; } @Override - protected void handleBy(GameStateManager handler) + protected void handleBy(RogueStateManager handler) { handler.triggerAction(requested); } diff --git a/src/mightypork/rogue/screens/FpsOverlay.java b/src/mightypork/rogue/screens/FpsOverlay.java index 746c5dd..04b72df 100644 --- a/src/mightypork/rogue/screens/FpsOverlay.java +++ b/src/mightypork/rogue/screens/FpsOverlay.java @@ -7,14 +7,15 @@ import mightypork.gamecore.gui.AlignX; import mightypork.gamecore.gui.components.painters.TextPainter; import mightypork.gamecore.gui.screens.Overlay; import mightypork.gamecore.input.KeyStroke; +import mightypork.gamecore.input.KeyStroke.Edge; import mightypork.gamecore.input.Keys; +import mightypork.gamecore.resources.Res; import mightypork.gamecore.resources.fonts.GLFont; import mightypork.gamecore.util.math.color.pal.RGB; import mightypork.gamecore.util.math.constraints.num.Num; import mightypork.gamecore.util.math.constraints.rect.proxy.RectBound; import mightypork.gamecore.util.math.constraints.vect.Vect; import mightypork.gamecore.util.strings.StringProvider; -import mightypork.rogue.Res; /** @@ -34,7 +35,7 @@ public class FpsOverlay extends Overlay { /* * Toggle key: F3 */ - bindKey(new KeyStroke(Keys.F3), new Action() { + bindKey(new KeyStroke(Keys.F3), Edge.RISING, new Action() { @Override public void execute() diff --git a/src/mightypork/rogue/screens/LoadingOverlay.java b/src/mightypork/rogue/screens/LoadingOverlay.java index a042bdf..a2f8ded 100644 --- a/src/mightypork/rogue/screens/LoadingOverlay.java +++ b/src/mightypork/rogue/screens/LoadingOverlay.java @@ -6,6 +6,7 @@ import mightypork.gamecore.gui.AlignX; import mightypork.gamecore.gui.components.painters.QuadPainter; import mightypork.gamecore.gui.components.painters.TextPainter; import mightypork.gamecore.gui.screens.Overlay; +import mightypork.gamecore.resources.Res; import mightypork.gamecore.util.Utils; import mightypork.gamecore.util.math.Easing; import mightypork.gamecore.util.math.color.pal.PAL16; @@ -15,7 +16,6 @@ import mightypork.gamecore.util.math.constraints.num.mutable.NumAnimated; import mightypork.gamecore.util.math.constraints.rect.Rect; import mightypork.gamecore.util.math.timing.TimedTask; import mightypork.gamecore.util.strings.StringProvider; -import mightypork.rogue.Res; /** diff --git a/src/mightypork/rogue/screens/game/AskSaveLayer.java b/src/mightypork/rogue/screens/game/AskSaveLayer.java index 77b234e..ebfdf2c 100644 --- a/src/mightypork/rogue/screens/game/AskSaveLayer.java +++ b/src/mightypork/rogue/screens/game/AskSaveLayer.java @@ -12,15 +12,16 @@ import mightypork.gamecore.gui.components.painters.QuadPainter; import mightypork.gamecore.gui.components.painters.TextPainter; import mightypork.gamecore.gui.screens.ScreenLayer; import mightypork.gamecore.input.KeyStroke; +import mightypork.gamecore.input.KeyStroke.Edge; import mightypork.gamecore.input.Keys; import mightypork.gamecore.logging.Log; +import mightypork.gamecore.resources.Res; import mightypork.gamecore.resources.fonts.GLFont; import mightypork.gamecore.util.math.Easing; import mightypork.gamecore.util.math.color.pal.RGB; import mightypork.gamecore.util.math.constraints.num.Num; import mightypork.gamecore.util.math.constraints.num.mutable.NumAnimated; import mightypork.gamecore.util.math.timing.TimedTask; -import mightypork.rogue.Res; import mightypork.rogue.screens.game.ScreenGame.GScrState; import mightypork.rogue.world.WorldProvider; @@ -127,7 +128,7 @@ public class AskSaveLayer extends ScreenLayer { btn3.setAction(cancel); - bindKey(new KeyStroke(Keys.ESCAPE), cancel); + bindKey(new KeyStroke(Keys.ESCAPE), Edge.RISING, cancel); updated.add(numa); updated.add(hideTT); diff --git a/src/mightypork/rogue/screens/game/DeathLayer.java b/src/mightypork/rogue/screens/game/DeathLayer.java index 4af4149..b45227f 100644 --- a/src/mightypork/rogue/screens/game/DeathLayer.java +++ b/src/mightypork/rogue/screens/game/DeathLayer.java @@ -14,11 +14,11 @@ import mightypork.gamecore.gui.components.painters.QuadPainter; import mightypork.gamecore.gui.components.painters.TextPainter; import mightypork.gamecore.gui.screens.ScreenLayer; import mightypork.gamecore.logging.Log; +import mightypork.gamecore.resources.Res; import mightypork.gamecore.resources.fonts.GLFont; import mightypork.gamecore.util.math.color.pal.RGB; import mightypork.gamecore.util.math.constraints.num.Num; -import mightypork.rogue.GameStateManager.GameState; -import mightypork.rogue.Res; +import mightypork.rogue.RogueStateManager.RogueState; import mightypork.rogue.events.GameStateRequest; import mightypork.rogue.screens.game.ScreenGame.GScrState; import mightypork.rogue.world.WorldProvider; @@ -84,7 +84,7 @@ public class DeathLayer extends ScreenLayer { @Override protected void execute() { - getEventBus().send(new GameStateRequest(GameState.MAIN_MENU)); + getEventBus().send(new GameStateRequest(RogueState.MAIN_MENU)); } }); } diff --git a/src/mightypork/rogue/screens/game/HudLayer.java b/src/mightypork/rogue/screens/game/HudLayer.java index 46f65e1..bd7bb11 100644 --- a/src/mightypork/rogue/screens/game/HudLayer.java +++ b/src/mightypork/rogue/screens/game/HudLayer.java @@ -4,11 +4,11 @@ package mightypork.rogue.screens.game; import mightypork.gamecore.gui.AlignX; import mightypork.gamecore.gui.components.painters.TextPainter; import mightypork.gamecore.gui.screens.ScreenLayer; +import mightypork.gamecore.resources.Res; import mightypork.gamecore.util.math.color.pal.RGB; import mightypork.gamecore.util.math.constraints.num.Num; import mightypork.gamecore.util.math.constraints.rect.Rect; import mightypork.gamecore.util.strings.StringProvider; -import mightypork.rogue.Res; import mightypork.rogue.world.World; import mightypork.rogue.world.WorldProvider; import mightypork.rogue.world.gui.Minimap; diff --git a/src/mightypork/rogue/screens/game/IngameNav.java b/src/mightypork/rogue/screens/game/IngameNav.java index 02b6488..821fa3e 100644 --- a/src/mightypork/rogue/screens/game/IngameNav.java +++ b/src/mightypork/rogue/screens/game/IngameNav.java @@ -6,10 +6,10 @@ import mightypork.gamecore.gui.AlignX; import mightypork.gamecore.gui.components.LayoutComponent; import mightypork.gamecore.gui.components.layout.FlowColumnLayout; import mightypork.gamecore.render.Render; +import mightypork.gamecore.resources.Res; import mightypork.gamecore.resources.textures.TxQuad; import mightypork.gamecore.util.math.constraints.rect.Rect; import mightypork.gamecore.util.math.constraints.rect.proxy.RectBound; -import mightypork.rogue.Res; public class IngameNav extends LayoutComponent { diff --git a/src/mightypork/rogue/screens/game/InvSlot.java b/src/mightypork/rogue/screens/game/InvSlot.java index 7006fb9..b498692 100644 --- a/src/mightypork/rogue/screens/game/InvSlot.java +++ b/src/mightypork/rogue/screens/game/InvSlot.java @@ -6,6 +6,7 @@ import mightypork.gamecore.gui.AlignX; import mightypork.gamecore.gui.components.input.ClickableComponent; import mightypork.gamecore.gui.components.painters.TextPainter; import mightypork.gamecore.render.Render; +import mightypork.gamecore.resources.Res; import mightypork.gamecore.resources.textures.TxQuad; import mightypork.gamecore.util.math.Calc; import mightypork.gamecore.util.math.color.Color; @@ -13,7 +14,6 @@ import mightypork.gamecore.util.math.color.pal.RGB; import mightypork.gamecore.util.math.constraints.num.Num; import mightypork.gamecore.util.math.constraints.rect.Rect; import mightypork.gamecore.util.math.constraints.rect.caching.RectCache; -import mightypork.rogue.Res; import mightypork.rogue.world.PlayerFacade; import mightypork.rogue.world.WorldProvider; import mightypork.rogue.world.item.Item; diff --git a/src/mightypork/rogue/screens/game/InventoryLayer.java b/src/mightypork/rogue/screens/game/InventoryLayer.java index 6198976..1afbd84 100644 --- a/src/mightypork/rogue/screens/game/InventoryLayer.java +++ b/src/mightypork/rogue/screens/game/InventoryLayer.java @@ -9,12 +9,13 @@ import mightypork.gamecore.gui.components.painters.QuadPainter; import mightypork.gamecore.gui.components.painters.TextPainter; import mightypork.gamecore.gui.screens.ScreenLayer; import mightypork.gamecore.input.KeyStroke; +import mightypork.gamecore.input.KeyStroke.Edge; import mightypork.gamecore.input.Keys; +import mightypork.gamecore.resources.Res; import mightypork.gamecore.util.math.color.pal.RGB; import mightypork.gamecore.util.math.constraints.num.Num; import mightypork.gamecore.util.math.constraints.rect.Rect; import mightypork.gamecore.util.strings.StringProvider; -import mightypork.rogue.Res; import mightypork.rogue.world.PlayerFacade; import mightypork.rogue.world.World; import mightypork.rogue.world.WorldProvider; @@ -139,7 +140,7 @@ public class InventoryLayer extends ScreenLayer { gl.put(txp2, pos, 0, 1, 1); txp2.setVPaddingPercent(25); - bindKey(new KeyStroke(Keys.ESCAPE), new Runnable() { + bindKey(new KeyStroke(Keys.ESCAPE), Edge.RISING, new Runnable() { @Override public void run() @@ -150,7 +151,7 @@ public class InventoryLayer extends ScreenLayer { } }); - bindKey(new KeyStroke(Keys.E), new Runnable() { + bindKey(new KeyStroke(Keys.E), Edge.RISING, new Runnable() { @Override public void run() @@ -191,7 +192,7 @@ public class InventoryLayer extends ScreenLayer { } }); - bindKey(new KeyStroke(Keys.D), new Runnable() { + bindKey(new KeyStroke(Keys.D), Edge.RISING, new Runnable() { @Override public void run() @@ -212,7 +213,7 @@ public class InventoryLayer extends ScreenLayer { private void setupGridWalkKeys() { - bindKey(new KeyStroke(Keys.LEFT), new Runnable() { + bindKey(new KeyStroke(Keys.LEFT), Edge.RISING, new Runnable() { @Override public void run() @@ -229,7 +230,7 @@ public class InventoryLayer extends ScreenLayer { }; }); - bindKey(new KeyStroke(Keys.RIGHT), new Runnable() { + bindKey(new KeyStroke(Keys.RIGHT), Edge.RISING, new Runnable() { @Override public void run() @@ -246,7 +247,7 @@ public class InventoryLayer extends ScreenLayer { }; }); - bindKey(new KeyStroke(Keys.UP), new Runnable() { + bindKey(new KeyStroke(Keys.UP), Edge.RISING, new Runnable() { @Override public void run() @@ -263,7 +264,7 @@ public class InventoryLayer extends ScreenLayer { }; }); - bindKey(new KeyStroke(Keys.DOWN), new Runnable() { + bindKey(new KeyStroke(Keys.DOWN), Edge.RISING, new Runnable() { @Override public void run() diff --git a/src/mightypork/rogue/screens/game/NavButton.java b/src/mightypork/rogue/screens/game/NavButton.java index 8645c57..add7c4b 100644 --- a/src/mightypork/rogue/screens/game/NavButton.java +++ b/src/mightypork/rogue/screens/game/NavButton.java @@ -3,8 +3,8 @@ package mightypork.rogue.screens.game; import mightypork.gamecore.gui.components.input.ClickableComponent; import mightypork.gamecore.render.Render; +import mightypork.gamecore.resources.Res; import mightypork.gamecore.resources.textures.TxQuad; -import mightypork.rogue.Res; /** diff --git a/src/mightypork/rogue/screens/game/ScreenGame.java b/src/mightypork/rogue/screens/game/ScreenGame.java index 898f9fe..c5d590e 100644 --- a/src/mightypork/rogue/screens/game/ScreenGame.java +++ b/src/mightypork/rogue/screens/game/ScreenGame.java @@ -8,11 +8,12 @@ import mightypork.gamecore.gui.Action; import mightypork.gamecore.gui.ActionGroup; import mightypork.gamecore.gui.screens.LayeredScreen; import mightypork.gamecore.input.KeyStroke; +import mightypork.gamecore.input.KeyStroke.Edge; import mightypork.gamecore.input.Keys; import mightypork.gamecore.logging.Log; import mightypork.gamecore.util.math.color.Color; -import mightypork.rogue.Config; -import mightypork.rogue.GameStateManager.GameState; +import mightypork.rogue.Const; +import mightypork.rogue.RogueStateManager.RogueState; import mightypork.rogue.events.GameStateRequest; import mightypork.rogue.world.PlayerFacade; import mightypork.rogue.world.WorldProvider; @@ -197,7 +198,7 @@ public class ScreenGame extends LayeredScreen implements PlayerKilledListener { @Override public void run() { - getEventBus().send(new GameStateRequest(GameState.MAIN_MENU)); + getEventBus().send(new GameStateRequest(RogueState.MAIN_MENU)); } }); @@ -211,7 +212,7 @@ public class ScreenGame extends LayeredScreen implements PlayerKilledListener { @Override public void run() { - getEventBus().send(new GameStateRequest(GameState.EXIT)); + getEventBus().send(new GameStateRequest(RogueState.EXIT)); } }); @@ -239,20 +240,20 @@ public class ScreenGame extends LayeredScreen implements PlayerKilledListener { addLayer(askSaveLayer = new AskSaveLayer(this)); //pause key - bindKey(new KeyStroke(Keys.P), actionTogglePause); - bindKey(new KeyStroke(Keys.PAUSE), actionTogglePause); - bindKey(new KeyStroke(Keys.SPACE), actionTogglePause); + bindKey(new KeyStroke(Keys.P), Edge.RISING, actionTogglePause); + bindKey(new KeyStroke(Keys.PAUSE), Edge.RISING, actionTogglePause); + bindKey(new KeyStroke(Keys.SPACE), Edge.RISING, actionTogglePause); - bindKey(new KeyStroke(Keys.I), actionToggleInv); - bindKey(new KeyStroke(Keys.D), actionDropLastPickedItem); - bindKey(new KeyStroke(Keys.E), actionEat); - bindKey(new KeyStroke(Keys.M), actionToggleMinimap); - bindKey(new KeyStroke(Keys.Z), actionToggleZoom); + bindKey(new KeyStroke(Keys.I), Edge.RISING, actionToggleInv); + bindKey(new KeyStroke(Keys.D), Edge.RISING, actionDropLastPickedItem); + bindKey(new KeyStroke(Keys.E), Edge.RISING, actionEat); + bindKey(new KeyStroke(Keys.M), Edge.RISING, actionToggleMinimap); + bindKey(new KeyStroke(Keys.Z), Edge.RISING, actionToggleZoom); - bindKey(new KeyStroke(Keys.L, Keys.MOD_CONTROL), actionLoad); - bindKey(new KeyStroke(Keys.S, Keys.MOD_CONTROL), actionSave); - bindKey(new KeyStroke(Keys.Q, Keys.MOD_CONTROL), actionQuit); - bindKey(new KeyStroke(Keys.ESCAPE), actionMenu); + bindKey(new KeyStroke(Keys.L, Keys.MOD_CONTROL), Edge.RISING, actionLoad); + bindKey(new KeyStroke(Keys.S, Keys.MOD_CONTROL), Edge.RISING, actionSave); + bindKey(new KeyStroke(Keys.Q, Keys.MOD_CONTROL), Edge.RISING, actionQuit); + bindKey(new KeyStroke(Keys.ESCAPE), Edge.RISING, actionMenu); // add as actions - enableables. worldActions.add(worldLayer); @@ -272,12 +273,12 @@ public class ScreenGame extends LayeredScreen implements PlayerKilledListener { worldActions.setEnabled(true); // CHEAT - X-ray - bindKey(new KeyStroke(Keys.MULTIPLY, Keys.MOD_CONTROL), new Runnable() { + bindKey(new KeyStroke(Keys.NUMPAD_MULTIPLY, Keys.MOD_CONTROL), Edge.RISING, new Runnable() { @Override public void run() { - Config.RENDER_UFOG ^= true; + Const.RENDER_UFOG ^= true; } }); } diff --git a/src/mightypork/rogue/screens/game/WorldConsoleRenderer.java b/src/mightypork/rogue/screens/game/WorldConsoleRenderer.java index b606cdd..7d497a4 100644 --- a/src/mightypork/rogue/screens/game/WorldConsoleRenderer.java +++ b/src/mightypork/rogue/screens/game/WorldConsoleRenderer.java @@ -7,6 +7,7 @@ import java.util.ConcurrentModificationException; import mightypork.gamecore.gui.AlignX; import mightypork.gamecore.gui.components.BaseComponent; import mightypork.gamecore.logging.Log; +import mightypork.gamecore.resources.Res; import mightypork.gamecore.resources.fonts.FontRenderer; import mightypork.gamecore.util.math.Calc; import mightypork.gamecore.util.math.Easing; @@ -15,7 +16,6 @@ import mightypork.gamecore.util.math.color.pal.RGB; import mightypork.gamecore.util.math.constraints.num.Num; import mightypork.gamecore.util.math.constraints.num.mutable.NumVar; import mightypork.gamecore.util.math.constraints.rect.Rect; -import mightypork.rogue.Res; import mightypork.rogue.world.WorldConsole; import mightypork.rogue.world.WorldProvider; diff --git a/src/mightypork/rogue/screens/layout_testing/LayoutTestScreen.java b/src/mightypork/rogue/screens/layout_testing/LayoutTestScreen.java index 69dc311..c9ecb56 100644 --- a/src/mightypork/rogue/screens/layout_testing/LayoutTestScreen.java +++ b/src/mightypork/rogue/screens/layout_testing/LayoutTestScreen.java @@ -11,9 +11,9 @@ import mightypork.gamecore.gui.components.painters.TextPainter; import mightypork.gamecore.gui.screens.LayeredScreen; import mightypork.gamecore.gui.screens.Screen; import mightypork.gamecore.gui.screens.ScreenLayer; +import mightypork.gamecore.resources.Res; import mightypork.gamecore.util.math.color.pal.RGB; import mightypork.gamecore.util.math.constraints.rect.Rect; -import mightypork.rogue.Res; public class LayoutTestScreen extends LayeredScreen { diff --git a/src/mightypork/rogue/screens/menu/ScreenMainMenu.java b/src/mightypork/rogue/screens/menu/ScreenMainMenu.java index 3f1c5c2..b45f511 100644 --- a/src/mightypork/rogue/screens/menu/ScreenMainMenu.java +++ b/src/mightypork/rogue/screens/menu/ScreenMainMenu.java @@ -13,14 +13,15 @@ import mightypork.gamecore.gui.screens.LayeredScreen; import mightypork.gamecore.gui.screens.Screen; import mightypork.gamecore.gui.screens.ScreenLayer; import mightypork.gamecore.input.KeyStroke; +import mightypork.gamecore.input.KeyStroke.Edge; import mightypork.gamecore.input.Keys; +import mightypork.gamecore.resources.Res; import mightypork.gamecore.resources.fonts.GLFont; import mightypork.gamecore.util.math.color.Color; import mightypork.gamecore.util.math.color.pal.PAL16; import mightypork.gamecore.util.math.constraints.num.Num; import mightypork.gamecore.util.math.constraints.rect.Rect; -import mightypork.rogue.GameStateManager.GameState; -import mightypork.rogue.Res; +import mightypork.rogue.RogueStateManager.RogueState; import mightypork.rogue.events.GameStateRequest; @@ -83,7 +84,7 @@ public class ScreenMainMenu extends LayeredScreen { @Override protected void execute() { - getEventBus().send(new GameStateRequest(GameState.SELECT_WORLD)); + getEventBus().send(new GameStateRequest(RogueState.SELECT_WORLD)); } }); rows.add(btn, 2); @@ -111,18 +112,18 @@ public class ScreenMainMenu extends LayeredScreen { @Override protected void execute() { - getEventBus().send(new GameStateRequest(GameState.EXIT)); + getEventBus().send(new GameStateRequest(RogueState.EXIT)); } }); rows.add(btn, 2); - bindKey(new KeyStroke(Keys.ESCAPE), new Runnable() { + bindKey(new KeyStroke(Keys.ESCAPE), Edge.RISING, new Runnable() { @Override public void run() { - getEventBus().send(new GameStateRequest(GameState.EXIT)); + getEventBus().send(new GameStateRequest(RogueState.EXIT)); } }); } diff --git a/src/mightypork/rogue/screens/select_world/ScreenSelectWorld.java b/src/mightypork/rogue/screens/select_world/ScreenSelectWorld.java index c06dc09..1e671fb 100644 --- a/src/mightypork/rogue/screens/select_world/ScreenSelectWorld.java +++ b/src/mightypork/rogue/screens/select_world/ScreenSelectWorld.java @@ -1,6 +1,7 @@ package mightypork.rogue.screens.select_world; +import mightypork.gamecore.WorkDir; import mightypork.gamecore.app.AppAccess; import mightypork.gamecore.gui.AlignX; import mightypork.gamecore.gui.components.layout.RowLayout; @@ -10,14 +11,14 @@ import mightypork.gamecore.gui.screens.LayeredScreen; import mightypork.gamecore.gui.screens.Screen; import mightypork.gamecore.gui.screens.ScreenLayer; import mightypork.gamecore.input.KeyStroke; +import mightypork.gamecore.input.KeyStroke.Edge; import mightypork.gamecore.input.Keys; +import mightypork.gamecore.resources.Res; import mightypork.gamecore.util.math.color.Color; import mightypork.gamecore.util.math.color.pal.PAL16; import mightypork.gamecore.util.math.color.pal.RGB; import mightypork.gamecore.util.math.constraints.rect.Rect; -import mightypork.rogue.GameStateManager.GameState; -import mightypork.rogue.Paths; -import mightypork.rogue.Res; +import mightypork.rogue.RogueStateManager.RogueState; import mightypork.rogue.events.GameStateRequest; @@ -71,31 +72,31 @@ public class ScreenSelectWorld extends LayeredScreen { tp.setVPaddingPercent(20); tp.setShadow(RGB.BLACK_50, tp.height().mul(0.6 / 8D).toVectXY()); - slot1 = new WorldSlot(root, Paths.SAVE_SLOT_1); + slot1 = new WorldSlot(root, WorkDir.getFile("save/slot_1.ion")); rows.add(slot1); - slot2 = new WorldSlot(root, Paths.SAVE_SLOT_2); + slot2 = new WorldSlot(root, WorkDir.getFile("save/slot_2.ion")); rows.add(slot2); - slot3 = new WorldSlot(root, Paths.SAVE_SLOT_3); + slot3 = new WorldSlot(root, WorkDir.getFile("save/slot_3.ion")); rows.add(slot3); // escape to quitn from here - bindKey(new KeyStroke(Keys.ESCAPE), new Runnable() { + bindKey(new KeyStroke(Keys.ESCAPE), Edge.RISING, new Runnable() { @Override public void run() { - getEventBus().send(new GameStateRequest(GameState.MAIN_MENU)); + getEventBus().send(new GameStateRequest(RogueState.MAIN_MENU)); } }); - bindKey(new KeyStroke(Keys.Q, Keys.MOD_CONTROL), new Runnable() { + bindKey(new KeyStroke(Keys.Q, Keys.MOD_CONTROL), Edge.RISING, new Runnable() { @Override public void run() { - getEventBus().send(new GameStateRequest(GameState.EXIT)); + getEventBus().send(new GameStateRequest(RogueState.EXIT)); } }); } diff --git a/src/mightypork/rogue/screens/select_world/WorldSlot.java b/src/mightypork/rogue/screens/select_world/WorldSlot.java index 82837e8..97cee9b 100644 --- a/src/mightypork/rogue/screens/select_world/WorldSlot.java +++ b/src/mightypork/rogue/screens/select_world/WorldSlot.java @@ -13,6 +13,7 @@ import mightypork.gamecore.gui.components.layout.GridLayout; import mightypork.gamecore.gui.components.painters.QuadPainter; import mightypork.gamecore.gui.events.ScreenRequest; import mightypork.gamecore.logging.Log; +import mightypork.gamecore.resources.Res; import mightypork.gamecore.resources.fonts.GLFont; import mightypork.gamecore.util.ion.Ion; import mightypork.gamecore.util.ion.IonBundle; @@ -20,7 +21,6 @@ import mightypork.gamecore.util.math.color.pal.RGB; import mightypork.gamecore.util.math.constraints.num.Num; import mightypork.gamecore.util.math.constraints.rect.Rect; import mightypork.gamecore.util.strings.StringProvider; -import mightypork.rogue.Res; import mightypork.rogue.events.LoadingOverlayRequest; import mightypork.rogue.world.World; import mightypork.rogue.world.WorldProvider; diff --git a/src/mightypork/rogue/world/WorldRenderer.java b/src/mightypork/rogue/world/WorldRenderer.java index 368920b..eaad2ac 100644 --- a/src/mightypork/rogue/world/WorldRenderer.java +++ b/src/mightypork/rogue/world/WorldRenderer.java @@ -2,6 +2,7 @@ package mightypork.rogue.world; import mightypork.gamecore.render.Render; +import mightypork.gamecore.resources.Res; import mightypork.gamecore.util.math.algo.Coord; import mightypork.gamecore.util.math.color.pal.RGB; import mightypork.gamecore.util.math.constraints.num.Num; @@ -10,8 +11,7 @@ import mightypork.gamecore.util.math.constraints.rect.RectConst; import mightypork.gamecore.util.math.constraints.rect.proxy.RectProxy; import mightypork.gamecore.util.math.constraints.vect.Vect; import mightypork.gamecore.util.math.constraints.vect.VectConst; -import mightypork.rogue.Config; -import mightypork.rogue.Res; +import mightypork.rogue.Const; import mightypork.rogue.world.entity.Entity; import mightypork.rogue.world.level.Level; import mightypork.rogue.world.level.render.TileRenderContext; @@ -144,7 +144,7 @@ public class WorldRenderer extends RectProxy { // batch rendering of the tiles if (USE_BATCH_RENDERING) { - Render.setColor(RGB.WHITE, Config.RENDER_UFOG ? 1 : 0.6); + Render.setColor(RGB.WHITE, Const.RENDER_UFOG ? 1 : 0.6); Render.enterBatchTexturedQuadMode(Res.getTexture("tiles")); } for (trc.pos.x = x1; trc.pos.x <= x2; trc.pos.x++) { diff --git a/src/mightypork/rogue/world/entity/render/EntityRendererMobLR.java b/src/mightypork/rogue/world/entity/render/EntityRendererMobLR.java index 8c3d5bb..431f91e 100644 --- a/src/mightypork/rogue/world/entity/render/EntityRendererMobLR.java +++ b/src/mightypork/rogue/world/entity/render/EntityRendererMobLR.java @@ -2,6 +2,7 @@ package mightypork.rogue.world.entity.render; import mightypork.gamecore.render.Render; +import mightypork.gamecore.resources.Res; import mightypork.gamecore.resources.textures.TxQuad; import mightypork.gamecore.resources.textures.TxSheet; import mightypork.gamecore.util.math.Calc; @@ -11,7 +12,6 @@ import mightypork.gamecore.util.math.constraints.num.Num; import mightypork.gamecore.util.math.constraints.num.mutable.NumVar; import mightypork.gamecore.util.math.constraints.rect.Rect; import mightypork.gamecore.util.math.constraints.vect.Vect; -import mightypork.rogue.Res; import mightypork.rogue.world.entity.Entity; import mightypork.rogue.world.entity.EntityRenderer; import mightypork.rogue.world.level.render.MapRenderContext; diff --git a/src/mightypork/rogue/world/gui/MapView.java b/src/mightypork/rogue/world/gui/MapView.java index 49e12bf..a441459 100644 --- a/src/mightypork/rogue/world/gui/MapView.java +++ b/src/mightypork/rogue/world/gui/MapView.java @@ -9,7 +9,7 @@ import mightypork.gamecore.eventbus.clients.DelegatingClient; import mightypork.gamecore.eventbus.events.Updateable; import mightypork.gamecore.gui.components.InputComponent; import mightypork.gamecore.input.events.MouseButtonEvent; -import mightypork.gamecore.input.events.MouseButtonListener; +import mightypork.gamecore.input.events.MouseButtonHandler; import mightypork.gamecore.render.Render; import mightypork.gamecore.util.math.Easing; import mightypork.gamecore.util.math.color.Color; @@ -32,7 +32,7 @@ import mightypork.rogue.world.gui.interaction.MapInteractionPlugin; * * @author MightyPork */ -public class MapView extends InputComponent implements DelegatingClient, MouseButtonListener, Updateable, WorldAscendRequestListener, +public class MapView extends InputComponent implements DelegatingClient, MouseButtonHandler, Updateable, WorldAscendRequestListener, WorldDescendRequestListener { private static final double transition_time = 0.8; diff --git a/src/mightypork/rogue/world/gui/Minimap.java b/src/mightypork/rogue/world/gui/Minimap.java index 4c0eb0d..76fa722 100644 --- a/src/mightypork/rogue/world/gui/Minimap.java +++ b/src/mightypork/rogue/world/gui/Minimap.java @@ -3,7 +3,7 @@ package mightypork.rogue.world.gui; import mightypork.gamecore.gui.components.InputComponent; import mightypork.gamecore.input.events.MouseButtonEvent; -import mightypork.gamecore.input.events.MouseButtonListener; +import mightypork.gamecore.input.events.MouseButtonHandler; import mightypork.gamecore.render.Render; import mightypork.gamecore.util.math.algo.Coord; import mightypork.gamecore.util.math.color.Color; @@ -12,7 +12,7 @@ import mightypork.gamecore.util.math.constraints.num.Num; import mightypork.gamecore.util.math.constraints.rect.Rect; import mightypork.gamecore.util.math.constraints.rect.mutable.RectMutable; import mightypork.gamecore.util.math.constraints.vect.Vect; -import mightypork.rogue.Config; +import mightypork.rogue.Const; import mightypork.rogue.world.PlayerFacade; import mightypork.rogue.world.WorldProvider; import mightypork.rogue.world.level.Level; @@ -21,7 +21,7 @@ import mightypork.rogue.world.tile.Tile; import org.lwjgl.opengl.GL11; -public class Minimap extends InputComponent implements MouseButtonListener { +public class Minimap extends InputComponent implements MouseButtonHandler { private final RectMutable bounds = Rect.makeVar(); private int unit = 0; @@ -56,7 +56,7 @@ public class Minimap extends InputComponent implements MouseButtonListener { for (pos.x = 0, point.x = tl.xi(); pos.x < lw; pos.x++, point.x += unit) { final Tile t = lvl.getTile(pos); - if (t.isNull() || (!t.isExplored() && Config.RENDER_UFOG)) continue; + if (t.isNull() || (!t.isExplored() && Const.RENDER_UFOG)) continue; final Color clr = t.getMapColor(); diff --git a/src/mightypork/rogue/world/gui/interaction/MIPKeyboard.java b/src/mightypork/rogue/world/gui/interaction/MIPKeyboard.java index fa7e3bb..e657891 100644 --- a/src/mightypork/rogue/world/gui/interaction/MIPKeyboard.java +++ b/src/mightypork/rogue/world/gui/interaction/MIPKeyboard.java @@ -5,7 +5,7 @@ import mightypork.gamecore.eventbus.events.Updateable; import mightypork.gamecore.input.InputSystem; import mightypork.gamecore.input.Keys; import mightypork.gamecore.input.events.KeyEvent; -import mightypork.gamecore.input.events.KeyListener; +import mightypork.gamecore.input.events.KeyEventHandler; import mightypork.gamecore.util.math.algo.Move; import mightypork.gamecore.util.math.algo.Moves; import mightypork.gamecore.util.math.constraints.vect.Vect; @@ -14,7 +14,7 @@ import mightypork.rogue.world.events.PlayerStepEndListener; import mightypork.rogue.world.gui.MapView; -public class MIPKeyboard extends MapInteractionPlugin implements PlayerStepEndListener, KeyListener, Updateable { +public class MIPKeyboard extends MapInteractionPlugin implements PlayerStepEndListener, KeyEventHandler, Updateable { private static final int[] keys = { Keys.LEFT, Keys.RIGHT, Keys.UP, Keys.DOWN }; private static final Move[] sides = { Moves.W, Moves.E, Moves.N, Moves.S }; @@ -49,7 +49,7 @@ public class MIPKeyboard extends MapInteractionPlugin implements PlayerStepEndLi if (evt.isDown() || mapView.plc.getPlayer().isMoving()) return; // not interested - if (InputSystem.getModifierKeys() != Keys.MOD_NONE) return; + if (InputSystem.getActiveModKeys() != Keys.MOD_NONE) return; for (int i = 0; i < 4; i++) { if (evt.getKey() == keys[i]) { @@ -66,7 +66,7 @@ public class MIPKeyboard extends MapInteractionPlugin implements PlayerStepEndLi if (mapView.plc.getPlayer().getMoveProgress() < 0.8) return false; - if (InputSystem.getModifierKeys() != Keys.MOD_NONE) return false; + if (InputSystem.getActiveModKeys() != Keys.MOD_NONE) return false; for (int i = 0; i < 4; i++) { diff --git a/src/mightypork/rogue/world/item/impl/active/ItemHeartPiece.java b/src/mightypork/rogue/world/item/impl/active/ItemHeartPiece.java index 6e2502e..0ff6341 100644 --- a/src/mightypork/rogue/world/item/impl/active/ItemHeartPiece.java +++ b/src/mightypork/rogue/world/item/impl/active/ItemHeartPiece.java @@ -1,7 +1,7 @@ package mightypork.rogue.world.item.impl.active; -import mightypork.rogue.Res; +import mightypork.gamecore.resources.Res; import mightypork.rogue.world.PlayerFacade; import mightypork.rogue.world.item.Item; import mightypork.rogue.world.item.ItemModel; diff --git a/src/mightypork/rogue/world/item/impl/food/ItemCheese.java b/src/mightypork/rogue/world/item/impl/food/ItemCheese.java index 9cadd62..152d805 100644 --- a/src/mightypork/rogue/world/item/impl/food/ItemCheese.java +++ b/src/mightypork/rogue/world/item/impl/food/ItemCheese.java @@ -1,7 +1,7 @@ package mightypork.rogue.world.item.impl.food; -import mightypork.rogue.Res; +import mightypork.gamecore.resources.Res; import mightypork.rogue.world.item.ItemModel; import mightypork.rogue.world.item.ItemRenderer; import mightypork.rogue.world.item.impl.ItemBaseFood; diff --git a/src/mightypork/rogue/world/item/impl/food/ItemMeat.java b/src/mightypork/rogue/world/item/impl/food/ItemMeat.java index f3359f8..8d65ead 100644 --- a/src/mightypork/rogue/world/item/impl/food/ItemMeat.java +++ b/src/mightypork/rogue/world/item/impl/food/ItemMeat.java @@ -1,7 +1,7 @@ package mightypork.rogue.world.item.impl.food; -import mightypork.rogue.Res; +import mightypork.gamecore.resources.Res; import mightypork.rogue.world.item.ItemModel; import mightypork.rogue.world.item.ItemRenderer; import mightypork.rogue.world.item.impl.ItemBaseFood; diff --git a/src/mightypork/rogue/world/item/impl/food/ItemSandwich.java b/src/mightypork/rogue/world/item/impl/food/ItemSandwich.java index 940b7d8..713b6e8 100644 --- a/src/mightypork/rogue/world/item/impl/food/ItemSandwich.java +++ b/src/mightypork/rogue/world/item/impl/food/ItemSandwich.java @@ -1,7 +1,7 @@ package mightypork.rogue.world.item.impl.food; -import mightypork.rogue.Res; +import mightypork.gamecore.resources.Res; import mightypork.rogue.world.item.ItemModel; import mightypork.rogue.world.item.ItemRenderer; import mightypork.rogue.world.item.impl.ItemBaseFood; diff --git a/src/mightypork/rogue/world/item/impl/weapons/ItemAxe.java b/src/mightypork/rogue/world/item/impl/weapons/ItemAxe.java index f337b5c..d384bbc 100644 --- a/src/mightypork/rogue/world/item/impl/weapons/ItemAxe.java +++ b/src/mightypork/rogue/world/item/impl/weapons/ItemAxe.java @@ -1,7 +1,7 @@ package mightypork.rogue.world.item.impl.weapons; -import mightypork.rogue.Res; +import mightypork.gamecore.resources.Res; import mightypork.rogue.world.item.ItemModel; import mightypork.rogue.world.item.ItemRenderer; import mightypork.rogue.world.item.impl.ItemBaseWeapon; diff --git a/src/mightypork/rogue/world/item/impl/weapons/ItemBone.java b/src/mightypork/rogue/world/item/impl/weapons/ItemBone.java index ffe9631..9b12682 100644 --- a/src/mightypork/rogue/world/item/impl/weapons/ItemBone.java +++ b/src/mightypork/rogue/world/item/impl/weapons/ItemBone.java @@ -1,7 +1,7 @@ package mightypork.rogue.world.item.impl.weapons; -import mightypork.rogue.Res; +import mightypork.gamecore.resources.Res; import mightypork.rogue.world.item.ItemModel; import mightypork.rogue.world.item.ItemRenderer; import mightypork.rogue.world.item.impl.ItemBaseWeapon; diff --git a/src/mightypork/rogue/world/item/impl/weapons/ItemClub.java b/src/mightypork/rogue/world/item/impl/weapons/ItemClub.java index 877cd51..bf15b73 100644 --- a/src/mightypork/rogue/world/item/impl/weapons/ItemClub.java +++ b/src/mightypork/rogue/world/item/impl/weapons/ItemClub.java @@ -1,7 +1,7 @@ package mightypork.rogue.world.item.impl.weapons; -import mightypork.rogue.Res; +import mightypork.gamecore.resources.Res; import mightypork.rogue.world.item.ItemModel; import mightypork.rogue.world.item.ItemRenderer; import mightypork.rogue.world.item.impl.ItemBaseWeapon; diff --git a/src/mightypork/rogue/world/item/impl/weapons/ItemKnife.java b/src/mightypork/rogue/world/item/impl/weapons/ItemKnife.java index ee4fe3b..3c0df9d 100644 --- a/src/mightypork/rogue/world/item/impl/weapons/ItemKnife.java +++ b/src/mightypork/rogue/world/item/impl/weapons/ItemKnife.java @@ -1,7 +1,7 @@ package mightypork.rogue.world.item.impl.weapons; -import mightypork.rogue.Res; +import mightypork.gamecore.resources.Res; import mightypork.rogue.world.item.ItemModel; import mightypork.rogue.world.item.ItemRenderer; import mightypork.rogue.world.item.impl.ItemBaseWeapon; diff --git a/src/mightypork/rogue/world/item/impl/weapons/ItemRock.java b/src/mightypork/rogue/world/item/impl/weapons/ItemRock.java index 150c20b..b9ea83f 100644 --- a/src/mightypork/rogue/world/item/impl/weapons/ItemRock.java +++ b/src/mightypork/rogue/world/item/impl/weapons/ItemRock.java @@ -1,7 +1,7 @@ package mightypork.rogue.world.item.impl.weapons; -import mightypork.rogue.Res; +import mightypork.gamecore.resources.Res; import mightypork.rogue.world.item.ItemModel; import mightypork.rogue.world.item.ItemRenderer; import mightypork.rogue.world.item.impl.ItemBaseWeapon; diff --git a/src/mightypork/rogue/world/item/impl/weapons/ItemSword.java b/src/mightypork/rogue/world/item/impl/weapons/ItemSword.java index 0fd8d39..1da239a 100644 --- a/src/mightypork/rogue/world/item/impl/weapons/ItemSword.java +++ b/src/mightypork/rogue/world/item/impl/weapons/ItemSword.java @@ -1,7 +1,7 @@ package mightypork.rogue.world.item.impl.weapons; -import mightypork.rogue.Res; +import mightypork.gamecore.resources.Res; import mightypork.rogue.world.item.ItemModel; import mightypork.rogue.world.item.ItemRenderer; import mightypork.rogue.world.item.impl.ItemBaseWeapon; diff --git a/src/mightypork/rogue/world/item/impl/weapons/ItemTwig.java b/src/mightypork/rogue/world/item/impl/weapons/ItemTwig.java index d77e85e..297eddc 100644 --- a/src/mightypork/rogue/world/item/impl/weapons/ItemTwig.java +++ b/src/mightypork/rogue/world/item/impl/weapons/ItemTwig.java @@ -1,7 +1,7 @@ package mightypork.rogue.world.item.impl.weapons; -import mightypork.rogue.Res; +import mightypork.gamecore.resources.Res; import mightypork.rogue.world.item.ItemModel; import mightypork.rogue.world.item.ItemRenderer; import mightypork.rogue.world.item.impl.ItemBaseWeapon; diff --git a/src/mightypork/rogue/world/tile/Tile.java b/src/mightypork/rogue/world/tile/Tile.java index f2197f7..6deea12 100644 --- a/src/mightypork/rogue/world/tile/Tile.java +++ b/src/mightypork/rogue/world/tile/Tile.java @@ -11,7 +11,7 @@ import mightypork.gamecore.util.ion.IonInput; import mightypork.gamecore.util.ion.IonObjBlob; import mightypork.gamecore.util.ion.IonOutput; import mightypork.gamecore.util.math.color.Color; -import mightypork.rogue.Config; +import mightypork.rogue.Const; import mightypork.rogue.world.World; import mightypork.rogue.world.item.Item; import mightypork.rogue.world.level.Level; @@ -53,7 +53,7 @@ public abstract class Tile implements BusAccess, IonObjBlob { @DefaultImpl public void renderTile(TileRenderContext context) { - if (!isExplored() && Config.RENDER_UFOG) return; + if (!isExplored() && Const.RENDER_UFOG) return; initRenderer(); diff --git a/src/mightypork/rogue/world/tile/TileRenderer.java b/src/mightypork/rogue/world/tile/TileRenderer.java index 690226a..d3dd987 100644 --- a/src/mightypork/rogue/world/tile/TileRenderer.java +++ b/src/mightypork/rogue/world/tile/TileRenderer.java @@ -3,11 +3,11 @@ package mightypork.rogue.world.tile; import mightypork.gamecore.eventbus.events.Updateable; import mightypork.gamecore.render.Render; +import mightypork.gamecore.resources.Res; import mightypork.gamecore.resources.textures.TxQuad; import mightypork.gamecore.util.annot.DefaultImpl; import mightypork.gamecore.util.math.algo.Moves; import mightypork.gamecore.util.math.constraints.rect.Rect; -import mightypork.rogue.Res; import mightypork.rogue.world.level.render.TileRenderContext; import mightypork.rogue.world.tile.render.NullTileRenderer; diff --git a/src/mightypork/rogue/world/tile/impl/TileWithItems.java b/src/mightypork/rogue/world/tile/impl/TileWithItems.java index f8352f1..a19fb62 100644 --- a/src/mightypork/rogue/world/tile/impl/TileWithItems.java +++ b/src/mightypork/rogue/world/tile/impl/TileWithItems.java @@ -6,7 +6,7 @@ import java.util.Stack; import mightypork.gamecore.util.ion.IonInput; import mightypork.gamecore.util.ion.IonOutput; -import mightypork.rogue.Config; +import mightypork.rogue.Const; import mightypork.rogue.world.item.Item; import mightypork.rogue.world.item.Items; import mightypork.rogue.world.level.render.TileRenderContext; @@ -33,7 +33,7 @@ public abstract class TileWithItems extends Tile { { super.renderExtra(context); - if ((isExplored() || !Config.RENDER_UFOG) && hasItem() && shouldRenderItems()) { + if ((isExplored() || !Const.RENDER_UFOG) && hasItem() && shouldRenderItems()) { itemRenderer.render(items, context); } } diff --git a/src/mightypork/rogue/world/tile/impl/brick/TileBrickChest.java b/src/mightypork/rogue/world/tile/impl/brick/TileBrickChest.java index 1fd1560..03d9c62 100644 --- a/src/mightypork/rogue/world/tile/impl/brick/TileBrickChest.java +++ b/src/mightypork/rogue/world/tile/impl/brick/TileBrickChest.java @@ -1,7 +1,7 @@ package mightypork.rogue.world.tile.impl.brick; -import mightypork.rogue.Res; +import mightypork.gamecore.resources.Res; import mightypork.rogue.world.tile.TileModel; import mightypork.rogue.world.tile.TileRenderer; import mightypork.rogue.world.tile.impl.TileBaseChest; diff --git a/src/mightypork/rogue/world/tile/impl/brick/TileBrickDoor.java b/src/mightypork/rogue/world/tile/impl/brick/TileBrickDoor.java index 535a0f2..70ccb4d 100644 --- a/src/mightypork/rogue/world/tile/impl/brick/TileBrickDoor.java +++ b/src/mightypork/rogue/world/tile/impl/brick/TileBrickDoor.java @@ -1,7 +1,7 @@ package mightypork.rogue.world.tile.impl.brick; -import mightypork.rogue.Res; +import mightypork.gamecore.resources.Res; import mightypork.rogue.world.tile.TileModel; import mightypork.rogue.world.tile.impl.TileBaseDoor; diff --git a/src/mightypork/rogue/world/tile/impl/brick/TileBrickEntrance.java b/src/mightypork/rogue/world/tile/impl/brick/TileBrickEntrance.java index 8181ad4..16eb3d6 100644 --- a/src/mightypork/rogue/world/tile/impl/brick/TileBrickEntrance.java +++ b/src/mightypork/rogue/world/tile/impl/brick/TileBrickEntrance.java @@ -1,7 +1,7 @@ package mightypork.rogue.world.tile.impl.brick; -import mightypork.rogue.Res; +import mightypork.gamecore.resources.Res; import mightypork.rogue.world.tile.TileModel; import mightypork.rogue.world.tile.TileRenderer; import mightypork.rogue.world.tile.impl.TileBaseEntrance; diff --git a/src/mightypork/rogue/world/tile/impl/brick/TileBrickExit.java b/src/mightypork/rogue/world/tile/impl/brick/TileBrickExit.java index b55843e..e7549d5 100644 --- a/src/mightypork/rogue/world/tile/impl/brick/TileBrickExit.java +++ b/src/mightypork/rogue/world/tile/impl/brick/TileBrickExit.java @@ -1,7 +1,7 @@ package mightypork.rogue.world.tile.impl.brick; -import mightypork.rogue.Res; +import mightypork.gamecore.resources.Res; import mightypork.rogue.world.tile.TileModel; import mightypork.rogue.world.tile.TileRenderer; import mightypork.rogue.world.tile.impl.TileBaseExit; diff --git a/src/mightypork/rogue/world/tile/impl/brick/TileBrickFloor.java b/src/mightypork/rogue/world/tile/impl/brick/TileBrickFloor.java index d223c9c..86eb660 100644 --- a/src/mightypork/rogue/world/tile/impl/brick/TileBrickFloor.java +++ b/src/mightypork/rogue/world/tile/impl/brick/TileBrickFloor.java @@ -1,7 +1,7 @@ package mightypork.rogue.world.tile.impl.brick; -import mightypork.rogue.Res; +import mightypork.gamecore.resources.Res; import mightypork.rogue.world.tile.TileModel; import mightypork.rogue.world.tile.impl.TileBaseFloor; diff --git a/src/mightypork/rogue/world/tile/impl/brick/TileBrickPassage.java b/src/mightypork/rogue/world/tile/impl/brick/TileBrickPassage.java index c2beb61..94e7cee 100644 --- a/src/mightypork/rogue/world/tile/impl/brick/TileBrickPassage.java +++ b/src/mightypork/rogue/world/tile/impl/brick/TileBrickPassage.java @@ -1,7 +1,7 @@ package mightypork.rogue.world.tile.impl.brick; -import mightypork.rogue.Res; +import mightypork.gamecore.resources.Res; import mightypork.rogue.world.tile.TileModel; import mightypork.rogue.world.tile.impl.TileBasePassage; diff --git a/src/mightypork/rogue/world/tile/impl/brick/TileBrickSecretDoor.java b/src/mightypork/rogue/world/tile/impl/brick/TileBrickSecretDoor.java index 24cf67d..b88665c 100644 --- a/src/mightypork/rogue/world/tile/impl/brick/TileBrickSecretDoor.java +++ b/src/mightypork/rogue/world/tile/impl/brick/TileBrickSecretDoor.java @@ -1,7 +1,7 @@ package mightypork.rogue.world.tile.impl.brick; -import mightypork.rogue.Res; +import mightypork.gamecore.resources.Res; import mightypork.rogue.world.tile.TileModel; import mightypork.rogue.world.tile.impl.TileBaseSecretDoor; diff --git a/src/mightypork/rogue/world/tile/impl/brick/TileBrickWall.java b/src/mightypork/rogue/world/tile/impl/brick/TileBrickWall.java index fea5704..0d745f0 100644 --- a/src/mightypork/rogue/world/tile/impl/brick/TileBrickWall.java +++ b/src/mightypork/rogue/world/tile/impl/brick/TileBrickWall.java @@ -1,7 +1,7 @@ package mightypork.rogue.world.tile.impl.brick; -import mightypork.rogue.Res; +import mightypork.gamecore.resources.Res; import mightypork.rogue.world.tile.TileModel; import mightypork.rogue.world.tile.impl.TileBaseWall;