update ennemies stats

This commit is contained in:
CaNaRdEoS 2025-07-16 18:31:15 +02:00
parent 4bdb661051
commit 5689b3b08a
13 changed files with 126 additions and 86 deletions

View File

@ -1,3 +1,4 @@
#include <raylib.h>
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<Spell> spells;
std::vector<Spell> 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> spell_book;
std::vector<Spell> 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;
};

View File

@ -4,18 +4,37 @@
#include <raylib.h>
#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<Ennemy>& ennemies_arg, const std::vector<float>& screen_arg) {
std::vector<std::vector<float>> generate_enemies_positions(int ennemies_size_arg) {
std::vector<std::vector<float>> 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<Ennemy>& ennemies_arg, const std::vector<float>& screen_arg, std::vector<Ennemy_stats>& ennemies_stats_arg) {
Ennemy ennemy = ennemies_arg[0];
std::vector<float> position = {0.5f, 0.5f};
Ennemy_stats first_ennemy_stats = create_ennemy_stats(ennemy, position, screen_arg);
std::vector<std::vector<float>> 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<Ennemy_stats>& ennemies_stats_arg, std::vector<Ennemy>& 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();
}

View File

@ -1,2 +1,4 @@
void display_combat_interface(Player& player_arg, std::vector<Ennemy>& ennemies_arg, const std::vector<float>& screen_arg);
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);

View File

@ -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<float>& position_arg, const Rectangle& container_arg) {
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 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<float>& 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) {

View File

@ -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<float>& position_arg, std::string text_arg, const std::vector<float>& screen_arg);
void draw_buttons(const std::vector<Button>& buttons_arg);
std::vector<float> button_size(Button_sizes size_arg, const std::vector<float>& screen_arg);
float text_size(Button_sizes size_arg);
Color type_color(Stats type_arg);
Bar create_bar(Stats type_arg, int& max_arg, int& actual_arg, const std::vector<float>& position_arg, const std::vector<float>& container_arg);
void draw_bar(const Bar& bar_arg);
Bar create_bar(Stats type_arg, float max_arg, float actual_arg, const std::vector<float>& position_arg, const std::vector<float>& container_arg);
void actualise_bar_progression(Bar& bar_arg, float actual_arg);
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(const Ennemy_stats& ennemy_stats_arg);
void draw_ennemy_stats(Ennemy_stats& ennemy_stats_arg, Ennemy& ennemy_arg);
void draw_text(const Text& text_arg);

View File

@ -10,21 +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> ennemies;
ennemies.push_back(ennemies_arg[1]);
ennemies.push_back(ennemies_arg[2]);
inc_health(player_arg,-5);
std::vector<Ennemy_stats> ennemies_stats;
display_combat_interface(player_arg, ennemies, screen_arg);
combat(player_arg, ennemies);
create_combat_interface(player_arg, ennemies_arg, screen_arg, ennemies_stats);
combat(player_arg, ennemies_arg, ennemies_stats);
}
void combat(Player& player_arg, std::vector<Ennemy>& ennemies_arg) {
void combat(Player& player_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);
player_turn(player_arg, ennemies_arg, combat_loop, arg);
check_deads(player_arg, ennemies_arg, combat_loop);
init_speed(player_arg);
@ -32,6 +31,8 @@ void combat(Player& player_arg, std::vector<Ennemy>& ennemies_arg) {
for (Ennemy& ennemy: ennemies_arg) {
inc_speed(ennemy, -1);
if (ennemy.speed == 0) {
display_combat_interface(player_arg, ennemies_stats_arg, ennemies_arg);
ennemy_turn(player_arg, ennemy);
check_deads(player_arg, ennemies_arg, combat_loop);
init_speed(ennemy);

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);
void combat(Player& player_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);

View File

@ -43,25 +43,25 @@ void create_ennemies(std::vector<Ennemy>& ennemies_arg) {
init_spells(all_spells);
Ennemy emplialin;
init_ennemy(emplialin, "Emplialin", 60, 40, 50, 20, 50, 0.8, 0.6, std::vector<Spell>{all_spells[0], all_spells[2], all_spells[4]});
init_ennemy(emplialin, "Emplialin", 60.0f, 40.0f, 50.0f, 20.0f, 50.0f, 0.8f, 0.6f, std::vector<Spell>{all_spells[0], all_spells[2], all_spells[4]});
ennemies_arg.push_back(emplialin);
Ennemy arzkalin;
init_ennemy(arzkalin, "Arzkalin", 60, 70, 60, 10, 100, 1.0, 0.5, std::vector<Spell>{all_spells[1], all_spells[3], all_spells[4]});
init_ennemy(arzkalin, "Arzkalin", 60.0f, 70.0f, 60.0f, 10.0f, 100.0f, 1.0f, 0.5f, std::vector<Spell>{all_spells[1], all_spells[3], all_spells[4]});
ennemies_arg.push_back(arzkalin);
Ennemy coindithai;
init_ennemy(coindithai, "Coindithaï", 32, 30, 15, 20, 10, 0.9, 0.8, std::vector<Spell>{all_spells[5]});
init_ennemy(coindithai, "Coindithaï", 32.0f, 30.0f, 15.0f, 20.0f, 10.0f, 0.9f, 0.8f, std::vector<Spell>{all_spells[5]});
ennemies_arg.push_back(coindithai);
}
void inc_health(Ennemy& ennemy_arg, int value_arg){
void inc_health(Ennemy& ennemy_arg, float value_arg){
ennemy_arg.health += value_arg;
}
void inc_shield(Ennemy& ennemy_arg, int value_arg){
void inc_shield(Ennemy& ennemy_arg, float value_arg){
ennemy_arg.shield += value_arg;
}
void inc_speed(Ennemy& ennemy_arg, int value_arg){
void inc_speed(Ennemy& ennemy_arg, float value_arg){
ennemy_arg.speed += value_arg;
}

View File

@ -18,8 +18,9 @@ void init_speed(Ennemy& ennemy_arg);
void init_stats(Ennemy& ennemy_arg);
void create_ennemies(std::vector<Ennemy>& ennemies_arg);
void inc_health(Ennemy& ennemy_arg, int value_arg);
void inc_shield(Ennemy& ennemy_arg, int value_arg);
void inc_speed(Ennemy& ennemy_arg, int value_arg);
void inc_health(Ennemy& ennemy_arg, float value_arg);
void inc_shield(Ennemy& ennemy_arg, float value_arg);
void inc_speed(Ennemy& ennemy_arg, float value_arg);
void print_ennemy(const Ennemy& ennemy_arg);
void print_ennemy(const Ennemy& ennemy_arg);
void display_ennemy(const Ennemy& ennemy_arg);

View File

@ -10,15 +10,15 @@ void init_default_mage(Player& player_arg) {
player_arg.name = "Liam le dieu";
player_arg.job = MAGE;
player_arg.xp = 0;
player_arg.max_health = 50;
player_arg.max_shield = 20;
player_arg.max_speed = 10;
player_arg.max_mana = 50;
player_arg.max_energy = 0;
player_arg.max_health = 50.0f;
player_arg.max_shield = 20.0f;
player_arg.max_speed = 10.0f;
player_arg.max_mana = 50.0f;
player_arg.max_energy = 0.0f;
init_stats(player_arg);
init_spells(player_arg.spell_book);
player_arg.escape = 1.0;
player_arg.menace = 0.7;
player_arg.escape = 1.0f;
player_arg.menace = 0.7f;
}
void init_speed(Player& player_arg) {
@ -33,19 +33,19 @@ void init_stats(Player& player_arg) {
player_arg.energy = player_arg.max_energy;
}
void inc_health(Player& player_arg, int value_arg){
void inc_health(Player& player_arg, float value_arg){
player_arg.health += value_arg;
}
void inc_shield(Player& player_arg, int value_arg){
void inc_shield(Player& player_arg, float value_arg){
player_arg.shield += value_arg;
}
void inc_speed(Player& player_arg, int value_arg){
void inc_speed(Player& player_arg, float value_arg){
player_arg.speed += value_arg;
}
void inc_mana(Player& player_arg, int value_arg){
void inc_mana(Player& player_arg, float value_arg){
player_arg.mana += value_arg;
}
void inc_energy(Player& player_arg, int value_arg){
void inc_energy(Player& player_arg, float value_arg){
player_arg.energy += value_arg;
}

View File

@ -4,11 +4,11 @@ void init_default_mage(Player& player_arg);
void init_speed(Player& player_arg);
void init_stats(Player& player_arg);
void inc_health(Player& player_arg, int value_arg);
void inc_shield(Player& player_arg, int value_arg);
void inc_speed(Player& player_arg, int value_arg);
void inc_mana(Player& player_arg, int value_arg);
void inc_energy(Player& player_arg, int value_arg);
void inc_health(Player& player_arg, float value_arg);
void inc_shield(Player& player_arg, float value_arg);
void inc_speed(Player& player_arg, float value_arg);
void inc_mana(Player& player_arg, float value_arg);
void inc_energy(Player& player_arg, float value_arg);
void level_up(Player& player_arg, int xp_arg);

View File

@ -29,7 +29,7 @@ void handle_menu(std::vector<Button>& buttons_arg, Player& player_arg, std::vect
int main() {
InitWindow(1200, 600, "Combat Lamthaï");
ToggleFullscreen();
//ToggleFullscreen();
std::vector<float> screen;
if(IsWindowFullscreen()) {
int monitor = GetCurrentMonitor();

Binary file not shown.