Ginger3D/src/main/java/com/github/hydos/ginger/engine/common/api/GingerEngine.java

55 lines
1.6 KiB
Java

package com.github.hydos.ginger.engine.common.api;
import com.github.hydos.ginger.engine.common.api.game.Game;
import com.github.hydos.ginger.engine.common.io.Window;
import com.github.hydos.ginger.engine.common.screen.Screen;
import com.github.hydos.ginger.engine.common.util.Timer;
import com.github.hydos.ginger.engine.common.util.Timer.TickListener;
import com.github.hydos.ginger.engine.opengl.api.GingerUtils;
public abstract class GingerEngine
{
protected static GingerEngine INSTANCE;
protected GingerRegister registry;
public static GingerEngine getInstance()
{
return INSTANCE;
}
protected Timer timer;
protected TickListener gameTickListener = new TickListener()
{
@Override
public void onTick(float deltaTime)
{
if (GingerRegister.getInstance().game != null) GingerRegister.getInstance().game.tick();
if (GingerRegister.getInstance().currentScreen != null) GingerRegister.getInstance().currentScreen.tick();
};
};
public void startGameLoop()
{
while (!Window.closed())
{
update(); // Run this regardless, (so as fast as possible)
timer.tick(); // Run this only [ticklimit] times per second (This invokes gameTickListener.onTick!)
if (Window.shouldRender()) GingerRegister.getInstance().game.render(); // Run this only [framelimit] times per second
}
GingerRegister.getInstance().game.exit();
}
// Things that should be run as often as possible, without limits
public void update()
{
GingerUtils.update();
Window.update();
}
public abstract void cleanup();
public abstract void openScreen(Screen screen);
public abstract void renderOverlays(Game game);
}