package fr.tchocolate.qbe;
import org.lwjgl.LWJGLException;
import org.lwjgl.Sys;
import org.lwjgl.input.Keyboard;
import org.lwjgl.input.Mouse;
import org.lwjgl.opengl.Display;
import org.lwjgl.util.vector.Vector3f;
import fr.tchocolate.qbe.entities.Player;
import fr.tchocolate.qbe.world.Map;
import fr.tchocolate.qbe.world.MapGenerator;
import static org.lwjgl.opengl.GL11.*;
public class Game {
//------------------------------------------------------------------------------------------variables
private boolean running;
public static Player player;
private InputManager inputManager;
private SettingsManager settingsManager;
private Map map1;
public static final float CUBE_SIZE = 0.05f;
private long lastFPS;
private long lastFrame;
private int fps;
public static int displayFPS;
//_________________________________________________________________________________________init
public void init(){
settingsManager = new SettingsManager();
Renderer.setupDisplay();
Renderer.setupGl();
try {
Keyboard.create();
} catch (LWJGLException e) {
e.printStackTrace();
}
inputManager = new InputManager(this);
TextureManager.loadTextures();
MapGenerator.genMap("map1.map");
map1 = new Map("map1.map");
player = new Player(new Vector3f(1, 6, 1), new Vector3f(0, 0, 0));
player.setWorld(map1);
}
//________________________________________________________________________________________run
public void run(){
running = true;
Mouse.setGrabbed(true);
Mouse.setCursorPosition(0, 0);
getDelta();
lastFPS = getTime();
while(running && !Display.isCloseRequested()){
getDelta();
inputManager.doInput();
update();
render();
Display.update();
}
destroy();
}
//______________________________________________________________________________________destroy
private void destroy(){
TextureManager.releaseTextures();
settingsManager.saveSettings();
Display.destroy();
}
//______________________________________________________________________________________update
private void update(){
updateFPS();
player.update();
}
//______________________________________________________________________________________render
private void render(){
//clear
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
Renderer.set3d();
player.updateCamera();
map1.renderMap();
Renderer.set2d();
Renderer.renderHUD();
}
//______________________________________________________________________________________misc
private int getDelta() {
long time = getTime();
int delta = (int) (time - lastFrame);
lastFrame = time;
return delta;
}
private void updateFPS(){
if (getTime() - lastFPS > 1000) {
displayFPS = fps;
fps = 0;
lastFPS += 1000;
}
fps++;
}
//----------------------------------------------------------------------------------------getters/setters
public Player getPlayer(){ return player; }
public boolean isRunning(){ return running; }
public long getTime() { return (Sys.getTime() * 1000) / Sys.getTimerResolution(); }
}