From 3e4688f9a208886c6d5971310e23e8bdd16166de Mon Sep 17 00:00:00 2001 From: Anonymus Raccoon Date: Sat, 2 May 2020 20:56:24 +0200 Subject: [PATCH] Fixing the random segfault and adding attacks to the boss --- CMakeLists.txt | 16 ++++++++++- include/components/combat_holder.h | 1 - prefabs/combat.gcprefab | 1 + src/components/attack_component.c | 2 +- src/components/combat_holder.c | 44 ++++++++++++++++++++++++++++++ src/game_loader.c | 2 ++ src/systems/combat_manager.c | 6 ++-- 7 files changed, 67 insertions(+), 5 deletions(-) create mode 100644 src/components/combat_holder.c diff --git a/CMakeLists.txt b/CMakeLists.txt index a662ddd..2f38807 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -297,7 +297,21 @@ add_executable(my_rpg include/components/attack_component.h src/systems/combat_methods.c src/combat/attacks.c - src/player_utilities.c include/player_utilities.h src/systems/inventory.c include/systems/inventory.h src/systems/game_over.c include/systems/game_over.h src/npc/mia.c lib/gamacon/src/scene/scene_constructor.c src/npc/fisherman.c src/npc/lumberjack.c src/npc/smith.c src/npc/mage.c src/combat/boss.c) + src/player_utilities.c + include/player_utilities.h + src/systems/inventory.c + include/systems/inventory.h + src/systems/game_over.c + include/systems/game_over.h + src/npc/mia.c + lib/gamacon/src/scene/scene_constructor.c + src/npc/fisherman.c + src/npc/lumberjack.c + src/npc/smith.c + src/npc/mage.c + src/combat/boss.c + src/components/combat_holder.c +) add_compile_options(-W -Wall -Wextra -Wshadow) diff --git a/include/components/combat_holder.h b/include/components/combat_holder.h index 4c50978..9d4f5f7 100644 --- a/include/components/combat_holder.h +++ b/include/components/combat_holder.h @@ -14,7 +14,6 @@ struct combat_holder { gc_component base; - char *name; }; extern const struct combat_holder combat_holder; diff --git a/prefabs/combat.gcprefab b/prefabs/combat.gcprefab index a6188e7..5d0c1e6 100644 --- a/prefabs/combat.gcprefab +++ b/prefabs/combat.gcprefab @@ -58,6 +58,7 @@ + diff --git a/src/components/attack_component.c b/src/components/attack_component.c index c2dda3d..23aa28e 100644 --- a/src/components/attack_component.c +++ b/src/components/attack_component.c @@ -24,7 +24,7 @@ static void fdctr(gc_entity *entity, gc_scene *scene, void *component, node *n) char *name; cmp->name = xml_getproperty(n, "name"); - cmp->attacks = malloc(sizeof(attack_holder) * xml_getchildcount(n)); + cmp->attacks = malloc(sizeof(attack_holder) * (xml_getchildcount(n) + 1)); if (!cmp->attacks) return; for (n = n->child; n; n = n->next) { diff --git a/src/components/combat_holder.c b/src/components/combat_holder.c new file mode 100644 index 0000000..e242bdf --- /dev/null +++ b/src/components/combat_holder.c @@ -0,0 +1,44 @@ +/* +** 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) +{ +} + +static void fdctr(gc_entity *entity, gc_scene *scene, \ +void *component, node *n) +{ +} + +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/game_loader.c b/src/game_loader.c index 9819b12..583ff38 100644 --- a/src/game_loader.c +++ b/src/game_loader.c @@ -92,6 +92,7 @@ const struct gc_data attacks[] = { {"attack", "Spinning roots", &enemy_attack, NULL}, {"attack", "Hypnosis", &enemy_attack, NULL}, {"attack", "Water gun", &enemy_attack, NULL}, + {"attack", "Charge", &enemy_attack, NULL}, {NULL, NULL, NULL, NULL} }; @@ -143,6 +144,7 @@ int register_customcmps(gc_engine *engine, bool map_editor) engine->add_component(engine, &xp_component); engine->add_component(engine, &player_component); engine->add_component(engine, &attack_component); + engine->add_component(engine, &combat_holder); engine->add_system(engine, new_system(&combat_manager, engine)); engine->add_component(engine, &health_component); engine->finish_physics(engine); diff --git a/src/systems/combat_manager.c b/src/systems/combat_manager.c index 161a2e5..e45f75c 100644 --- a/src/systems/combat_manager.c +++ b/src/systems/combat_manager.c @@ -94,14 +94,16 @@ static void dtr(void *system, gc_engine *engine) struct combat_manager *this = system; engine->remove_event_listener(engine, "entity_moved", &entity_moved); - if (this->game_scene) + if (this->game_scene) { scene_destroy(this->game_scene); + this->game_scene = NULL; + } } const struct combat_manager combat_manager = { base: { name: "combat_manager", - component_name: "attack_component", + component_name: "combat_holder", size: sizeof(struct combat_manager), ctr: &ctr, dtr: &dtr,