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