diff options
| author | Uneven Prankster <unevenprankster@protonmail.com> | 2023-07-19 22:58:28 -0300 |
|---|---|---|
| committer | Uneven Prankster <unevenprankster@protonmail.com> | 2023-07-19 22:58:28 -0300 |
| commit | 14226c542d7d3d32fb52370deea20e3609cd2b4c (patch) | |
| tree | 6b0494fe41597e77481025cfa6f1cae93d929e2f | |
| parent | 1f291678048efe0c117909ae7e2d2ec706377a23 (diff) | |
Pandora's box has been opened.
| -rw-r--r-- | assets/src/gunner.h | 46 | ||||
| -rw-r--r-- | assets/src/main.c | 23 | ||||
| -rw-r--r-- | build.sh | 2 | ||||
| -rw-r--r-- | src/main.c | 8 | ||||
| -rw-r--r-- | src/script_sys.c | 56 | ||||
| -rw-r--r-- | src/script_sys.h | 2 |
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 @@ -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 @@ -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 |
