forked from jzitnik/twodcraft
64 lines
2.1 KiB
Java
64 lines
2.1 KiB
Java
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) {
|
|
}
|
|
}
|
|
}
|