aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--assets/src/gunner.h46
-rw-r--r--assets/src/main.c23
-rw-r--r--build.sh2
-rw-r--r--src/main.c8
-rw-r--r--src/script_sys.c56
-rw-r--r--src/script_sys.h2
6 files changed, 116 insertions, 21 deletions
diff --git a/assets/src/gunner.h b/assets/src/gunner.h
new file mode 100644
index 0000000..cbcbe87
--- /dev/null
+++ b/assets/src/gunner.h
@@ -0,0 +1,46 @@
+#pragma once
+
+// Defines
+
+typedef struct{
+ unsigned char r;
+ unsigned char g;
+ unsigned char b;
+ unsigned char a;
+}Color;
+
+#define BLACK (Color){0, 0, 0, 255}
+
+// Texture
+
+void init_tex_sys(void);
+
+int load_new_tex(const char* path);
+
+void draw_texture(int idx, int x, int y);
+
+void update_textures(void);
+
+void unload_tex(int idx);
+
+void unload_active_textures(void);
+
+// Shader
+
+void init_shader_sys(void);
+
+int load_new_shader(const char* path);
+
+void set_active_shader(int idx);
+
+void update_shaders(void);
+
+void reset_active_shader(void);
+
+void unload_shader(int idx);
+
+void unload_active_shaders(void);
+
+// Text
+
+void draw_text(const char* txt, int x, int y, int size, Color col); \ No newline at end of file
diff --git a/assets/src/main.c b/assets/src/main.c
index cf4feea..08856b9 100644
--- a/assets/src/main.c
+++ b/assets/src/main.c
@@ -1,6 +1,23 @@
-int goob(void);
+#include "gunner.h"
-int test(void)
+static int femme = -1;
+static int grayscale = -1;
+
+void init(void)
+{
+ femme = load_new_tex("assets/femme.png");
+ grayscale = load_new_shader("assets/gs_full.glsl");
+}
+
+void update(void)
+{
+ draw_text("Femme my beloved!", 4, 4, 20, BLACK);
+ set_active_shader(grayscale);
+ draw_texture(femme, 32, 40);
+ reset_active_shader();
+}
+
+void exit(void)
{
- return goob();
+
} \ No newline at end of file
diff --git a/build.sh b/build.sh
index bee6ae6..5188d84 100644
--- a/build.sh
+++ b/build.sh
@@ -79,7 +79,7 @@ TINYCC_SRC="$ROOT_DIR/tinycc"
COMPILATION_FLAGS="-std=c99 -Os -flto -s -D__USE_MINGW_ANSI_STDIO=0 -mno-stack-arg-probe -Xlinker --stack=0x200000,0x200000
-fno-asynchronous-unwind-tables -fwhole-program -Wl,--gc-sections -mavx"
FINAL_FLAGS=$COMPILATION_FLAGS
-WARNING_FLAGS="-Wall -Wextra -Wpedantic"
+WARNING_FLAGS="-Wall -Wextra"
LINK_FLAGS="-lopengl32 -lgdi32 -lwinmm"
# Debug changes to flags
if [ -n "$BUILD_DEBUG" ]; then
diff --git a/src/main.c b/src/main.c
index 2ab5b1f..c881a18 100644
--- a/src/main.c
+++ b/src/main.c
@@ -13,19 +13,13 @@ int main()
init_shader_sys();
init_script_sys();
- int femme = load_new_tex("assets/femme.png");
- int grayscale = load_new_shader("assets/gs_full.glsl");
-
while(!WindowShouldClose()){
update_textures();
update_shaders();
ClearBackground(WHITE);
BeginDrawing();
- DrawText("Wow, boilerplate, my favorite.", 4, 4, 20, BLACK);
- set_active_shader(grayscale);
- draw_texture(femme, 40, 40);
- reset_active_shader();
+ update_script();
EndDrawing();
}
diff --git a/src/script_sys.c b/src/script_sys.c
index 047ba8a..79f0395 100644
--- a/src/script_sys.c
+++ b/src/script_sys.c
@@ -1,33 +1,69 @@
#include "script_sys.h"
+#include "texture_sys.h"
+#include "shader_sys.h"
#include <libtcc.h>
#include <stddef.h>
#include <stdio.h>
-TCCState* state = NULL;
+#include <raylib.h>
-int goob(void)
-{
- return 255;
-}
+static TCCState* state = NULL;
-void init_script_sys(void)
+static void(*script_init)(void) = NULL;
+static void(*script_update)(void) = NULL;
+static void(*script_exit)(void) = NULL;
+
+static long current_mod = -1;
+
+static void restart(void)
{
state = tcc_new();
tcc_set_output_type(state, TCC_OUTPUT_MEMORY);
- tcc_add_symbol(state, "goob", goob);
+ tcc_add_symbol(state, "load_new_tex", load_new_tex);
+ tcc_add_symbol(state, "load_new_shader", load_new_shader);
+
+ tcc_add_symbol(state, "draw_text", DrawText);
+ tcc_add_symbol(state, "set_active_shader", set_active_shader);
+ tcc_add_symbol(state, "draw_texture", draw_texture);
+ tcc_add_symbol(state, "reset_active_shader", reset_active_shader);
tcc_add_file(state, "assets/src/main.c");
tcc_relocate(state, TCC_RELOCATE_AUTO);
- int(*const test)() = tcc_get_symbol(state, "test");
- printf("Result: %i\n", test());
+ script_init = tcc_get_symbol(state, "init");
+ script_update = tcc_get_symbol(state, "update");
+ script_exit = tcc_get_symbol(state, "exit");
+}
+
+void init_script_sys(void)
+{
+ restart();
+
+ current_mod = GetFileModTime("assets/src/main.c");
+ script_init();
+}
+
+void update_script(void)
+{
+ long new_mod = GetFileModTime("assets/src/main.c");
+
+ if(new_mod != current_mod){
+ current_mod = new_mod;
+
+ deinit_script_sys();
+ restart();
+ script_init();
+ }
+ script_update();
}
void deinit_script_sys(void)
{
+ script_exit();
tcc_delete(state);
- state = NULL;
+ unload_active_textures();
+ unload_active_shaders();
} \ No newline at end of file
diff --git a/src/script_sys.h b/src/script_sys.h
index 146ed04..4c2bc6d 100644
--- a/src/script_sys.h
+++ b/src/script_sys.h
@@ -2,4 +2,6 @@
void init_script_sys(void);
+void update_script(void);
+
void deinit_script_sys(void); \ No newline at end of file