update ennemies stats
This commit is contained in:
parent
4bdb661051
commit
5689b3b08a
|
@ -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;
|
||||
};
|
|
@ -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();
|
||||
}
|
|
@ -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);
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
BIN
game/release
BIN
game/release
Binary file not shown.
Loading…
Reference in New Issue