From 5689b3b08a34f6971038f24236a34e73707f6177 Mon Sep 17 00:00:00 2001 From: CaNaRdEoS Date: Wed, 16 Jul 2025 18:31:15 +0200 Subject: [PATCH] update ennemies stats --- game/define.h | 46 ++++++++++++++++++++++++---- game/interface/combat_interface.cpp | 27 +++++++++++++--- game/interface/combat_interface.h | 4 ++- game/interface/ui_elements.cpp | 27 ++++++++++------ game/interface/ui_elements.h | 34 +++----------------- game/logic/combat.cpp | 15 ++++----- game/logic/combat.h | 2 +- game/logic/ennemy.cpp | 12 ++++---- game/logic/ennemy.h | 9 +++--- game/logic/player.cpp | 24 +++++++-------- game/logic/player.h | 10 +++--- game/main.cpp | 2 +- game/release | Bin 238440 -> 267216 bytes 13 files changed, 126 insertions(+), 86 deletions(-) diff --git a/game/define.h b/game/define.h index d384ba4..56f7717 100644 --- a/game/define.h +++ b/game/define.h @@ -1,3 +1,4 @@ +#include enum Jobs { MAGE = 0, @@ -60,18 +61,51 @@ struct Spell { struct Ennemy { std::string name; int xp; - int health, shield, speed, tame; - int max_health, max_shield, max_speed, max_tame; + float health, shield, speed, tame; + float max_health, max_shield, max_speed, max_tame; float escape, menace; //Menace comlpexifies the escape, the higher the value is, the less menace it is - std::vector spells; + std::vector spells; // A FAIRE : stocke l'index parmis tous les spells }; struct Player { std::string name; Jobs job; int xp; - int health, shield, speed, mana, energy; - int max_health, max_shield, max_speed, max_mana, max_energy; + float health, shield, speed, mana, energy; + float max_health, max_shield, max_speed, max_mana, max_energy; float escape, menace; - std::vector spell_book; + std::vector spell_book; // A FAIRE : stocke l'index parmis tous les spells +}; + + + + +//Graphics + +struct Text { + Font font; + std:: string text; + Vector2 position; + float fontSize, spacing; + Color tint; +}; + +struct Button { + Rectangle rectangle; + Color color; + Text text; +}; + +struct Bar { + Rectangle complete, progression; + float max; + float actual; + Text text; + Color color; +}; + +struct Ennemy_stats { + Rectangle card; + Text name, level; + Bar health, shield, speed, tame; }; \ No newline at end of file diff --git a/game/interface/combat_interface.cpp b/game/interface/combat_interface.cpp index f98701c..0e6911a 100644 --- a/game/interface/combat_interface.cpp +++ b/game/interface/combat_interface.cpp @@ -4,18 +4,37 @@ #include #include "../define.h" #include "../logic/player.h" +#include "../logic/ennemy.h" #include "ui_elements.h" #include "combat_interface.h" -void display_combat_interface(Player& player_arg, std::vector& ennemies_arg, const std::vector& screen_arg) { +std::vector> generate_enemies_positions(int ennemies_size_arg) { + std::vector> positions; + float spacing = 0.5f / ennemies_size_arg; + for (int i = 0; i < ennemies_size_arg; i++) { + if (i%2 == 0) { + positions.push_back({0.5f + spacing * i, 0.5f}); + } else { + positions.push_back({0.5f + spacing * i, 0.25f}); + } + } + return positions; +} +void create_combat_interface(Player& player_arg, std::vector& ennemies_arg, const std::vector& screen_arg, std::vector& ennemies_stats_arg) { Ennemy ennemy = ennemies_arg[0]; - std::vector position = {0.5f, 0.5f}; - Ennemy_stats first_ennemy_stats = create_ennemy_stats(ennemy, position, screen_arg); + std::vector> positions = generate_enemies_positions(ennemies_arg.size()); + for (int i = 0; i < ennemies_arg.size(); i++) { + ennemies_stats_arg.push_back(create_ennemy_stats(ennemies_arg[i], positions[i], screen_arg)); + } +} +void display_combat_interface(Player& player_arg, std::vector& ennemies_stats_arg, std::vector& ennemies_arg) { //Dessin BeginDrawing(); ClearBackground(BLACK); - draw_ennemy_stats(first_ennemy_stats); + for (int i = 0; i < ennemies_arg.size(); i++) { + draw_ennemy_stats(ennemies_stats_arg[i], ennemies_arg[i]); + } EndDrawing(); } \ No newline at end of file diff --git a/game/interface/combat_interface.h b/game/interface/combat_interface.h index a04ac9a..463f852 100644 --- a/game/interface/combat_interface.h +++ b/game/interface/combat_interface.h @@ -1,2 +1,4 @@ -void display_combat_interface(Player& player_arg, std::vector& ennemies_arg, const std::vector& screen_arg); \ No newline at end of file +std::vector> generate_enemies_positions(int ennemies_size_arg); +void create_combat_interface(Player& player_arg, std::vector& ennemies_arg, const std::vector& screen_arg, std::vector& ennemies_stats_arg); +void display_combat_interface(Player& player_arg, std::vector& ennemies_stats_arg, std::vector& ennemies_arg); \ No newline at end of file diff --git a/game/interface/ui_elements.cpp b/game/interface/ui_elements.cpp index 00dd3c9..fdf1dd2 100644 --- a/game/interface/ui_elements.cpp +++ b/game/interface/ui_elements.cpp @@ -113,20 +113,20 @@ Color type_color(Stats type_arg) { } } -Bar create_bar(Stats type_arg, int& max_arg, int& actual_arg, const std::vector& position_arg, const Rectangle& container_arg) { +Bar create_bar(Stats type_arg, float max_arg, float actual_arg, const std::vector& position_arg, const Rectangle& container_arg) { float width = container_arg.width * 0.9f; float height = container_arg.height * 0.15f; float position_x = container_arg.width * position_arg[0] + container_arg.x - width / 2; float position_y = container_arg.height * position_arg[1] + container_arg.y - height / 2; Rectangle complete = {position_x, position_y, width, height}; - float progression_width = (width - 2.0f) * ((float)actual_arg / max_arg); + float progression_width = (width - 2.0f) * (actual_arg / max_arg); float progression_heigth = height - 2.0f; Rectangle progression = {position_x+1, position_y+1, progression_width, progression_heigth}; Font font = GetFontDefault(); float font_size = container_arg.height * 0.12f; - std::string value = std::to_string(actual_arg) + "/" + std::to_string(max_arg); + std::string value = std::to_string((int)actual_arg) + "/" + std::to_string((int)max_arg); float text_x = container_arg.width * position_arg[0] + container_arg.x - MeasureText(value.c_str(), font_size) / 2; float text_y = container_arg.height * position_arg[1] + container_arg.y - font_size / 2; Text text = {font, value, Vector2{text_x, text_y}, font_size, 2.0f, WHITE}; @@ -135,7 +135,16 @@ Bar create_bar(Stats type_arg, int& max_arg, int& actual_arg, const std::vector< return Bar{complete, progression, max_arg, actual_arg, text, color}; } -void draw_bar(const Bar& bar_arg) { +void actualise_bar_progression(Bar& bar_arg, float actual_arg) { + if(bar_arg.actual != actual_arg) { + bar_arg.actual = actual_arg; + bar_arg.progression.width = (bar_arg.complete.width - 2.0f) * (bar_arg.actual / bar_arg.max); + bar_arg.text.text = std::to_string((int)bar_arg.actual) + "/" + std::to_string((int)bar_arg.max); + } +} + +void draw_bar(Bar& bar_arg, float actual_arg) { + actualise_bar_progression(bar_arg, actual_arg); DrawRectangleRec(bar_arg.complete, WHITE); DrawRectangleRec(bar_arg.progression, bar_arg.color); draw_text(bar_arg.text); @@ -173,14 +182,14 @@ Ennemy_stats create_ennemy_stats(Ennemy& ennemy_arg, const std::vector& p return Ennemy_stats{card, name, level, health, shield, speed, tame}; } -void draw_ennemy_stats(const Ennemy_stats& ennemy_stats_arg) { +void draw_ennemy_stats(Ennemy_stats& ennemy_stats_arg, Ennemy& ennemy_arg) { DrawRectangleRec(ennemy_stats_arg.card, BLUE); draw_text(ennemy_stats_arg.name); draw_text(ennemy_stats_arg.level); - draw_bar(ennemy_stats_arg.health); - draw_bar(ennemy_stats_arg.shield); - draw_bar(ennemy_stats_arg.speed); - draw_bar(ennemy_stats_arg.tame); + draw_bar(ennemy_stats_arg.health, ennemy_arg.health); + draw_bar(ennemy_stats_arg.shield, ennemy_arg.shield); + draw_bar(ennemy_stats_arg.speed, ennemy_arg.speed); + draw_bar(ennemy_stats_arg.tame, ennemy_arg.tame); } void draw_text(const Text& text_arg) { diff --git a/game/interface/ui_elements.h b/game/interface/ui_elements.h index 1ef41da..bcd64d4 100644 --- a/game/interface/ui_elements.h +++ b/game/interface/ui_elements.h @@ -1,41 +1,15 @@ -struct Text { - Font font; - std:: string text; - Vector2 position; - float fontSize, spacing; - Color tint; -}; - -struct Button { - Rectangle rectangle; - Color color; - Text text; -}; - -struct Bar { - Rectangle complete, progression; - int max, actual; - Text text; - Color color; -}; - -struct Ennemy_stats { - Rectangle card; - Text name, level; - Bar health, shield, speed, tame; -}; - Button create_button(Button_types type_arg, Button_sizes size_arg, const std::vector& position_arg, std::string text_arg, const std::vector& screen_arg); void draw_buttons(const std::vector