From 08ce7b5536393052f19ac69dcc284642a921e4e5 Mon Sep 17 00:00:00 2001 From: Ratstail91 Date: Fri, 3 Mar 2023 17:20:56 +1100 Subject: [PATCH] Added MSVC debugging tool, discovered globals feature --- assets/scripts/init.toy | 53 +++++++++++++++++++++++------------------ box/box_common.h | 3 +++ box/box_engine.c | 4 ++-- source/main.c | 6 +++++ 4 files changed, 41 insertions(+), 25 deletions(-) diff --git a/assets/scripts/init.toy b/assets/scripts/init.toy index eddaf2c..ca68d49 100644 --- a/assets/scripts/init.toy +++ b/assets/scripts/init.toy @@ -1,31 +1,38 @@ -import engine; -import input; +//A quirk of the setup is that anything defined in the root of `init.toy` becomes a global object +//To resolve that, the configuration is inside a block scope +{ + import engine; + import input; -//input settings, mapping SDL2's virtual keys to event names -mapInputEventToKeyDown("character_up", "w"); //event, keysym -mapInputEventToKeyDown("character_left", "a"); //event, keysym -mapInputEventToKeyDown("character_down", "s"); //event, keysym -mapInputEventToKeyDown("character_right", "d"); //event, keysym + //input settings, mapping SDL2's virtual keys to event names + mapInputEventToKeyDown("character_up", "w"); //event, keysym + mapInputEventToKeyDown("character_left", "a"); //event, keysym + mapInputEventToKeyDown("character_down", "s"); //event, keysym + mapInputEventToKeyDown("character_right", "d"); //event, keysym -mapInputEventToKeyUp("character_up", "w"); //event, keysym -mapInputEventToKeyUp("character_left", "a"); //event, keysym -mapInputEventToKeyUp("character_down", "s"); //event, keysym -mapInputEventToKeyUp("character_right", "d"); //event, keysym + mapInputEventToKeyUp("character_up", "w"); //event, keysym + mapInputEventToKeyUp("character_left", "a"); //event, keysym + mapInputEventToKeyUp("character_down", "s"); //event, keysym + mapInputEventToKeyUp("character_right", "d"); //event, keysym -mapInputEventToKeyDown("character_up", "up"); //event, keysym -mapInputEventToKeyDown("character_left", "left"); //event, keysym -mapInputEventToKeyDown("character_down", "down"); //event, keysym -mapInputEventToKeyDown("character_right", "right"); //event, keysym + mapInputEventToKeyDown("character_up", "up"); //event, keysym + mapInputEventToKeyDown("character_left", "left"); //event, keysym + mapInputEventToKeyDown("character_down", "down"); //event, keysym + mapInputEventToKeyDown("character_right", "right"); //event, keysym -mapInputEventToKeyUp("character_up", "up"); //event, keysym -mapInputEventToKeyUp("character_left", "left"); //event, keysym -mapInputEventToKeyUp("character_down", "down"); //event, keysym -mapInputEventToKeyUp("character_right", "right"); //event, keysym + mapInputEventToKeyUp("character_up", "up"); //event, keysym + mapInputEventToKeyUp("character_left", "left"); //event, keysym + mapInputEventToKeyUp("character_down", "down"); //event, keysym + mapInputEventToKeyUp("character_right", "right"); //event, keysym -//this function must always be called, or the engine won't run -initWindow("Airport Game", 1080, 720, false); + //this function must always be called, or the engine won't run + initWindow("Airport Game", 1080, 720, false); + + //kick off the logic of the scene graph + loadRootNode("scripts:/scene.toy"); +} + +//Globals go here -//kick off the logic of the scene graph -loadRootNode("scripts:/scene.toy"); diff --git a/box/box_common.h b/box/box_common.h index 5926dae..39a1e9e 100644 --- a/box/box_common.h +++ b/box/box_common.h @@ -24,12 +24,15 @@ #include #include +#include + #ifndef BOX_EXPORT #define BOX_API __declspec(dllimport) #else #define BOX_API __declspec(dllexport) #endif +//TODO: figure out the sleep issue #define sleep Sleep #else diff --git a/box/box_engine.c b/box/box_engine.c index 9573626..9543309 100644 --- a/box/box_engine.c +++ b/box/box_engine.c @@ -70,7 +70,7 @@ void Box_initEngine() { const unsigned char* tb = Toy_compileString((const char*)source, &size); free((void*)source); - //TODO: inner-interpreter + //A quirk of the setup is that anything defined in `init.toy` becomes a global object Toy_runInterpreter(&engine.interpreter, tb, size); } @@ -147,7 +147,7 @@ static void execLoadRootNode() { Box_callEngineNode(engine.rootNode, &inner, "onLoad", NULL); //manual cleanup - inner.scope = Toy_popScope(inner.scope); + Toy_popScope(inner.scope); Toy_freeLiteralArray(&inner.stack); Toy_freeLiteralArray(&inner.literalCache); diff --git a/source/main.c b/source/main.c index 60e0d89..b4c4b2c 100644 --- a/source/main.c +++ b/source/main.c @@ -7,6 +7,12 @@ #include "lib_runner.h" int main(int argc, char* argv[]) { + //debugging tools +#ifdef _DEBUG + // Memory Leak Detection during Debug Builds (MSVC only) + _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); +#endif//win32 && debug + //the drive system uses a LiteralDictionary, which must be initialized with this Toy_initDriveDictionary();