#ifndef BLANK_APP_HPP_
#define BLANK_APP_HPP_
-#include <glm/glm.hpp>
-#include <glm/gtc/matrix_transform.hpp>
-
#include "camera.hpp"
#include "controller.hpp"
#include "init.hpp"
-#include "model.hpp"
+#include "interface.hpp"
#include "shader.hpp"
#include "world.hpp"
class Application {
public:
- Application();
+ struct Config {
+ bool vsync = true;
+ bool doublebuf = true;
+ int multisampling = 1;
+
+ Interface::Config interface = Interface::Config();
+ World::Config world = World::Config();
+ };
+
+ explicit Application(const Config &);
Application(const Application &) = delete;
Application &operator =(const Application &) = delete;
+ /// run until user quits
void Run();
void Loop(int dt);
+ /// run for n frames
+ void RunN(size_t n);
+ /// run for t milliseconds
+ void RunT(size_t t);
+ /// run for n frames, assuming t milliseconds for each
+ void RunS(size_t n, size_t t);
+
void HandleEvents();
void Update(int dt);
void Render();
+ static Entity &MakeTestEntity(World &);
+
private:
InitSDL init_sdl;
InitIMG init_img;
Window window;
GLContext ctx;
InitGLEW init_glew;
- Program program;
-
- float move_velocity;
- float pitch_sensitivity;
- float yaw_sensitivity;
-
- BlockTypeRegistry blockType;
+ BlockLighting chunk_prog;
+ DirectionalLighting entity_prog;
Camera cam;
- Chunk chunk;
- OutlineModel outline;
-
- bool outline_visible;
- glm::mat4 outline_transform;
-
- glm::vec3 light_position;
- glm::vec3 light_color;
- float light_power;
+ World world;
+ Interface interface;
- GLuint m_handle;
- GLuint v_handle;
- GLuint mv_handle;
- GLuint mvp_handle;
- GLuint light_position_handle;
- GLuint light_color_handle;
- GLuint light_power_handle;
+ RandomWalk test_controller;
bool running;
- bool front, back, left, right, up, down;
- bool place, remove, pick;
-
- int remove_id;
- int place_id;
-
};
}