71 lines
2.4 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.HealthRegenerationThread;
import cz.jzitnik.game.threads.HungerDrainThread;
import cz.jzitnik.game.threads.InputHandlerThread;
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 };
Thread inputHandlerThread = new InputHandlerThread(game, terminal, screenRenderer, isRunning);
Thread healingThread = new HealthRegenerationThread(game.getPlayer());
Thread hungerDrainThread = new HungerDrainThread(game.getPlayer());
EntityLogicProvider entityLogicProvider = new EntityLogicProvider();
CustomLogicProvider customLogicProvider = new CustomLogicProvider();
// Start all threads
healingThread.start();
hungerDrainThread.start();
inputHandlerThread.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) {
}
}
}