Back to where it all started

Signed-off-by: Robear Selwans <robear.selwans@outlook.com>
This commit is contained in:
2021-12-11 19:22:33 +02:00
parent 2301f973fb
commit cc2076dcaa
2 changed files with 193 additions and 191 deletions

View File

@@ -2,7 +2,7 @@ project('evol-sandbox', 'c',
version : '0.1', version : '0.1',
default_options : [ default_options : [
'warning_level=3', 'warning_level=3',
'c_std=gnu11', 'c_std=c11',
], ],
) )
@@ -15,30 +15,32 @@ cc = meson.get_compiler('c')
compiler_name = cc.get_id() compiler_name = cc.get_id()
if compiler_name == 'gcc' if compiler_name == 'gcc'
sandbox_args += '-fms-extensions' sandbox_args += '-fms-extensions'
sandbox_args += '-Wall'
sandbox_args += '-Werror'
endif endif
# The subproject's sole purpose is to make sure that the modules build # The subproject's sole purpose is to make sure that the modules build
subproject('evmod_glfw') # subproject('evmod_glfw')
subproject('evmod_ecs') # subproject('evmod_ecs')
subproject('evmod_physics') # subproject('evmod_physics')
subproject('evmod_script') # subproject('evmod_script')
subproject('evmod_assets') # subproject('evmod_assets')
subproject('evmod_renderer') # subproject('evmod_renderer')
subproject('evmod_game') # subproject('evmod_game')
evmodglfw_dep = dependency('evmod_glfw') # evmodglfw_dep = dependency('evmod_glfw')
evmodecs_dep = dependency('evmod_ecs') # evmodecs_dep = dependency('evmod_ecs')
evmodphysics_dep = dependency('evmod_physics') # evmodphysics_dep = dependency('evmod_physics')
evmodscript_dep = dependency('evmod_script') # evmodscript_dep = dependency('evmod_script')
evmodgame_dep = dependency('evmod_game') # evmodgame_dep = dependency('evmod_game')
evmodrenderer_dep = dependency('evmod_renderer') # evmodrenderer_dep = dependency('evmod_renderer')
evmod_assets_dep = dependency('evmod_assets') # evmod_assets_dep = dependency('evmod_assets')
subproject('project_assets') # subproject('project_assets')
# Setup build directory # Setup build directory
subdir('buildscripts') # subdir('buildscripts')
sandbox_exe = executable( sandbox_exe = executable(
'sandbox', 'sandbox',
@@ -46,15 +48,15 @@ sandbox_exe = executable(
dependencies: [ dependencies: [
evol_dep, evol_dep,
evmodglfw_dep, # evmodglfw_dep,
evmodecs_dep, # evmodecs_dep,
evmodphysics_dep, # evmodphysics_dep,
evmodscript_dep, # evmodscript_dep,
evmodgame_dep, # evmodgame_dep,
evmodrenderer_dep, # evmodrenderer_dep,
evmod_assets_dep, # evmod_assets_dep,
], ],
install : true, # install : true,
c_args: sandbox_args, c_args: sandbox_args,
) )

View File

@@ -1,217 +1,217 @@
#include <evol/evol.h> /* #include <evol/evol.h> */
#include <evol/common/ev_log.h> /* #include <evol/common/ev_log.h> */
#include <evol/common/ev_macros.h> #include <evol/common/ev_macros.h>
#include <evol/common/ev_profile.h> /* #include <evol/common/ev_profile.h> */
#include <evol/utils/sleep.h> /* #include <evol/utils/sleep.h> */
#include <evjson.h> /* #include <evjson.h> */
#include <evol/core/configloader.h> /* #include <evol/core/configloader.h> */
#define IMPORT_MODULE evmod_glfw /* #define IMPORT_MODULE evmod_glfw */
#include IMPORT_MODULE_H /* #include IMPORT_MODULE_H */
#define IMPORT_MODULE evmod_assets /* #define IMPORT_MODULE evmod_assets */
#include IMPORT_MODULE_H /* #include IMPORT_MODULE_H */
#define IMPORT_MODULE evmod_game /* #define IMPORT_MODULE evmod_game */
#include IMPORT_MODULE_H /* #include IMPORT_MODULE_H */
#define IMPORT_MODULE evmod_renderer /* #define IMPORT_MODULE evmod_renderer */
#include IMPORT_MODULE_H /* #include IMPORT_MODULE_H */
// Close window when Q is pressed /* // Close window when Q is pressed */
DECLARE_EVENT_LISTENER(keyPressedListener, (KeyPressedEvent *event) { /* DECLARE_EVENT_LISTENER(keyPressedListener, (KeyPressedEvent *event) { */
if(event->keyCode == 81) // tests if Q was pressed /* if(event->keyCode == 81) // tests if Q was pressed */
Window->setShouldClose(event->handle, true); /* Window->setShouldClose(event->handle, true); */
/* else if(event->keyCode == 49) // Numrow 1 */ /* /1* else if(event->keyCode == 49) // Numrow 1 *1/ */
/* else if(event->keyCode == 50) // Numrow 2 */ /* /1* else if(event->keyCode == 50) // Numrow 2 *1/ */
/* else if(event->keyCode == 45) // Numrow - */ /* /1* else if(event->keyCode == 45) // Numrow - *1/ */
/* else if(event->keyCode == 61) // Numrow = */ /* /1* else if(event->keyCode == 61) // Numrow = *1/ */
}) /* }) */
struct { /* struct { */
evolmodule_t game_mod; /* evolmodule_t game_mod; */
evolmodule_t asset_mod; /* evolmodule_t asset_mod; */
evolmodule_t window_mod; /* evolmodule_t window_mod; */
evolmodule_t input_mod; /* evolmodule_t input_mod; */
evolmodule_t renderer_mod; /* evolmodule_t renderer_mod; */
WindowHandle window; /* WindowHandle window; */
} State; /* } State; */
void /* void */
project_changed_cb() /* project_changed_cb() */
{ /* { */
evol_unloadmodule(State.renderer_mod); /* evol_unloadmodule(State.renderer_mod); */
Game->reload(); /* Game->reload(); */
State.renderer_mod = evol_loadmodule("renderer"); /* State.renderer_mod = evol_loadmodule("renderer"); */
Renderer->setWindow((GenericHandle)State.window); /* Renderer->setWindow((GenericHandle)State.window); */
EV_DEFER( /* EV_DEFER( */
AssetHandle project_config = Asset->load("project://game.proj"), /* AssetHandle project_config = Asset->load("project://game.proj"), */
Asset->free(project_config)) /* Asset->free(project_config)) */
{ /* { */
JSONAsset project_desc = JSONLoader->loadAsset(project_config); /* JSONAsset project_desc = JSONLoader->loadAsset(project_config); */
// Loading Scenes /* // Loading Scenes */
double scene_count = evjs_get(project_desc.json_data, "scenes.len")->as_num; /* double scene_count = evjs_get(project_desc.json_data, "scenes.len")->as_num; */
for(int i = 0; i < (int)scene_count;i++) { /* for(int i = 0; i < (int)scene_count;i++) { */
evstring scenepath_id = evstring_newfmt("scenes[%d].path", i); /* evstring scenepath_id = evstring_newfmt("scenes[%d].path", i); */
evstring sceneid_id = evstring_newfmt("scenes[%d].id", i); /* evstring sceneid_id = evstring_newfmt("scenes[%d].id", i); */
evstring scenepath = evstring_refclone(evjs_get(project_desc.json_data, scenepath_id)->as_str); /* evstring scenepath = evstring_refclone(evjs_get(project_desc.json_data, scenepath_id)->as_str); */
evstring sceneid = evstring_refclone(evjs_get(project_desc.json_data, sceneid_id)->as_str); /* evstring sceneid = evstring_refclone(evjs_get(project_desc.json_data, sceneid_id)->as_str); */
GameScene scene = Scene->loadFromFile(scenepath); /* GameScene scene = Scene->loadFromFile(scenepath); */
Scene->setName(scene, sceneid); /* Scene->setName(scene, sceneid); */
evstring_free(sceneid); /* evstring_free(sceneid); */
evstring_free(sceneid_id); /* evstring_free(sceneid_id); */
evstring_free(scenepath); /* evstring_free(scenepath); */
evstring_free(scenepath_id); /* evstring_free(scenepath_id); */
} /* } */
evstring activeScene = evstring_refclone(evjs_get(project_desc.json_data, "activeScene")->as_str); /* evstring activeScene = evstring_refclone(evjs_get(project_desc.json_data, "activeScene")->as_str); */
Game->setActiveScene(Scene->getFromName(activeScene)); /* Game->setActiveScene(Scene->getFromName(activeScene)); */
evstring_free(activeScene); /* evstring_free(activeScene); */
} /* } */
} /* } */
void /* void */
load_project() /* load_project() */
{ /* { */
State.game_mod = evol_loadmodule("game"); DEBUG_ASSERT(State.game_mod); /* State.game_mod = evol_loadmodule("game"); DEBUG_ASSERT(State.game_mod); */
State.window_mod = evol_loadmodule("window"); DEBUG_ASSERT(State.window_mod); /* State.window_mod = evol_loadmodule("window"); DEBUG_ASSERT(State.window_mod); */
State.input_mod = evol_loadmodule("input"); DEBUG_ASSERT(State.input_mod); /* State.input_mod = evol_loadmodule("input"); DEBUG_ASSERT(State.input_mod); */
State.renderer_mod = evol_loadmodule("renderer"); DEBUG_ASSERT(State.renderer_mod); /* State.renderer_mod = evol_loadmodule("renderer"); DEBUG_ASSERT(State.renderer_mod); */
imports(State.game_mod , (Game, Object, Camera, Scene)) /* imports(State.game_mod , (Game, Object, Camera, Scene)) */
imports(State.window_mod , (Window)) /* imports(State.window_mod , (Window)) */
imports(State.input_mod , (Input)) /* imports(State.input_mod , (Input)) */
imports(State.renderer_mod, (Renderer)) /* imports(State.renderer_mod, (Renderer)) */
IMPORT_EVENTS_evmod_glfw(State.window_mod); /* IMPORT_EVENTS_evmod_glfw(State.window_mod); */
U32 width = 1920; /* U32 width = 1920; */
U32 height = 1050; /* U32 height = 1050; */
State.window = Window->create(width, height, "Main Window"); /* State.window = Window->create(width, height, "Main Window"); */
Input->setActiveWindow(State.window); /* Input->setActiveWindow(State.window); */
ACTIVATE_EVENT_LISTENER(keyPressedListener, KeyPressedEvent); /* ACTIVATE_EVENT_LISTENER(keyPressedListener, KeyPressedEvent); */
evstring project_dir = NULL; /* evstring project_dir = NULL; */
EvConfigLoaderResult project_dir_get_res = ev_configloader_get("project_dir", EV_TYPE_NAME(STRING), &project_dir); /* EvConfigLoaderResult project_dir_get_res = ev_configloader_get("project_dir", EV_TYPE_NAME(STRING), &project_dir); */
if(project_dir_get_res != EV_CONFIGLOADER_SUCCESS) { /* if(project_dir_get_res != EV_CONFIGLOADER_SUCCESS) { */
ev_log_error("[sandbox] Could not get project_dir from config file. Error: %s", EvConfigLoaderResultStrings[project_dir_get_res]); /* ev_log_error("[sandbox] Could not get project_dir from config file. Error: %s", EvConfigLoaderResultStrings[project_dir_get_res]); */
} /* } */
assert(project_dir); /* assert(project_dir); */
evstring project_mountpoint = evstring_new("project"); /* evstring project_mountpoint = evstring_new("project"); */
AssetManager->mount(&project_dir, &project_mountpoint); /* AssetManager->mount(&project_dir, &project_mountpoint); */
evstring_free(project_mountpoint); /* evstring_free(project_mountpoint); */
EV_DEFER( /* EV_DEFER( */
AssetHandle project_config = Asset->load("project://game.proj"), /* AssetHandle project_config = Asset->load("project://game.proj"), */
Asset->free(project_config)) /* Asset->free(project_config)) */
{ /* { */
JSONAsset project_desc = JSONLoader->loadAsset(project_config); /* JSONAsset project_desc = JSONLoader->loadAsset(project_config); */
// Loading filesystem mounts /* // Loading filesystem mounts */
double mounts_count = evjs_get(project_desc.json_data, "mounts.len")->as_num; /* double mounts_count = evjs_get(project_desc.json_data, "mounts.len")->as_num; */
for(int i = 0; i < (int)mounts_count;i++) { /* for(int i = 0; i < (int)mounts_count;i++) { */
evstring path_id = evstring_newfmt("mounts[%d].path", i); /* evstring path_id = evstring_newfmt("mounts[%d].path", i); */
evstring mountpoint_id = evstring_newfmt("mounts[%d].mountpoint", i); /* evstring mountpoint_id = evstring_newfmt("mounts[%d].mountpoint", i); */
evstr_ref path_ref = evjs_get(project_desc.json_data, path_id)->as_str; /* evstr_ref path_ref = evjs_get(project_desc.json_data, path_id)->as_str; */
evstr_ref mountpoint_ref = evjs_get(project_desc.json_data, mountpoint_id)->as_str; /* evstr_ref mountpoint_ref = evjs_get(project_desc.json_data, mountpoint_id)->as_str; */
evstring path = evstring_newfmt("%s/%.*s", project_dir, path_ref.len, path_ref.data + path_ref.offset); /* evstring path = evstring_newfmt("%s/%.*s", project_dir, path_ref.len, path_ref.data + path_ref.offset); */
evstring mountpoint = evstring_refclone(mountpoint_ref); /* evstring mountpoint = evstring_refclone(mountpoint_ref); */
AssetManager->mount(&path, &mountpoint); /* AssetManager->mount(&path, &mountpoint); */
evstring_free(mountpoint); /* evstring_free(mountpoint); */
evstring_free(path); /* evstring_free(path); */
evstring_free(mountpoint_id); /* evstring_free(mountpoint_id); */
evstring_free(path_id); /* evstring_free(path_id); */
} /* } */
Renderer->setWindow((GenericHandle)State.window); /* Renderer->setWindow((GenericHandle)State.window); */
// Loading Scenes /* // Loading Scenes */
double scene_count = evjs_get(project_desc.json_data, "scenes.len")->as_num; /* double scene_count = evjs_get(project_desc.json_data, "scenes.len")->as_num; */
for(int i = 0; i < (int)scene_count;i++) { /* for(int i = 0; i < (int)scene_count;i++) { */
evstring scenepath_id = evstring_newfmt("scenes[%d].path", i); /* evstring scenepath_id = evstring_newfmt("scenes[%d].path", i); */
evstring sceneid_id = evstring_newfmt("scenes[%d].id", i); /* evstring sceneid_id = evstring_newfmt("scenes[%d].id", i); */
evstring scenepath = evstring_refclone(evjs_get(project_desc.json_data, scenepath_id)->as_str); /* evstring scenepath = evstring_refclone(evjs_get(project_desc.json_data, scenepath_id)->as_str); */
evstring sceneid = evstring_refclone(evjs_get(project_desc.json_data, sceneid_id)->as_str); /* evstring sceneid = evstring_refclone(evjs_get(project_desc.json_data, sceneid_id)->as_str); */
GameScene scene = Scene->loadFromFile(scenepath); /* GameScene scene = Scene->loadFromFile(scenepath); */
Scene->setName(scene, sceneid); /* Scene->setName(scene, sceneid); */
evstring_free(sceneid); /* evstring_free(sceneid); */
evstring_free(sceneid_id); /* evstring_free(sceneid_id); */
evstring_free(scenepath); /* evstring_free(scenepath); */
evstring_free(scenepath_id); /* evstring_free(scenepath_id); */
} /* } */
evstring activeScene = evstring_refclone(evjs_get(project_desc.json_data, "activeScene")->as_str); /* evstring activeScene = evstring_refclone(evjs_get(project_desc.json_data, "activeScene")->as_str); */
Game->setActiveScene(Scene->getFromName(activeScene)); /* Game->setActiveScene(Scene->getFromName(activeScene)); */
evstring_free(activeScene); /* evstring_free(activeScene); */
} /* } */
evstring_free(project_dir); /* evstring_free(project_dir); */
} /* } */
void /* void */
unload_project() /* unload_project() */
{ /* { */
evol_unloadmodule(State.renderer_mod); /* evol_unloadmodule(State.renderer_mod); */
evol_unloadmodule(State.game_mod); /* evol_unloadmodule(State.game_mod); */
evol_unloadmodule(State.input_mod); /* evol_unloadmodule(State.input_mod); */
evol_unloadmodule(State.window_mod); /* evol_unloadmodule(State.window_mod); */
} /* } */
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
evolengine_t *engine = evol_create(); EV_UNUSED_PARAMS(argc, argv);
evol_parse_args(engine, argc, argv); /* evolengine_t *engine = evol_create(); */
evol_init(engine); /* evol_parse_args(engine, argc, argv); */
/* evol_init(engine); */
State.asset_mod = evol_loadmodule("assetmanager"); DEBUG_ASSERT(State.asset_mod); /* State.asset_mod = evol_loadmodule("assetmanager"); DEBUG_ASSERT(State.asset_mod); */
imports(State.asset_mod , (AssetManager, Asset, TextLoader, JSONLoader, ShaderLoader)) /* imports(State.asset_mod , (AssetManager, Asset, TextLoader, JSONLoader, ShaderLoader)) */
load_project(); /* load_project(); */
AssetManager->watchRecursively("project:/", project_changed_cb); /* AssetManager->watchRecursively("project:/", project_changed_cb); */
rmt_SetCurrentThreadName("Main Thread"); /* rmt_SetCurrentThreadName("Main Thread"); */
U32 result = 0; /* U32 result = 0; */
while(result == 0) { /* while(result == 0) { */
ev_ProfileCPU(WindowUpdate, 0) { /* ev_ProfileCPU(WindowUpdate, 0) { */
result |= Window->update(State.window); /* result |= Window->update(State.window); */
} /* } */
ev_ProfileCPU(EventSystemProgress, 0) { /* ev_ProfileCPU(EventSystemProgress, 0) { */
result |= EventSystem.progress(); /* result |= EventSystem.progress(); */
} /* } */
ev_ProfileCPU(GameProgress, 0) { /* ev_ProfileCPU(GameProgress, 0) { */
result |= Game->progress(0.01666667f); /* result |= Game->progress(0.01666667f); */
} /* } */
ev_ProfileCPU(GameProgress, 0) { /* ev_ProfileCPU(GameProgress, 0) { */
AssetManager->update(); /* AssetManager->update(); */
} /* } */
Renderer->run(); /* /1* sleep_ms(17); *1/ */
/* sleep_ms(17); */ /* } */
}
unload_project(); /* unload_project(); */
evol_unloadmodule(State.asset_mod); /* evol_unloadmodule(State.asset_mod); */
evol_deinit(engine); /* evol_deinit(engine); */
evol_destroy(engine); /* evol_destroy(engine); */
return 0; return 0;
} }