diff --git a/game/define.h b/game/define.h index 56f7717..41f4257 100644 --- a/game/define.h +++ b/game/define.h @@ -108,4 +108,10 @@ struct Ennemy_stats { Rectangle card; Text name, level; Bar health, shield, speed, tame; +}; + +struct Player_stats { + Rectangle card; + Text name, level, job; + Bar health, shield, speed, mana, energy; }; \ No newline at end of file diff --git a/game/interface/combat_interface.cpp b/game/interface/combat_interface.cpp index 0e6911a..feeb555 100644 --- a/game/interface/combat_interface.cpp +++ b/game/interface/combat_interface.cpp @@ -21,7 +21,9 @@ std::vector> generate_enemies_positions(int ennemies_size_arg return positions; } -void create_combat_interface(Player& player_arg, std::vector& ennemies_arg, const std::vector& screen_arg, std::vector& ennemies_stats_arg) { +void create_combat_interface(Player& player_arg, std::vector& ennemies_arg, const std::vector& screen_arg, std::vector& ennemies_stats_arg, Player_stats& player_stats_arg) { + player_stats_arg = create_player_stats(player_arg, screen_arg); + Ennemy ennemy = ennemies_arg[0]; std::vector> positions = generate_enemies_positions(ennemies_arg.size()); for (int i = 0; i < ennemies_arg.size(); i++) { @@ -29,12 +31,13 @@ void create_combat_interface(Player& player_arg, std::vector& ennemies_a } } -void display_combat_interface(Player& player_arg, std::vector& ennemies_stats_arg, std::vector& ennemies_arg) { +void display_combat_interface(Player& player_arg, Player_stats& player_stats_arg, std::vector& ennemies_arg, std::vector& ennemies_stats_arg) { //Dessin BeginDrawing(); ClearBackground(BLACK); for (int i = 0; i < ennemies_arg.size(); i++) { draw_ennemy_stats(ennemies_stats_arg[i], ennemies_arg[i]); } + draw_player_stats(player_stats_arg, player_arg); EndDrawing(); } \ No newline at end of file diff --git a/game/interface/combat_interface.h b/game/interface/combat_interface.h index 463f852..75473b2 100644 --- a/game/interface/combat_interface.h +++ b/game/interface/combat_interface.h @@ -1,4 +1,4 @@ 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 +void create_combat_interface(Player& player_arg, std::vector& ennemies_arg, const std::vector& screen_arg, std::vector& ennemies_stats_arg, Player_stats& player_stats_arg); +void display_combat_interface(Player& player_arg, Player_stats& player_stats_arg, std::vector& ennemies_arg, std::vector& ennemies_stats_arg); \ No newline at end of file diff --git a/game/interface/ui_elements.cpp b/game/interface/ui_elements.cpp index fdf1dd2..1babc2c 100644 --- a/game/interface/ui_elements.cpp +++ b/game/interface/ui_elements.cpp @@ -107,15 +107,27 @@ Color type_color(Stats type_arg) { return BLUE; break; - default: + case MANA: + return GREEN; + break; + + case ENERGY: return YELLOW; break; + + case TAME: + return MAROON; + break; + + default: + return BLACK; + break; } } 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 height = container_arg.width * 0.12f; 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}; @@ -125,7 +137,7 @@ Bar create_bar(Stats type_arg, float max_arg, float actual_arg, const std::vecto Rectangle progression = {position_x+1, position_y+1, progression_width, progression_heigth}; Font font = GetFontDefault(); - float font_size = container_arg.height * 0.12f; + float font_size = height - 4.0f; 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; @@ -183,7 +195,7 @@ Ennemy_stats create_ennemy_stats(Ennemy& ennemy_arg, const std::vector& p } void draw_ennemy_stats(Ennemy_stats& ennemy_stats_arg, Ennemy& ennemy_arg) { - DrawRectangleRec(ennemy_stats_arg.card, BLUE); + DrawRectangleRec(ennemy_stats_arg.card, PURPLE); draw_text(ennemy_stats_arg.name); draw_text(ennemy_stats_arg.level); draw_bar(ennemy_stats_arg.health, ennemy_arg.health); @@ -192,6 +204,58 @@ void draw_ennemy_stats(Ennemy_stats& ennemy_stats_arg, Ennemy& ennemy_arg) { draw_bar(ennemy_stats_arg.tame, ennemy_arg.tame); } +Player_stats create_player_stats(Player& player_arg, const std::vector& container_arg) { + std::vector size = {container_arg[0] * 0.1f, container_arg[1] * 0.2f}; + float position_x = container_arg[0] * 0.25 - size[0] / 2; + float position_y = container_arg[1] * 0.25 - size[1] / 2; + Rectangle card = {position_x, position_y, size[0], size[1]}; + + Font font = GetFontDefault(); + float font_size = 15.0f; + std::string value = player_arg.name; + float text_x = size[0] * 0.5f + position_x - MeasureText(value.c_str(), font_size) / 2; + float text_y = size[1] * 0.1f + position_y - font_size / 2; + Vector2 text_position = {text_x, text_y}; + Text name = {font, value, text_position, font_size, 2.0f, YELLOW}; + + text_position.x += MeasureText(value.c_str(), font_size) + value.size() * 2; + value = std::to_string(player_arg.xp); + Text level = {font, value, text_position, font_size, 2.0f, YELLOW}; + + std::vector jobs = {"Mage", "Alchimist", "Warrior", "Engineer", "Archer", "Tamer"}; + + value = jobs[player_arg.job]; + text_position.x = size[0] * 0.5f + position_x - MeasureText(value.c_str(), font_size) / 2; + text_position.y = size[1] * 0.225f + position_y - font_size / 2; + Text job = {font, value, text_position, font_size, 2.0f, YELLOW}; + + std::vector health_position = {0.5f, 0.36f}; + std::vector shield_position = {0.5f, 0.50f}; + std::vector speed_position = {0.5f, 0.64f}; + std::vector mana_position = {0.5f, 0.78f}; + std::vector energy_position = {0.5f, 0.92f}; + + Bar health = create_bar(HEALTH, player_arg.max_health, player_arg.health, health_position, card); + Bar shield = create_bar(SHIELD, player_arg.max_shield, player_arg.shield, shield_position, card); + Bar speed = create_bar(SPEED, player_arg.max_speed, player_arg.speed, speed_position, card); + Bar mana = create_bar(MANA, player_arg.max_mana, player_arg.mana, mana_position, card); + Bar energy = create_bar(ENERGY, player_arg.max_energy, player_arg.energy, energy_position, card); + + return Player_stats {card, name, level, job, health, shield, speed, mana, energy}; +} + +void draw_player_stats(Player_stats& player_stats_arg, Player& player_arg) { + DrawRectangleRec(player_stats_arg.card, BLUE); + draw_text(player_stats_arg.name); + draw_text(player_stats_arg.level); + draw_text(player_stats_arg.job); + draw_bar(player_stats_arg.health, player_arg.health); + draw_bar(player_stats_arg.shield, player_arg.shield); + draw_bar(player_stats_arg.speed, player_arg.speed); + draw_bar(player_stats_arg.mana, player_arg.mana); + draw_bar(player_stats_arg.energy, player_arg.energy); +} + void draw_text(const Text& text_arg) { DrawTextEx(text_arg.font, text_arg.text.c_str(), text_arg.position, text_arg.fontSize, text_arg.spacing, text_arg.tint); } \ No newline at end of file diff --git a/game/interface/ui_elements.h b/game/interface/ui_elements.h index bcd64d4..0bf0c1f 100644 --- a/game/interface/ui_elements.h +++ b/game/interface/ui_elements.h @@ -12,4 +12,7 @@ void draw_bar(Bar& bar_arg, float actual_arg); Ennemy_stats create_ennemy_stats(Ennemy& ennemy_arg, const std::vector& position_arg, const std::vector& container_arg); void draw_ennemy_stats(Ennemy_stats& ennemy_stats_arg, Ennemy& ennemy_arg); +Player_stats create_player_stats(Player& player_arg, const std::vector& container_arg); +void draw_player_stats(Player_stats& player_stats_arg, Player& player_arg); + void draw_text(const Text& text_arg); \ No newline at end of file diff --git a/game/logic/combat.cpp b/game/logic/combat.cpp index 874cba0..cdd6c78 100644 --- a/game/logic/combat.cpp +++ b/game/logic/combat.cpp @@ -10,19 +10,20 @@ #include "combat.h" void init_combat(Player& player_arg, std::vector ennemies_arg, const std::vector& screen_arg) { - std::vector ennemies_stats; + std::vector ennemies_stats; + Player_stats player_stats; - create_combat_interface(player_arg, ennemies_arg, screen_arg, ennemies_stats); - combat(player_arg, ennemies_arg, ennemies_stats); + create_combat_interface(player_arg, ennemies_arg, screen_arg, ennemies_stats, player_stats); + combat(player_arg, player_stats, ennemies_arg, ennemies_stats); } -void combat(Player& player_arg, std::vector& ennemies_arg, std::vector& ennemies_stats_arg) { +void combat(Player& player_arg, Player_stats& player_stats_arg, std::vector& ennemies_arg, std::vector& ennemies_stats_arg) { int arg; bool combat_loop = 1; while (combat_loop) { inc_speed(player_arg, -1); if (player_arg.speed == 0) { - display_combat_interface(player_arg, ennemies_stats_arg, ennemies_arg); + display_combat_interface(player_arg, player_stats_arg, ennemies_arg, ennemies_stats_arg); player_turn(player_arg, ennemies_arg, combat_loop, arg); check_deads(player_arg, ennemies_arg, combat_loop); @@ -31,7 +32,7 @@ void combat(Player& player_arg, std::vector& ennemies_arg, std::vector ennemies_arg, const std::vector& screen_arg); -void combat(Player& player_arg, std::vector& ennemies_arg, std::vector& ennemies_stats_arg); +void combat(Player& player_arg, Player_stats& player_stats_arg, std::vector& ennemies_arg, std::vector& ennemies_stats_arg); void check_deads(Player& player_arg, std::vector& ennemies_arg, bool& combat_loop); diff --git a/game/release b/game/release index 3e5826c..ca7025d 100755 Binary files a/game/release and b/game/release differ