diff --git a/CMakeLists.txt b/CMakeLists.txt index 3e167f9..8c8a0e9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -298,7 +298,7 @@ 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/player_utilities.c include/player_utilities.h src/systems/inventory.c include/systems/inventory.h) add_compile_options(-W -Wall -Wextra -Wshadow) diff --git a/assets/sprites/inventory/empty.png b/assets/sprites/inventory/empty.png new file mode 100644 index 0000000..b05dab3 Binary files /dev/null and b/assets/sprites/inventory/empty.png differ diff --git a/assets/sprites/inventory/fireball_upgrade.png b/assets/sprites/inventory/fireball_upgrade.png new file mode 100644 index 0000000..007d492 Binary files /dev/null and b/assets/sprites/inventory/fireball_upgrade.png differ diff --git a/assets/sprites/inventory/roguelikeitemsx3_1.png b/assets/sprites/inventory/roguelikeitemsx3_1.png new file mode 100644 index 0000000..62fc5fe Binary files /dev/null and b/assets/sprites/inventory/roguelikeitemsx3_1.png differ diff --git a/assets/sprites/inventory/shield_upgrade.png b/assets/sprites/inventory/shield_upgrade.png new file mode 100644 index 0000000..c336bff Binary files /dev/null and b/assets/sprites/inventory/shield_upgrade.png differ diff --git a/assets/sprites/inventory/uppercut_upgrade.png b/assets/sprites/inventory/uppercut_upgrade.png new file mode 100644 index 0000000..81d92f2 Binary files /dev/null and b/assets/sprites/inventory/uppercut_upgrade.png differ diff --git a/assets/sprites/inventory/water_jet_upgrade.png b/assets/sprites/inventory/water_jet_upgrade.png new file mode 100644 index 0000000..20151a4 Binary files /dev/null and b/assets/sprites/inventory/water_jet_upgrade.png differ diff --git a/include/components/game_display.h b/include/components/game_display.h index f5896f5..c913e9e 100644 --- a/include/components/game_display.h +++ b/include/components/game_display.h @@ -12,7 +12,11 @@ typedef enum display_type SELECT_TILE_DISPLAY, XP_DISPLAY, HEALTH_DISPLAY, - HEALTH_DISPLAY_ENNEMY + HEALTH_DISPLAY_ENNEMY, + INVENTORY_SLOT_1, + INVENTORY_SLOT_2, + INVENTORY_SLOT_3, + INVENTORY_SLOT_4 } display_type_enum; struct game_display diff --git a/include/systems/inventory.h b/include/systems/inventory.h new file mode 100644 index 0000000..a27b5b7 --- /dev/null +++ b/include/systems/inventory.h @@ -0,0 +1,17 @@ +/* +** EPITECH PROJECT, 2020 +** My3D +** File description: +** inventory +*/ + +#ifndef MY_RPG_INVENTORY_H +#define MY_RPG_INVENTORY_H + +#include "engine.h" +#include + +void display_inventory_object(gc_scene *scene, struct renderer *rend, int nb); +bool toggle_inventory(gc_engine *engine); + +#endif //MY_RPG_INVENTORY_H diff --git a/prefabs/game.gcprefab b/prefabs/game.gcprefab index db1e2f2..d8e3ab2 100644 --- a/prefabs/game.gcprefab +++ b/prefabs/game.gcprefab @@ -120,6 +120,13 @@ + + + + + + + diff --git a/prefabs/inventory.gcprefab b/prefabs/inventory.gcprefab index 8ca21db..f17feb6 100644 --- a/prefabs/inventory.gcprefab +++ b/prefabs/inventory.gcprefab @@ -2,16 +2,16 @@ - - - \ No newline at end of file diff --git a/src/components/game_display.c b/src/components/game_display.c index 6d6e873..fb35c77 100644 --- a/src/components/game_display.c +++ b/src/components/game_display.c @@ -41,6 +41,14 @@ static void fdctr(gc_entity *entity, gc_scene *scene, void *component, node *n) } if (!my_strcmp(display_type, "health")) { cmp->type = HEALTH_DISPLAY; rend->destroy = &text_safe_destroy; + } if (!my_strcmp(display_type, "inventory_1")) { + cmp->type = INVENTORY_SLOT_1; + }if (!my_strcmp(display_type, "inventory_2")) { + cmp->type = INVENTORY_SLOT_2; + }if (!my_strcmp(display_type, "inventory_3")) { + cmp->type = INVENTORY_SLOT_3; + }if (!my_strcmp(display_type, "inventory_4")) { + cmp->type = INVENTORY_SLOT_4; } } diff --git a/src/systems/game_display_system.c b/src/systems/game_display_system.c index 001ce12..dd93a82 100644 --- a/src/systems/game_display_system.c +++ b/src/systems/game_display_system.c @@ -17,6 +17,7 @@ #include #include "components/health_component.h" #include "sprite.h" +#include "systems/inventory.h" void display_current_texture(gc_scene *scene, struct renderer *rend) { @@ -77,6 +78,10 @@ float dtime) display_current_texture(scene, rend); return; } + if (disp->type >= INVENTORY_SLOT_1 && disp->type <= INVENTORY_SLOT_4 && rend->type == GC_TEXTUREREND) { + display_inventory_object(scene, rend, disp->type - INVENTORY_SLOT_1 + 1); + return; + } if (disp->type == XP_DISPLAY && rend->type == GC_TXTREND) { display_current_xp(scene, rend); return; diff --git a/src/systems/game_manager_system.c b/src/systems/game_manager_system.c index e6c9e58..ce28077 100644 --- a/src/systems/game_manager_system.c +++ b/src/systems/game_manager_system.c @@ -13,6 +13,7 @@ #include "system.h" #include "components/game_manager.h" #include "systems/game_manager_system.h" +#include "systems/inventory.h" bool toggle_pause(gc_engine *engine) { @@ -21,7 +22,7 @@ bool toggle_pause(gc_engine *engine) scene->is_paused = !scene->is_paused; if (scene->is_paused) { - prefab_load(engine, "prefabs/pause.gcprefab"); + prefab_load(engine,"prefabs/pause.gcprefab"); return (true); } list = scene->get_entity_by_cmp(scene, "tag_component"); @@ -32,24 +33,6 @@ bool toggle_pause(gc_engine *engine) return (true); } -bool toggle_inventory(gc_engine *engine) -{ - gc_scene *scene = engine->scene; - gc_list *list; - - scene->is_paused = !scene->is_paused; - if (scene->is_paused) { - prefab_load(engine, "prefabs/inventory.gcprefab"); - return (true); - } - list = scene->get_entity_by_cmp(scene, "tag_component"); - for (gc_list *li = list; li; li = li->next) { - if (!my_strcmp(GETCMP(li->data, tag_component)->tag, "inventory")) - ((gc_entity *)li->data)->destroy(li->data, scene); - } - return (true); -} - static void key_pressed(gc_engine *engine, va_list args) { gc_keybindings key = va_arg(args, gc_keybindings); diff --git a/src/systems/inventory.c b/src/systems/inventory.c new file mode 100644 index 0000000..45eac35 --- /dev/null +++ b/src/systems/inventory.c @@ -0,0 +1,40 @@ +/* +** EPITECH PROJECT, 2020 +** My3D +** File description: +** inventory +*/ + +#include "list.h" +#include "scene.h" +#include "sprite.h" +#include "prefab.h" +#include "components/renderer.h" +#include "components/tag_component.h" +#include "my.h" + +void display_inventory_object(gc_scene *scene, struct renderer *rend, int nb) +{ + char *textures[5] = {"empty_slot", "slot_1", "slot_2", "slot_3", "slot_4"}; + if (false) + nb = 0; + ((gc_sprite *)rend->data)->texture = scene->get_data(scene, "sprite", textures[nb]); +} + +bool toggle_inventory(gc_engine *engine) +{ + gc_scene *scene = engine->scene; + gc_list *list; + + scene->is_paused = !scene->is_paused; + if (scene->is_paused) { + prefab_load(engine, "prefabs/inventory.gcprefab"); + return (true); + } + list = scene->get_entity_by_cmp(scene, "tag_component"); + for (gc_list *li = list; li; li = li->next) { + if (!my_strcmp(GETCMP(li->data, tag_component)->tag, "inventory")) + ((gc_entity *)li->data)->destroy(li->data, scene); + } + return (true); +} \ No newline at end of file