From bf0182f94550b904d0df14289da16b51736aa6e8 Mon Sep 17 00:00:00 2001 From: Anonymus Raccoon Date: Fri, 17 Apr 2020 19:32:10 +0200 Subject: [PATCH] Adding enemies prefabs to the combat scene --- CMakeLists.txt | 2 +- assets/sprites/bee.png | Bin 0 -> 1223 bytes assets/ui/enemy.png | Bin 0 -> 7085 bytes assets/ui/player.png | Bin 0 -> 8249 bytes include/enemy.h | 18 +++++++++++++ include/setup.h | 2 ++ lib/gamacon | 2 +- prefabs/combat.gcprefab | 7 +++++ prefabs/enemies/bee.gcprefab | 12 +++++++++ prefabs/game.gcprefab | 4 +++ src/enemy_dataloader.c | 51 +++++++++++++++++++++++++++++++++++ src/game_loader.c | 2 ++ src/systems/combat_manager.c | 22 ++++++++++++--- 13 files changed, 117 insertions(+), 5 deletions(-) create mode 100644 assets/sprites/bee.png create mode 100644 assets/ui/enemy.png create mode 100644 assets/ui/player.png create mode 100644 include/enemy.h create mode 100644 prefabs/enemies/bee.gcprefab create mode 100644 src/enemy_dataloader.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 1b4d7f8..cc82a7c 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) add_compile_options(-W -Wall -Wextra -Wshadow) diff --git a/assets/sprites/bee.png b/assets/sprites/bee.png new file mode 100644 index 0000000000000000000000000000000000000000..1971387a2ad0339a0edf39845a4d295fe4dfc390 GIT binary patch literal 1223 zcmV;&1UUPNP)a zL1-IC6o$WTWo+RZL@ogt31ZdAIK>4uP3WPH9Bg49bc`?ryQI`Pg!XIeE9DkQ%=Nl(7ZZ-hioCIHHBun_bPKgKct+h;g6{)WQXXP3==*x!F2CcvqL>^ z07_r}qIlxX=(Uy*VB5Z*k1QDBGZXYohB|4lq`SH(hlpXTw{2e);fB>3z4WJmXdgUPf04$(AlVQLN4|{5^2oHVx(NDw;XX92W zq4^^>uVsq~X((GvD4q4OZnDLM0wFx-B(aEWA*YF}Ro^C$=$eoC(#O(p`BoPqc|}`1 zoq#3tx%Y!P4*q=rn$Ounv`WMnG1@^mf(T<`HD#)@n`qmtCoLH-eEOJp8YNKyW{T%v z8Ir+Wbj?S9I|>{QJ!{>t8n??I^E4R;WYJ3ocd6vJOduC>uB;iax#Bhw@8jtsbW2#` zMun-_xAFM zk9D&cSTk2*KXvT@=_80%*}T^)o9+40Y3qV5G>rq#gO2H1>DIKmMn_pTU{M@j3WrB-z08TPSup+RmpF$d9T+s$fgUr*}tRZ`)9r|2?IC>;o$Z4N^ zcOW4G{U6E;Ao}`U%d^M|*mv0eyy^%dBp|G^!nD&~X$Npu%%DYR28ScYKNh1-GFNLq zchvW8A(}u2ha(0Z0QO2d^c~jZxnh?H*-0RvUPn#>0O}W<6+jfXlR^M!gToQSEkLKg lAx;AzLE26He;9D9{{SASb9hSVr!D{h002ovPDHLkV1j(lLv8>7 literal 0 HcmV?d00001 diff --git a/assets/ui/enemy.png b/assets/ui/enemy.png new file mode 100644 index 0000000000000000000000000000000000000000..baad6e4a22febb14de21119810996c04082e8450 GIT binary patch literal 7085 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 literal 0 HcmV?d00001 diff --git a/include/enemy.h b/include/enemy.h new file mode 100644 index 0000000..50b8d4c --- /dev/null +++ b/include/enemy.h @@ -0,0 +1,18 @@ +/* +** EPITECH PROJECT, 2020 +** my_rpg +** File description: +** enemy.h +*/ + + +#ifndef MY_RPG_ENEMY_H +#define MY_RPG_ENEMY_H + +struct enemy { + char *name; + char *prefab_src; + int spawn_rate; +}; + +#endif //MY_RPG_ENEMY_H diff --git a/include/setup.h b/include/setup.h index c13d581..3fac625 100644 --- a/include/setup.h +++ b/include/setup.h @@ -50,3 +50,5 @@ bool dialog_input2(gc_engine *engine, gc_entity *entity, gc_vector2 pos, \ enum gc_mousekeys key); bool dialog_input3(gc_engine *engine, gc_entity *entity, gc_vector2 pos, \ enum gc_mousekeys key); + +gc_data *enemies_dataloader(gc_engine *engine, gc_scene *scene, node *n); \ No newline at end of file diff --git a/lib/gamacon b/lib/gamacon index 077ce25..88fe62a 160000 --- a/lib/gamacon +++ b/lib/gamacon @@ -1 +1 @@ -Subproject commit 077ce25971e4fd7101f24bd5d5fe535bff2c43b1 +Subproject commit 88fe62af36bd665427f61d8c2ea24e45e472e88b diff --git a/prefabs/combat.gcprefab b/prefabs/combat.gcprefab index 81e5dfe..378e4ad 100644 --- a/prefabs/combat.gcprefab +++ b/prefabs/combat.gcprefab @@ -3,6 +3,10 @@ + + + + @@ -32,5 +36,8 @@ + + + \ No newline at end of file diff --git a/prefabs/enemies/bee.gcprefab b/prefabs/enemies/bee.gcprefab new file mode 100644 index 0000000..568bfcc --- /dev/null +++ b/prefabs/enemies/bee.gcprefab @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/prefabs/game.gcprefab b/prefabs/game.gcprefab index ef11cd1..9b80bf9 100644 --- a/prefabs/game.gcprefab +++ b/prefabs/game.gcprefab @@ -122,6 +122,10 @@ + + + + diff --git a/src/enemy_dataloader.c b/src/enemy_dataloader.c new file mode 100644 index 0000000..d40e2e1 --- /dev/null +++ b/src/enemy_dataloader.c @@ -0,0 +1,51 @@ +/* +** EPITECH PROJECT, 2020 +** my_rpg +** File description: +** enemies_dataloader.c +*/ + +#include "engine.h" +#include +#include +#include "enemy.h" + +static void free_enemy(gc_list *list) +{ + struct enemy *data; + + if (!list) + return; + free_enemy(list->next); + data = (struct enemy *)list->data; + free(data->name); + free(data->prefab_src); +} + +static void free_enemies(gc_data *data) +{ + free_enemy(data->custom); +} + +gc_data *enemies_dataloader(gc_engine *engine, gc_scene *scene, node *n) +{ + gc_data *data = malloc(sizeof(*data)); + struct enemy *enemy; + + if (!data) + return (NULL); + data->type = my_strdup("enemies"); + data->name = NULL; + data->destroy = &free_enemies; + data->custom = NULL; + for (n = n->child; n; n = n->next) { + enemy = malloc(sizeof(*enemy)); + if (!enemy) + return (NULL); + enemy->name = xml_getproperty(n, "name"); + enemy->prefab_src = xml_getproperty(n, "src"); + enemy->spawn_rate = xml_getintprop(n, "spawn_rate"); + LISTADD(data->custom, enemy); + } + return (data); +} \ No newline at end of file diff --git a/src/game_loader.c b/src/game_loader.c index 117afbb..8639bb1 100644 --- a/src/game_loader.c +++ b/src/game_loader.c @@ -77,6 +77,8 @@ int register_customcmps(gc_engine *engine, bool map_editor) engine->add_component(engine, &player_component); engine->add_system(engine, new_system(&combat_manager, engine)); engine->finish_physics(engine); + engine->add_dataloader(engine, "enemies", &enemies_dataloader); + for (int i = 0; callbacks[i].func; i++) engine->add_callback(engine, my_strdup(callbacks[i].name), \ callbacks[i].func); diff --git a/src/systems/combat_manager.c b/src/systems/combat_manager.c index f5793db..09dd8ce 100644 --- a/src/systems/combat_manager.c +++ b/src/systems/combat_manager.c @@ -9,22 +9,35 @@ #include #include #include +#include #include "engine.h" #include "my.h" #include "components/dialog_holder.h" +#include "enemy.h" -void combat_start(gc_engine *engine) +void combat_start(gc_engine *engine, char *enemy_name) { struct combat_manager *this = GETSYS(engine, combat_manager); + gc_list *li = engine->scene->get_data(engine->scene, "enemies", NULL); gc_scene *scene = scene_create(engine, "prefabs/combat.gcprefab"); + struct enemy *enemy = NULL; if (!scene) { my_printf("The combat scene couldn't be found.\n"); return; } this->game_scene = engine->scene; + engine->scene = NULL; engine->change_scene(engine, scene); dialog_next(engine); + for (; li; li = li->next) { + enemy = li->data; + if ((!enemy_name && random() % 100 < enemy->spawn_rate) + || (enemy_name && !my_strcmp(enemy_name, enemy->name))) + break; + } + if (enemy) + prefab_load(engine, enemy->prefab_src); } void entity_moved(gc_engine *engine, va_list args) @@ -36,9 +49,9 @@ void entity_moved(gc_engine *engine, va_list args) if (!cmp) return; if (tile->type && my_strcmp(tile->type, "combat")) - combat_start(engine); + combat_start(engine, NULL); if (random() % 100 < cmp->fight_rate) - combat_start(engine); + combat_start(engine, NULL); } @@ -58,6 +71,9 @@ static void ctr(void *system, va_list list) static void dtr(void *system, gc_engine *engine) { + struct combat_manager *sys = system; + if (sys->game_scene) + scene_destroy(sys->game_scene); } const struct combat_manager combat_manager = {