add player_stats

This commit is contained in:
CaNaRdEoS 2025-07-16 19:45:21 +02:00
parent 5689b3b08a
commit 64975b3180
8 changed files with 92 additions and 15 deletions

View File

@ -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;
};

View File

@ -21,7 +21,9 @@ std::vector<std::vector<float>> generate_enemies_positions(int ennemies_size_arg
return positions;
}
void create_combat_interface(Player& player_arg, std::vector<Ennemy>& ennemies_arg, const std::vector<float>& screen_arg, std::vector<Ennemy_stats>& ennemies_stats_arg) {
void create_combat_interface(Player& player_arg, std::vector<Ennemy>& ennemies_arg, const std::vector<float>& screen_arg, std::vector<Ennemy_stats>& 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<std::vector<float>> 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<Ennemy>& ennemies_a
}
}
void display_combat_interface(Player& player_arg, std::vector<Ennemy_stats>& ennemies_stats_arg, std::vector<Ennemy>& ennemies_arg) {
void display_combat_interface(Player& player_arg, Player_stats& player_stats_arg, std::vector<Ennemy>& ennemies_arg, std::vector<Ennemy_stats>& 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();
}

View File

@ -1,4 +1,4 @@
std::vector<std::vector<float>> generate_enemies_positions(int ennemies_size_arg);
void create_combat_interface(Player& player_arg, std::vector<Ennemy>& ennemies_arg, const std::vector<float>& screen_arg, std::vector<Ennemy_stats>& ennemies_stats_arg);
void display_combat_interface(Player& player_arg, std::vector<Ennemy_stats>& ennemies_stats_arg, std::vector<Ennemy>& ennemies_arg);
void create_combat_interface(Player& player_arg, std::vector<Ennemy>& ennemies_arg, const std::vector<float>& screen_arg, std::vector<Ennemy_stats>& ennemies_stats_arg, Player_stats& player_stats_arg);
void display_combat_interface(Player& player_arg, Player_stats& player_stats_arg, std::vector<Ennemy>& ennemies_arg, std::vector<Ennemy_stats>& ennemies_stats_arg);

View File

@ -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<float>& 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<float>& 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<float>& container_arg) {
std::vector<float> 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<std::string> 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<float> health_position = {0.5f, 0.36f};
std::vector<float> shield_position = {0.5f, 0.50f};
std::vector<float> speed_position = {0.5f, 0.64f};
std::vector<float> mana_position = {0.5f, 0.78f};
std::vector<float> 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);
}

View File

@ -12,4 +12,7 @@ void draw_bar(Bar& bar_arg, float actual_arg);
Ennemy_stats create_ennemy_stats(Ennemy& ennemy_arg, const std::vector<float>& position_arg, const std::vector<float>& 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<float>& container_arg);
void draw_player_stats(Player_stats& player_stats_arg, Player& player_arg);
void draw_text(const Text& text_arg);

View File

@ -10,19 +10,20 @@
#include "combat.h"
void init_combat(Player& player_arg, std::vector<Ennemy> ennemies_arg, const std::vector<float>& screen_arg) {
std::vector<Ennemy_stats> ennemies_stats;
std::vector<Ennemy_stats> 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<Ennemy>& ennemies_arg, std::vector<Ennemy_stats>& ennemies_stats_arg) {
void combat(Player& player_arg, Player_stats& player_stats_arg, std::vector<Ennemy>& ennemies_arg, std::vector<Ennemy_stats>& 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<Ennemy>& ennemies_arg, std::vector<E
for (Ennemy& ennemy: ennemies_arg) {
inc_speed(ennemy, -1);
if (ennemy.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);
ennemy_turn(player_arg, ennemy);
check_deads(player_arg, ennemies_arg, combat_loop);

View File

@ -1,6 +1,6 @@
void init_combat(Player& player_arg, std::vector<Ennemy> ennemies_arg, const std::vector<float>& screen_arg);
void combat(Player& player_arg, std::vector<Ennemy>& ennemies_arg, std::vector<Ennemy_stats>& ennemies_stats_arg);
void combat(Player& player_arg, Player_stats& player_stats_arg, std::vector<Ennemy>& ennemies_arg, std::vector<Ennemy_stats>& ennemies_stats_arg);
void check_deads(Player& player_arg, std::vector<Ennemy>& ennemies_arg, bool& combat_loop);

Binary file not shown.