Files
twodcraft/src/main/java/cz/jzitnik/Main.java
2025-03-02 09:31:07 +01:00

64 lines
2.1 KiB
Java

package cz.jzitnik;
import cz.jzitnik.game.Game;
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 = new Game();
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();
// 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
}
if (game.getWindow() == Window.WORLD) {
screenRenderer.render(game);
}
Thread.sleep(1000);
}
terminal.trackMouse(Terminal.MouseTracking.Off);
terminal.close();
} catch (IOException | InterruptedException _) {
}
}
}