diff --git a/include/setup.h b/include/setup.h index 76d9f31..d54f242 100644 --- a/include/setup.h +++ b/include/setup.h @@ -24,6 +24,8 @@ bool catch(gc_engine *engine, gc_entity *entity, gc_vector2 _, \ enum gc_mousekeys __); bool toggle_pause(gc_engine *engine, gc_entity *entity, gc_vector2 _, \ enum gc_mousekeys __); +bool toggle_inventory(gc_engine *engine, gc_entity *entity, gc_vector2 _, \ +enum gc_mousekeys __); int checkbox_update(gc_scene *s, gc_entity *entity, bool checked); void resolution_set_txt(gc_entity *entity, gc_engine *engine, \ diff --git a/include/systems/game_manager_system.h b/include/systems/game_manager_system.h index 232cea3..2a52370 100644 --- a/include/systems/game_manager_system.h +++ b/include/systems/game_manager_system.h @@ -10,6 +10,11 @@ #include "system.h" -const gc_system game_manager_system; +struct game_manager_system { + gc_system base; + bool is_inventory; +}; + +const struct game_manager_system game_manager_system; #endif //_MAP_MOVEMENT_SYSTEM_H__ diff --git a/lib/gamacon b/lib/gamacon index 5d78e62..c67bb8b 160000 --- a/lib/gamacon +++ b/lib/gamacon @@ -1 +1 @@ -Subproject commit 5d78e62f4a97af93e32613a5d40614a9473b01a7 +Subproject commit c67bb8b37d159e52eb88e156e6da20efabbec586 diff --git a/prefabs/inventory.gcprefab b/prefabs/inventory.gcprefab new file mode 100644 index 0000000..dbb30cc --- /dev/null +++ b/prefabs/inventory.gcprefab @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/src/game_loader.c b/src/game_loader.c index 53dfd54..54106d1 100644 --- a/src/game_loader.c +++ b/src/game_loader.c @@ -40,7 +40,7 @@ const struct callback callbacks[] = { {"framerate_down", &framerate_down}, {"catch", &catch}, {"toggle_pause", &toggle_pause}, - {"toggle_pause", &toggle_pause}, + {"toggle_inventory", &toggle_inventory}, {"action0", &dialog_input0}, {"action1", &dialog_input1}, {"action2", &dialog_input2}, diff --git a/src/systems/game_manager_system.c b/src/systems/game_manager_system.c index 79328e2..e6c9e58 100644 --- a/src/systems/game_manager_system.c +++ b/src/systems/game_manager_system.c @@ -12,6 +12,7 @@ #include "keybindings.h" #include "system.h" #include "components/game_manager.h" +#include "systems/game_manager_system.h" bool toggle_pause(gc_engine *engine) { @@ -31,12 +32,32 @@ bool toggle_pause(gc_engine *engine) return (true); } +bool toggle_inventory(gc_engine *engine) +{ + gc_scene *scene = engine->scene; + gc_list *list; + + scene->is_paused = !scene->is_paused; + if (scene->is_paused) { + prefab_load(engine, "prefabs/inventory.gcprefab"); + return (true); + } + list = scene->get_entity_by_cmp(scene, "tag_component"); + for (gc_list *li = list; li; li = li->next) { + if (!my_strcmp(GETCMP(li->data, tag_component)->tag, "inventory")) + ((gc_entity *)li->data)->destroy(li->data, scene); + } + return (true); +} + static void key_pressed(gc_engine *engine, va_list args) { gc_keybindings key = va_arg(args, gc_keybindings); if (key == ESCAPE) - toggle_pause(engine); + toggle_pause(engine); + if (key == KEY_E) + toggle_inventory(engine); } static void update_entity(gc_engine *engine, void *system, gc_entity *entity, \ @@ -48,6 +69,7 @@ static void ctr(void *system, va_list list) { gc_engine *engine = va_arg(list, gc_engine *); + engine->add_event_listener(engine, "key_pressed", &key_pressed); } @@ -56,13 +78,16 @@ static void dtr(void *system, gc_engine *engine) engine->remove_event_listener(engine, "key_pressed", &key_pressed); } -const gc_system game_manager_system = { - name: "game_cycle", - component_name: "game_manager", - size: sizeof(gc_system), - ctr: &ctr, - dtr: &dtr, - check_dependencies: &system_check_dependencies, - update_entity: &update_entity, - destroy: &system_destroy +const struct game_manager_system game_manager_system = { + base : { + name: "game_cycle", + component_name: "game_manager", + size: sizeof(struct game_manager_system), + ctr: &ctr, + dtr: &dtr, + check_dependencies: &system_check_dependencies, + update_entity: &update_entity, + destroy: &system_destroy + }, + is_inventory: false }; \ No newline at end of file