summaryrefslogtreecommitdiff
path: root/src/honey.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/honey.c')
-rw-r--r--src/honey.c173
1 files changed, 120 insertions, 53 deletions
diff --git a/src/honey.c b/src/honey.c
index 79ff970..0bd5b25 100644
--- a/src/honey.c
+++ b/src/honey.c
@@ -1,71 +1,138 @@
#include "honey.h"
-static void default_honey_update_callback(float dt) {}
-static void default_honey_draw_callback() {}
-
-honey_window honey_setup(int screen_width, int screen_height, char* window_title) {
- honey_update_callback = &default_honey_update_callback;
- honey_draw_callback = &default_honey_draw_callback;
-
- glfwInit();
- glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
- glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
- glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
-
- honey_window window = glfwCreateWindow(screen_width, screen_height, window_title, NULL, NULL);
- if (window == NULL) {
- fprintf(stderr, "ERROR: failed to create window!\n");
- glfwTerminate();
- return NULL;
- }
-
- glfwMakeContextCurrent(window);
- glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
-
- if (!gladLoadGLLoader((GLADloadproc) glfwGetProcAddress)) {
- fprintf(stderr, "ERROR: failed to initialize GLAD!\n");
- glfwTerminate();
- return NULL;
- }
-
- honey_setup_keyboard();
- glfwSetKeyCallback(window, default_honey_keyboard_callback);
-
- // Enable blending
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-
- return window;
+void honey_print_help()
+{
+ printf("usage: honey [OPTIONS] SCRIPT_DIR\n"
+ " -v Enable verbose logging\n"
+ " -h Show this help message and exit\n"
+ " -l LOG Log to LOG instead of stdout\n");
}
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-void honey_set_update_callback(void (*update_callback)(float)) {
- honey_update_callback = update_callback;
+bool honey_parse_options(honey_options* options, int argc, char** argv)
+{
+ honey_options opts;
+ opts.verbose = false;
+ opts.script_directory = NULL;
+ opts.logfile = NULL;
+
+ opterr = 0;
+ int c;
+
+ while ((c = getopt(argc, argv, "vhl:")) != -1) {
+ switch (c) {
+ case 'v':
+ opts.verbose = true;
+ break;
+
+ case 'h':
+ honey_print_help();
+ return false;
+
+ case 'l':
+ opts.logfile = optarg;
+ break;
+
+ case '?':
+ fprintf(stderr, "unknown option: '%c'\n", optopt);
+ honey_print_help();
+ return false;
+
+ default:
+ return false;
+ }
+ }
+
+ if (optind < argc) {
+ opts.script_directory = argv[optind];
+ }
+
+ *options = opts;
+
+ return true;
}
-void honey_set_draw_callback(void (*draw_callback)()) {
- honey_draw_callback = draw_callback;
+/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+bool honey_setup(lua_State** L, honey_window* window)
+{
+ /* set up glfw */
+ glfwInit();
+ glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
+ glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
+ glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
+
+ *window = glfwCreateWindow(640, 480, "honey", NULL, NULL);
+ if (*window == NULL) {
+ fprintf(stderr, "[honey] ERROR: failed to create window!\n");
+ glfwTerminate();
+ return false;
+ }
+
+ glfwMakeContextCurrent(*window);
+
+ if (!gladLoadGLLoader((GLADloadproc) glfwGetProcAddress)) {
+ fprintf(stderr, "[honey] ERROR: failed to initialize GLAD!\n");
+ glfwTerminate();
+ return false;
+ }
+
+ honey_setup_keyboard();
+ glfwSetKeyCallback(*window, default_honey_keyboard_callback);
+
+ // Enable blending
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
+
+ /* set up lua and honey lua bindings */
+ *L = luaL_newstate();
+ luaL_openlibs(*L);
+ glfwSetWindowUserPointer(*window, *L);
+
+ lua_createtable(*L, 0, 1);
+
+ honey_setup_input(*L);
+ lua_setfield(*L, -2, "input");
+
+ lua_setglobal(*L, "honey");
+
+ return true;
}
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
void honey_run(honey_window window) {
- float prevTime = 0;
- float currentTime = 0;
- float dt;
- float draw_dt = 0;
-
- while(!glfwWindowShouldClose(window)) {
- currentTime = (float) glfwGetTime();
- dt = currentTime - prevTime;
- prevTime = currentTime;
-
- honey_update_callback(dt);
- honey_draw_callback();
- }
+ /*float prevTime = 0;
+ float currentTime = 0;
+ float dt;
+ float draw_dt = 0;
+
+ while(!glfwWindowShouldClose(window)) {
+ currentTime = (float) glfwGetTime();
+ dt = currentTime - prevTime;
+ prevTime = currentTime;
+
+ honey_update_callback(dt);
+ honey_draw_callback();
+ }*/
}
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+int honey_get_callback(lua_State* L, char* callback)
+{
+ lua_getglobal(L, "honey");
+ lua_getfield(L, -1, callback);
+ int ref = LUA_NOREF;
+
+ if (lua_isfunction(L, -1))
+ ref = luaL_ref(L, LUA_REGISTRYINDEX);
+ else
+ lua_pop(L, 1);
+ lua_pop(L, 1);
+
+ return ref;
+}