|
|
|
package mightypork.rogue;
|
|
|
|
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
import java.util.Locale;
|
|
|
|
|
|
|
|
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.render.DisplaySystem;
|
|
|
|
import mightypork.gamecore.resources.loading.AsyncResourceLoader;
|
|
|
|
import mightypork.gamecore.util.ion.Ion;
|
|
|
|
import mightypork.rogue.GameStateManager.GameState;
|
|
|
|
import mightypork.rogue.events.ActionRequest;
|
|
|
|
import mightypork.rogue.events.ActionRequest.RequestType;
|
|
|
|
import mightypork.rogue.events.GameStateRequest;
|
|
|
|
import mightypork.rogue.screens.FpsOverlay;
|
|
|
|
import mightypork.rogue.screens.LoadingOverlay;
|
|
|
|
import mightypork.rogue.screens.game.ScreenGame;
|
|
|
|
import mightypork.rogue.screens.layout_testing.LayoutTestScreen;
|
|
|
|
import mightypork.rogue.screens.menu.ScreenMainMenu;
|
|
|
|
import mightypork.rogue.screens.select_world.ScreenSelectWorld;
|
|
|
|
import mightypork.rogue.world.Inventory;
|
|
|
|
import mightypork.rogue.world.WorldProvider;
|
|
|
|
import mightypork.rogue.world.level.Level;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Main class
|
|
|
|
*
|
|
|
|
* @author MightyPork
|
|
|
|
*/
|
|
|
|
public final class App extends BaseApp {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Launcher
|
|
|
|
*
|
|
|
|
* @param args
|
|
|
|
*/
|
|
|
|
public static void main(String[] args)
|
|
|
|
{
|
|
|
|
(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);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected void registerIonizables()
|
|
|
|
{
|
|
|
|
super.registerIonizables();
|
|
|
|
|
|
|
|
Ion.registerType(Level.ION_MARK, Level.class);
|
|
|
|
Ion.registerType(Inventory.ION_MARK, Inventory.class);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@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.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)
|
|
|
|
{
|
|
|
|
super.initScreens(screens);
|
|
|
|
|
|
|
|
/* game screen references world provider instance */
|
|
|
|
WorldProvider.init(this);
|
|
|
|
|
|
|
|
getEventBus().subscribe(new GameStateManager(this));
|
|
|
|
|
|
|
|
screens.addScreen("main_menu", new ScreenMainMenu(this));
|
|
|
|
screens.addScreen("select_world", new ScreenSelectWorld(this));
|
|
|
|
screens.addScreen("game", new ScreenGame(this));
|
|
|
|
screens.addScreen("test.layout", new LayoutTestScreen(this));
|
|
|
|
|
|
|
|
screens.addOverlay(new FpsOverlay(this));
|
|
|
|
screens.addOverlay(new LoadingOverlay(this));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
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 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);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void bindEventToKey(final BusEvent<?> event, int key, int mod)
|
|
|
|
{
|
|
|
|
getInput().bindKey(new KeyStroke(key, mod), new Runnable() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void run()
|
|
|
|
{
|
|
|
|
getEventBus().send(event);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected MainLoop createMainLoop()
|
|
|
|
{
|
|
|
|
return new GameLoop(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected void postInit()
|
|
|
|
{
|
|
|
|
getEventBus().send(new MainLoopRequest(new Runnable() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void run()
|
|
|
|
{
|
|
|
|
getEventBus().send(new GameStateRequest(GameState.MAIN_MENU));
|
|
|
|
//getEventBus().send(new CrossfadeRequest("test.layout", true));
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
}
|