From 6d4de94e2267039f7b479ddb4e8bfc8012bf9db8 Mon Sep 17 00:00:00 2001
From: AnonymusRaccoon
Date: Wed, 11 Mar 2020 11:33:00 +0100
Subject: [PATCH] Finishing the toolbar
---
CMakeLists.txt | 2 +-
include/setup.h | 7 ++++-
lib/gamacon | 2 +-
prefabs/game.gcprefab | 8 +++---
src/game_loader.c | 40 +++++++++++++++++++----------
src/toolbar.c | 60 +++++++++++++++++++++++++++++++++++++++++++
6 files changed, 98 insertions(+), 21 deletions(-)
create mode 100644 src/toolbar.c
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5a6c3a5..029cc7d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -252,7 +252,7 @@ add_executable(My3D
lib/gamacon/src/components/isometry/map_manager_component.c
lib/gamacon/include/components/isometry/map_manager_component.h
lib/gamacon/src/components/isometry/vertex_data_loader.c
- lib/gamacon/include/vertex_data_loader.h)
+ lib/gamacon/include/vertex_data_loader.h src/toolbar.c lib/gamacon/include/callbacks.h)
add_compile_options(-W -Wall -Wextra -Wshadow)
diff --git a/include/setup.h b/include/setup.h
index 51baf9b..7883dad 100644
--- a/include/setup.h
+++ b/include/setup.h
@@ -24,4 +24,9 @@ void resolution_set_text(gc_entity *entity, gc_engine *engine);
bool fullscreen(gc_engine *engine, gc_entity *entity, gc_vector2 _);
bool resolution_down(gc_engine *engine, gc_entity *entity, gc_vector2 _);
-bool resolution_up(gc_engine *engine, gc_entity *entity, gc_vector2 _);
\ No newline at end of file
+bool resolution_up(gc_engine *engine, gc_entity *entity, gc_vector2 _);
+
+bool tile_select(gc_engine *engine, gc_entity *entity, gc_vector2 _);
+bool vertex_select(gc_engine *engine, gc_entity *entity, gc_vector2 _);
+bool up_down(gc_engine *engine, gc_entity *entity, gc_vector2 _);
+bool rotate(gc_engine *engine, gc_entity *entity, gc_vector2 _);
\ No newline at end of file
diff --git a/lib/gamacon b/lib/gamacon
index 2cc17be..6091223 160000
--- a/lib/gamacon
+++ b/lib/gamacon
@@ -1 +1 @@
-Subproject commit 2cc17bef752f94f4fedd6db77e78afa9cce495a4
+Subproject commit 609122329b97306ebd59995f82452b32d0e5e8db
diff --git a/prefabs/game.gcprefab b/prefabs/game.gcprefab
index ab4eebf..8ced595 100644
--- a/prefabs/game.gcprefab
+++ b/prefabs/game.gcprefab
@@ -49,10 +49,10 @@
-
-
-
-
+
+
+
+
diff --git a/src/game_loader.c b/src/game_loader.c
index 72c841e..1bd50fb 100644
--- a/src/game_loader.c
+++ b/src/game_loader.c
@@ -12,11 +12,35 @@
#include "systems/teams_system.h"
#include
#include "teams.h"
+#include "callbacks.h"
#include "components/game_display.h"
#include "components/game_manager.h"
#include "systems/game_manager_system.h"
#include "map_interactions.h"
+const struct callback callbacks[] = {
+ {"start_button", &start_button},
+ {"options", &options},
+ {"goto_main_menu", &goto_main_menu},
+ {"quit", &quit},
+ {"fullscreen", &fullscreen},
+ {"map_manage_click", &tile_interact},
+ {"resolution_down", &resolution_down},
+ {"resolution_up", &resolution_up},
+ {"absent_check", &absent_check},
+ {"absent_cross", &absent_cross},
+ {"forgot_lmfao", &forgot_lmfao},
+ {"forgot_ok", &forgot_ok},
+ {"catch", &catch},
+ {"toggle_pause", &toggle_pause},
+ {"toggle_pause", &toggle_pause},
+ {"tile_select", &tile_select},
+ {"vertex_select", &vertex_select},
+ {"up_down", &up_down},
+ {"rotate", &rotate},
+ {NULL, NULL}
+};
+
int register_customcmps(gc_engine *engine)
{
engine->add_component(engine, &game_manager);
@@ -26,20 +50,8 @@ int register_customcmps(gc_engine *engine)
engine->add_component(engine, &teams_component);
engine->add_system(engine, &teams_system);
engine->finish_physics(engine);
- engine->add_callback(engine, "start_button", &start_button);
- engine->add_callback(engine, "options", &options);
- engine->add_callback(engine, "goto_main_menu", &goto_main_menu);
- engine->add_callback(engine, "quit", &quit);
- engine->add_callback(engine, "fullscreen", &fullscreen);
- engine->add_callback(engine, "map_manage_click", &tile_interact);
- engine->add_callback(engine, "resolution_down", &resolution_down);
- engine->add_callback(engine, "resolution_up", &resolution_up);
- engine->add_callback(engine, "absent_check", &absent_check);
- engine->add_callback(engine, "absent_cross", &absent_cross);
- engine->add_callback(engine, "forgot_lmfao", &forgot_lmfao);
- engine->add_callback(engine, "forgot_ok", &forgot_ok);
- engine->add_callback(engine, "catch", &catch);
- engine->add_callback(engine, "toggle_pause", &toggle_pause);
+ for (int i = 0; callbacks[i].func; i++)
+ engine->add_callback(engine, callbacks[i].name, callbacks[i].func);
return (0);
}
diff --git a/src/toolbar.c b/src/toolbar.c
new file mode 100644
index 0000000..c5b6a85
--- /dev/null
+++ b/src/toolbar.c
@@ -0,0 +1,60 @@
+//
+// Created by anonymus-raccoon on 3/11/20.
+//
+
+#include
+#include
+#include "engine.h"
+#include "entity.h"
+
+bool tile_select(gc_engine *engine, gc_entity *entity, gc_vector2 _)
+{
+ gc_scene *scene = engine->scene;
+ gc_list *list = scene->get_entity_by_cmp(scene, "map_manager_component");
+ struct map_manager_component *manager;
+
+ if (!list)
+ return (false);
+ manager = GETCMP(list->data, map_manager_component);
+ manager->tile_mode = true;
+ return (true);
+}
+
+bool vertex_select(gc_engine *engine, gc_entity *entity, gc_vector2 _)
+{
+ gc_scene *scene = engine->scene;
+ gc_list *list = scene->get_entity_by_cmp(scene, "map_manager_component");
+ struct map_manager_component *manager;
+
+ if (!list)
+ return (false);
+ manager = GETCMP(list->data, map_manager_component);
+ manager->tile_mode = false;
+ return (true);
+}
+
+bool up_down(gc_engine *engine, gc_entity *entity, gc_vector2 _)
+{
+ gc_scene *scene = engine->scene;
+ gc_list *list = scene->get_entity_by_cmp(scene, "map_manager_component");
+ struct map_manager_component *manager;
+
+ if (!list)
+ return (false);
+ manager = GETCMP(list->data, map_manager_component);
+ manager->brush = MOVE;
+ return (true);
+}
+
+bool rotate(gc_engine *engine, gc_entity *entity, gc_vector2 _)
+{
+ gc_scene *scene = engine->scene;
+ gc_list *list = scene->get_entity_by_cmp(scene, "map_manager_component");
+ struct map_manager_component *manager;
+
+ if (!list)
+ return (false);
+ manager = GETCMP(list->data, map_manager_component);
+ manager->brush = ROTATE;
+ return (true);
+}
\ No newline at end of file