diff --git a/assets/ui/save.png b/assets/ui/save.png
new file mode 100644
index 0000000..fa418a7
Binary files /dev/null and b/assets/ui/save.png differ
diff --git a/include/map_editor.h b/include/map_editor.h
index 34f0140..2080c35 100644
--- a/include/map_editor.h
+++ b/include/map_editor.h
@@ -40,6 +40,8 @@ bool texture(gc_engine *engine, gc_entity *entity, gc_vector2 _,
enum gc_mousekeys __);
bool switch_texture(gc_engine *engine, gc_entity *entity, gc_vector2 _,
enum gc_mousekeys __);
+bool save_map(gc_engine *engine, gc_entity *entity, gc_vector2 _,
+enum gc_mousekeys __);
enum brush
{
diff --git a/lib/gamacon b/lib/gamacon
index 5941597..ac3ff0a 160000
--- a/lib/gamacon
+++ b/lib/gamacon
@@ -1 +1 @@
-Subproject commit 59415972ed68b09f1274c8d9b7975de056514348
+Subproject commit ac3ff0adbfbd6585bd8ec783d5f55df73200de28
diff --git a/prefabs/editor_ui.gcprefab b/prefabs/editor_ui.gcprefab
index ae21278..1ed6b2f 100644
--- a/prefabs/editor_ui.gcprefab
+++ b/prefabs/editor_ui.gcprefab
@@ -1,14 +1,15 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
\ No newline at end of file
diff --git a/prefabs/game.gcprefab b/prefabs/game.gcprefab
index 5ccfbdc..a72339e 100644
--- a/prefabs/game.gcprefab
+++ b/prefabs/game.gcprefab
@@ -25,6 +25,7 @@
+
diff --git a/src/game_loader.c b/src/game_loader.c
index 2c75a02..7b72dee 100644
--- a/src/game_loader.c
+++ b/src/game_loader.c
@@ -46,6 +46,7 @@ const struct callback map_editor_callbacks[] = {
{"rotate", &rotate},
{"texture", &texture},
{"switch_texture", &switch_texture},
+ {"save", &save_map},
{NULL, NULL}
};
diff --git a/src/map_editor/map_interactions.c b/src/map_editor/map_interactions.c
index f501b2a..e03f35a 100644
--- a/src/map_editor/map_interactions.c
+++ b/src/map_editor/map_interactions.c
@@ -36,7 +36,6 @@ struct tile *ret, bool is_left)
bool map_onclick(gc_engine *engine, gc_entity *entity, gc_vector2 pos, \
enum gc_mousekeys key)
{
- printf("Map clicked\n");
struct vertex_component *map = GETCMP(entity, vertex_component);
struct map_manager_component *m = GETCMP(entity, map_manager_component);
struct transform_component *tc = GETCMP(entity, transform_component);
diff --git a/src/map_editor/selectors.c b/src/map_editor/selectors.c
index f09384c..2a51e3b 100644
--- a/src/map_editor/selectors.c
+++ b/src/map_editor/selectors.c
@@ -6,6 +6,8 @@
*/
#include
+#include
+#include
#include "map_editor.h"
#include "engine.h"
#include "entity.h"
@@ -36,4 +38,27 @@ enum gc_mousekeys __)
manager = GETCMP(list->data, map_manager_component);
manager->tile_mode = false;
return (true);
+}
+
+bool save_map(gc_engine *engine, gc_entity *entity, gc_vector2 _,
+enum gc_mousekeys __)
+{
+ gc_scene *scene = engine->scene;
+ gc_list *list = scene->get_entity_by_cmp(scene, "vertex_component");
+ struct vertex_component *map;
+ time_t t;
+ struct tm *tm;
+ char save_file[1024];
+
+ time(&t);
+ tm = localtime(&t);
+ my_strcpy(save_file, "map-");
+ strftime(save_file + 4, sizeof(save_file) - 4, "%d-%m-%Y %H:%M:%S", tm);
+ my_strcat(save_file, ".gcmap");
+ if (!list)
+ return (false);
+ map = GETCMP(list->data, vertex_component);
+ my_printf("Saving the map to the file: %s\n", save_file);
+ vertex_serialize(map, save_file);
+ return (true);
}
\ No newline at end of file