package cz.jzitnik; import cz.jzitnik.game.GameSaver; import cz.jzitnik.game.logic.CustomLogicProvider; import cz.jzitnik.game.mobs.EntityLogicProvider; import cz.jzitnik.game.threads.ThreadProvider; import cz.jzitnik.game.ui.*; import cz.jzitnik.game.SpriteLoader; import cz.jzitnik.tui.ScreenRenderer; import org.jline.terminal.Terminal; import org.jline.terminal.TerminalBuilder; import java.io.IOException; public class Main { public static void main(String[] args) { try { Terminal terminal = TerminalBuilder.terminal(); terminal.enterRawMode(); terminal.trackMouse(Terminal.MouseTracking.Any); if (!terminal.hasMouseSupport()) { System.out.println("Error: This terminal does not support mouse."); System.exit(1); } var spriteList = SpriteLoader.load(); var screenRenderer = new ScreenRenderer(spriteList, terminal); var game = GameSaver.load(); final boolean[] isRunning = { true }; EntityLogicProvider entityLogicProvider = new EntityLogicProvider(); CustomLogicProvider customLogicProvider = new CustomLogicProvider(); ThreadProvider threadProvider = new ThreadProvider(game, screenRenderer, terminal, isRunning); threadProvider.start(); while (isRunning[0]) { try { entityLogicProvider.update(game); } catch (Exception ignored) { // Yeah, yeah I know. Deal with it } try { customLogicProvider.update(game); } catch (Exception e) { e.printStackTrace(); } if ( game.getWindow() == Window.WORLD) { screenRenderer.render(game); } Thread.sleep(1000); } terminal.trackMouse(Terminal.MouseTracking.Off); terminal.close(); } catch (IOException | InterruptedException ignored) { } } }