From 76435739ce26e0be5cad06ead5f7834316e35cb9 Mon Sep 17 00:00:00 2001
From: AnonymusRaccoon
Date: Wed, 11 Mar 2020 16:14:44 +0100
Subject: [PATCH] Finishing the tile switcher
---
include/components/game_display.h | 3 ++-
include/setup.h | 3 ++-
lib/gamacon | 2 +-
prefabs/game.gcprefab | 9 +++++++++
src/components/game_display.c | 4 ++++
src/game_loader.c | 1 +
src/systems/game_display_system.c | 18 ++++++++++++++++++
src/toolbar.c | 20 ++++++++++++++++++++
8 files changed, 57 insertions(+), 3 deletions(-)
diff --git a/include/components/game_display.h b/include/components/game_display.h
index c4a6017..15bbad2 100644
--- a/include/components/game_display.h
+++ b/include/components/game_display.h
@@ -10,7 +10,8 @@
typedef enum display_type
{
HAPPINESS_DISPLAY,
- STUPIDITY_DISPLAY
+ STUPIDITY_DISPLAY,
+ SELECT_TILE_DISPLAY
} display_type;
struct game_display
diff --git a/include/setup.h b/include/setup.h
index dc82ffb..606312d 100644
--- a/include/setup.h
+++ b/include/setup.h
@@ -31,4 +31,5 @@ bool vertex_select(gc_engine *engine, gc_entity *entity, gc_vector2 _);
bool up_down(gc_engine *engine, gc_entity *entity, gc_vector2 _);
bool reset(gc_engine *engine, gc_entity *entity, gc_vector2 _);
bool rotate(gc_engine *engine, gc_entity *entity, gc_vector2 _);
-bool texture(gc_engine *engine, gc_entity *entity, gc_vector2 _);
\ No newline at end of file
+bool texture(gc_engine *engine, gc_entity *entity, gc_vector2 _);
+bool switch_texture(gc_engine *engine, gc_entity *entity, gc_vector2 _);
\ No newline at end of file
diff --git a/lib/gamacon b/lib/gamacon
index 02861ba..e23cf1c 160000
--- a/lib/gamacon
+++ b/lib/gamacon
@@ -1 +1 @@
-Subproject commit 02861bab238ff37ecde010902300e81907ebade7
+Subproject commit e23cf1c4fcb128bf11a89fdad17b00d094b4df7d
diff --git a/prefabs/game.gcprefab b/prefabs/game.gcprefab
index ad52eb0..5e788dd 100644
--- a/prefabs/game.gcprefab
+++ b/prefabs/game.gcprefab
@@ -25,6 +25,9 @@
+
+
+
@@ -58,6 +61,12 @@
+
+
+
+
diff --git a/src/components/game_display.c b/src/components/game_display.c
index d0792ad..742f6eb 100644
--- a/src/components/game_display.c
+++ b/src/components/game_display.c
@@ -27,6 +27,10 @@ static void fdctr(gc_entity *entity, gc_scene *scene, void *component, node *n)
struct renderer *rend = GETCMP(entity, renderer);
char *display_type = xml_gettempprop(n, "stats");
+ if (!my_strcmp(display_type, "selected_tile")) {
+ cmp->type = SELECT_TILE_DISPLAY;
+ return;
+ }
if (!my_strcmp(display_type, "happiness"))
cmp->type = HAPPINESS_DISPLAY;
else
diff --git a/src/game_loader.c b/src/game_loader.c
index a43bd46..f65d64d 100644
--- a/src/game_loader.c
+++ b/src/game_loader.c
@@ -40,6 +40,7 @@ const struct callback callbacks[] = {
{"reset", &reset},
{"rotate", &rotate},
{"texture", &texture},
+ {"switch_texture", &switch_texture},
{NULL, NULL}
};
diff --git a/src/systems/game_display_system.c b/src/systems/game_display_system.c
index 7199f17..9948989 100644
--- a/src/systems/game_display_system.c
+++ b/src/systems/game_display_system.c
@@ -10,9 +10,23 @@
#include
#include "components/game_display.h"
#include "components/game_manager.h"
+#include "components/isometry/map_manager_component.h"
#include "text.h"
#include "components/renderer.h"
#include
+#include "sprite.h"
+
+void display_current_texture(gc_scene *scene, struct renderer *rend)
+{
+ gc_list *li = scene->get_entity_by_cmp(scene, "map_manager_component");
+ struct map_manager_component *map;
+
+ if (!li)
+ return;
+ map = GETCMP(li->data, map_manager_component);
+ ((gc_sprite *)rend->data)->texture = map->selected_texture;
+
+}
static void update_entity(gc_engine *engine, void *system, gc_entity *entity, \
float dtime)
@@ -26,6 +40,10 @@ float dtime)
if (!entities)
return;
manager = GETCMP(entities->data, game_manager);
+ if (disp->type == SELECT_TILE_DISPLAY && rend->type == GC_TEXTUREREND){
+ display_current_texture(scene, rend);
+ return;
+ }
if (rend->type != GC_TXTREND)
return;
if (disp->type == HAPPINESS_DISPLAY)
diff --git a/src/toolbar.c b/src/toolbar.c
index 057918f..737ce4f 100644
--- a/src/toolbar.c
+++ b/src/toolbar.c
@@ -4,6 +4,7 @@
#include
#include
+#include
#include "engine.h"
#include "entity.h"
@@ -57,4 +58,23 @@ bool texture(gc_engine *engine, gc_entity *entity, gc_vector2 _)
manager = GETCMP(list->data, map_manager_component);
manager->brush = TEXTURE;
return (true);
+}
+
+bool switch_texture(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;
+ void **data = scene->get_data(scene, "tiles", NULL);
+ static int index = 0;
+ void *next = NULL;
+
+ if (!list)
+ return (false);
+ manager = GETCMP(list->data, map_manager_component);
+ index++;
+ if (data)
+ next = data[index % (arraylen(data) - 1)];
+ manager->selected_texture = next;
+ return (true);
}
\ No newline at end of file