#include "script_sys.h" #include "texture_sys.h" #include "shader_sys.h" #include "controller.h" #include "rand_sys.h" #include #include #include #include static TCCState* state = NULL; static void(*script_init)(void) = NULL; static void(*script_update)(void) = NULL; static void(*script_exit)(void) = NULL; static i32 current_mod = -1; static void restart(void) { TCCState* new_state = tcc_new(); tcc_set_output_type(new_state, TCC_OUTPUT_MEMORY); tcc_add_symbol(new_state, "load_new_tex", load_new_tex); tcc_add_symbol(new_state, "load_new_shader", load_new_shader); tcc_add_symbol(new_state, "draw_text", DrawText); tcc_add_symbol(new_state, "set_active_shader", set_active_shader); tcc_add_symbol(new_state, "draw_texture", draw_texture); tcc_add_symbol(new_state, "reset_active_shader", reset_active_shader); tcc_add_symbol(new_state, "set_rumble", set_rumble); tcc_add_symbol(new_state, "stop_rumble", stop_rumble); tcc_add_symbol(new_state, "rand_u32", rand_u32); tcc_add_symbol(new_state, "rand_range", rand_range); tcc_add_symbol(new_state, "is_key_pressed", is_key_pressed); tcc_add_symbol(new_state, "is_key_held", is_key_held); tcc_add_symbol(new_state, "is_key_released", is_key_released); tcc_add_symbol(new_state, "get_dir_input", get_dir_input); if(tcc_add_file(new_state, "assets/src/main.c") == -1){ TRACELOG(LOG_ERROR, "Compilation failed!\n"); return; } if(state != NULL) deinit_script_sys(); state = new_state; tcc_relocate(state, TCC_RELOCATE_AUTO); script_init = tcc_get_symbol(state, "init"); script_update = tcc_get_symbol(state, "update"); script_exit = tcc_get_symbol(state, "exit"); script_init(); } void init_script_sys(void) { current_mod = GetFileModTime("assets/src/main.c"); restart(); } void update_script(void) { i32 new_mod = GetFileModTime("assets/src/main.c"); if(new_mod != current_mod){ current_mod = new_mod; restart(); } script_update(); } void deinit_script_sys(void) { script_exit(); tcc_delete(state); unload_active_textures(); unload_active_shaders(); }