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 @@
- ?? line="Hello dirt block,\nI am the mighty cobble block.">
-
-
-
-
- ???>
-
+
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,