From bbe69585984edc0a45c4ae9eb4915f68e6be84a4 Mon Sep 17 00:00:00 2001 From: Anonymus Raccoon Date: Fri, 17 Apr 2020 22:13:53 +0200 Subject: [PATCH] Adding a method to add dialog lines --- CMakeLists.txt | 2 +- include/components/combat_holder.h | 29 +++++++++++++++++ include/components/dialog_holder.h | 2 ++ lib/xmlparser | 2 +- prefabs/combat.gcprefab | 8 +---- prefabs/enemies/bee.gcprefab | 2 ++ src/components/combat_holder.c | 51 ++++++++++++++++++++++++++++++ src/components/dialog_methods.c | 32 +++++++++++++++++++ src/game_loader.c | 2 ++ src/systems/combat_manager.c | 19 ++++++++++- 10 files changed, 139 insertions(+), 10 deletions(-) create mode 100644 include/components/combat_holder.h create mode 100644 src/components/combat_holder.c create mode 100644 src/components/dialog_methods.c diff --git a/CMakeLists.txt b/CMakeLists.txt index cc82a7c..a868e8b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -289,7 +289,7 @@ add_executable(my_rpg include/systems/combat_manager.h src/components/player_component.c include/components/player_component.h - src/enemy_dataloader.c include/enemy.h) + src/enemy_dataloader.c include/enemy.h src/components/combat_holder.c include/components/combat_holder.h src/components/dialog_methods.c) add_compile_options(-W -Wall -Wextra -Wshadow) diff --git a/include/components/combat_holder.h b/include/components/combat_holder.h new file mode 100644 index 0000000..d3207d2 --- /dev/null +++ b/include/components/combat_holder.h @@ -0,0 +1,29 @@ +/* +** EPITECH PROJECT, 2020 +** my_rpg +** File description: +** combat_holder.h +*/ + + +#ifndef MY_RPG_COMBAT_HOLDER_H +#define MY_RPG_COMBAT_HOLDER_H + +#include "component.h" + +enum combat_state +{ + STARTUP, + IDLE +}; + +struct combat_holder +{ + gc_component base; + enum combat_state state; + char *name; +}; + +extern const struct combat_holder combat_holder; + +#endif //MY_RPG_COMBAT_HOLDER_H diff --git a/include/components/dialog_holder.h b/include/components/dialog_holder.h index 90ff2e0..17ed20f 100644 --- a/include/components/dialog_holder.h +++ b/include/components/dialog_holder.h @@ -45,5 +45,7 @@ struct dialog_manager { const struct dialog_manager dialog_manager; void dialog_next(gc_engine *engine); +void dialog_add_line(struct dialog_holder *this, char *name, char *text, \ +struct dialog_input *inputs); #endif //MY_RPG_DIALOG_HOLDER_H diff --git a/lib/xmlparser b/lib/xmlparser index ad2bcc9..828f417 160000 --- a/lib/xmlparser +++ b/lib/xmlparser @@ -1 +1 @@ -Subproject commit ad2bcc9a667b9f20233acf84f5e491b9562f9c8e +Subproject commit 828f4170b818088363e577a8dc4347f53174af54 diff --git a/prefabs/combat.gcprefab b/prefabs/combat.gcprefab index 378e4ad..c3baaeb 100644 --- a/prefabs/combat.gcprefab +++ b/prefabs/combat.gcprefab @@ -19,13 +19,7 @@ - - - - - - - + diff --git a/prefabs/enemies/bee.gcprefab b/prefabs/enemies/bee.gcprefab index 568bfcc..7f514dd 100644 --- a/prefabs/enemies/bee.gcprefab +++ b/prefabs/enemies/bee.gcprefab @@ -8,5 +8,7 @@ + + \ No newline at end of file diff --git a/src/components/combat_holder.c b/src/components/combat_holder.c new file mode 100644 index 0000000..5de7778 --- /dev/null +++ b/src/components/combat_holder.c @@ -0,0 +1,51 @@ +/* +** EPITECH PROJECT, 2020 +** my_rpg +** File description: +** combat_holder.c +*/ + +#include "engine.h" +#include "components/combat_holder.h" + +static void ctr(void *component, va_list args) +{ + struct combat_holder *cmp = component; + + cmp->state = STARTUP; + cmp->name = va_arg(args, char *); +} + +static void fdctr(gc_entity *entity, gc_scene *scene, \ +void *component, node *n) +{ + struct combat_holder *cmp = component; + + cmp->name = xml_getproperty(n, "name"); +} + +static void dtr(void *component) +{ + (void)component; +} + +static char *serialize(void *component) +{ + (void)component; + return (NULL); +} + +const struct combat_holder combat_holder = { + base: { + name: "combat_holder", + size: sizeof(struct combat_holder), + dependencies: (char *[]){ + NULL + }, + ctr: &ctr, + fdctr: &fdctr, + dtr: &dtr, + serialize: &serialize, + destroy: &component_destroy + } +}; \ No newline at end of file diff --git a/src/components/dialog_methods.c b/src/components/dialog_methods.c new file mode 100644 index 0000000..1bd0f5b --- /dev/null +++ b/src/components/dialog_methods.c @@ -0,0 +1,32 @@ +/* +** EPITECH PROJECT, 2020 +** my_rpg +** File description: +** dialog_methods.c +*/ + +#include "components/dialog_holder.h" +#include "utility.h" +#include + +void dialog_add_line(struct dialog_holder *this, char *name, char *text, \ +struct dialog_input *inputs) +{ + struct dialog_line *line = malloc(sizeof(*line)); + int count = 0; + + if (!line) + return; + line->name = name; + line->text = text; + if (inputs) + for (count = 0; &inputs[count]; count++); + line->input_count = count; + line->inputs = inputs; + for (count = 0; this->text[count]; count++); + this->text = my_realloc(this->text, count, count + sizeof(void *)); + if (!this->text) + return; + this->text[count] = line; + this->text[count + 1] = NULL; +} \ No newline at end of file diff --git a/src/game_loader.c b/src/game_loader.c index 8639bb1..b3c84fe 100644 --- a/src/game_loader.c +++ b/src/game_loader.c @@ -12,6 +12,7 @@ #include #include #include +#include #include "systems/map_movement_system.h" #include "systems/game_manager_system.h" #include "systems/controllers/keyboard_controller_system.h" @@ -75,6 +76,7 @@ int register_customcmps(gc_engine *engine, bool map_editor) engine->add_system(engine, &game_display_system); engine->add_component(engine, &xp_component); engine->add_component(engine, &player_component); + engine->add_component(engine, &combat_holder); engine->add_system(engine, new_system(&combat_manager, engine)); engine->finish_physics(engine); engine->add_dataloader(engine, "enemies", &enemies_dataloader); diff --git a/src/systems/combat_manager.c b/src/systems/combat_manager.c index 09dd8ce..1668528 100644 --- a/src/systems/combat_manager.c +++ b/src/systems/combat_manager.c @@ -13,6 +13,7 @@ #include "engine.h" #include "my.h" #include "components/dialog_holder.h" +#include "components/combat_holder.h" #include "enemy.h" void combat_start(gc_engine *engine, char *enemy_name) @@ -58,6 +59,22 @@ void entity_moved(gc_engine *engine, va_list args) static void update_entity(gc_engine *engine, void *system, gc_entity *entity, \ float dtime) { + struct combat_holder *cmp = GETCMP(entity, combat_holder); + gc_scene *scene = engine->scene; + gc_list *li = scene->get_entity_by_cmp(scene, "dialog_holder"); + struct dialog_holder *dialog; + + if (!li) + return; + dialog = GETCMP(li->data, dialog_holder); + switch (cmp->state) { + case STARTUP: + dialog_add_line(dialog, NULL, "A bee has appeared.", NULL); + cmp->state = IDLE; + break; + case IDLE: + break; + } } static void ctr(void *system, va_list list) @@ -79,7 +96,7 @@ static void dtr(void *system, gc_engine *engine) const struct combat_manager combat_manager = { base: { name: "combat_manager", - component_name: "player_component", + component_name: "combat_holder", size: sizeof(struct combat_manager), ctr: &ctr, dtr: &dtr,