add combat_ui, bars

This commit is contained in:
CaNaRdEoS 2025-07-12 23:31:14 +02:00
parent d18afd18c0
commit b98d3731fa
14 changed files with 117 additions and 23 deletions

View File

@ -7,10 +7,10 @@ newrelease: release runrelease clear
play: runrelease clear
build:
g++ main.cpp logic/utilities.cpp logic/player.cpp logic/ennemy.cpp logic/spells.cpp interface/interfaces.cpp logic/combat.cpp interface/ui_elements.cpp -lraylib -o main
g++ main.cpp logic/utilities.cpp logic/player.cpp logic/ennemy.cpp logic/spells.cpp interface/interfaces.cpp logic/combat.cpp interface/ui_elements.cpp interface/combat_interface.cpp -lraylib -o main
release:
g++ main.cpp logic/utilities.cpp logic/player.cpp logic/ennemy.cpp logic/spells.cpp interface/interfaces.cpp logic/combat.cpp interface/ui_elements.cpp -lraylib -o release
g++ main.cpp logic/utilities.cpp logic/player.cpp logic/ennemy.cpp logic/spells.cpp interface/interfaces.cpp logic/combat.cpp interface/ui_elements.cpp interface/combat_interface.cpp -lraylib -o release
runrelease:
./release

View File

@ -14,6 +14,15 @@ constexpr const int WATER = 2;
constexpr const int EARTH = 3;
constexpr const int EATHER = 4;
//Stats
constexpr const int HEALTH = 0;
constexpr const int SHIELD = 1;
constexpr const int SPEED = 2;
constexpr const int MANA = 3;
constexpr const int ENERGY = 4;
constexpr const int TAME = 5;
constexpr const int XP = 6;
// Combinaisons
constexpr const int UP = 0;
constexpr const int RIGHT = 1;

View File

@ -0,0 +1,21 @@
#include <iostream>
#include <string>
#include <vector>
#include <raylib.h>
#include "../define.h"
#include "../logic/structs.h"
#include "../logic/player.h"
#include "ui_elements.h"
#include "combat_interface.h"
void display_combat_interface(Player& player_arg, std::vector<Ennemy>& ennemies_arg, const std::vector<int>& screen_arg) {
std::vector<float> position = {0.5f, 0.5f};
Bar player_health = create_bar(HEALTH, player_arg.max_health, player_arg.health, position, screen_arg);
inc_health(player_arg, -5);*
//Dessin
BeginDrawing();
ClearBackground(BLACK);
draw_bar(player_health);
EndDrawing();
}

View File

@ -0,0 +1,2 @@
void display_combat_interface(Player& player_arg, std::vector<Ennemy>& ennemies_arg, const std::vector<int>& screen_arg);

View File

@ -5,12 +5,6 @@
#include "../logic/ennemy.h"
#include "interfaces.h"
void display_menu() {
std::cout << "1. Search ennemies" << std::endl;
std::cout << "2. Quit" << std::endl;
std::cout << std::endl;
}
void display_combat_menu(const Player& player_arg, const std::vector<Ennemy>& ennemies_arg) {
std::cout << std::endl;
print_player(player_arg);

View File

@ -1,5 +1,3 @@
void display_menu();
void display_combat_menu(const Player& player_arg, const std::vector<Ennemy>& ennemies_arg);
void display_ennemi_turn(const Ennemy& ennemy_arg);
void display_ennemies(const std::vector<Ennemy>& ennemies_arg);

View File

@ -1,3 +1,4 @@
#include <iostream>
#include <string>
#include <vector>
#include <raylib.h>
@ -5,14 +6,14 @@
#include "../define.h"
#include "ui_elements.h"
Button create_button(int type_arg, int size_arg, const std::vector<float>& position_arg, const char *text_arg, const std::vector<int>& screen_arg) {
Button create_button(int type_arg, int size_arg, const std::vector<float>& position_arg, std::string text_arg, const std::vector<int>& screen_arg) {
std::vector<float> size = button_size(size_arg, screen_arg);
float position_x = screen_arg[0] * position_arg[0] - size[0] / 2;
float position_y = screen_arg[1] * position_arg[1] - size[1] / 2;
Font font = GetFontDefault();
float font_size = text_size(size_arg);
float text_x = screen_arg[0] * position_arg[0] - MeasureText(text_arg, font_size) / 2;
float text_x = screen_arg[0] * position_arg[0] - MeasureText(text_arg.c_str(), font_size) / 2;
float text_y = screen_arg[1] * position_arg[1] - font_size / 2;
Text text;
@ -51,7 +52,7 @@ Button create_button(int type_arg, int size_arg, const std::vector<float>& posit
void draw_buttons(const std::vector<Button>& buttons_arg) {
for(Button button: buttons_arg) {
DrawRectangleRec(button.rectangle, button.color);
DrawTextEx(button.text.font, button.text.text, button.text.position, button.text.fontSize, button.text.spacing, button.text.tint);
DrawTextEx(button.text.font, button.text.text.c_str(), button.text.position, button.text.fontSize, button.text.spacing, button.text.tint);
}
}
@ -91,4 +92,56 @@ float text_size(int size_arg) {
default:
return 15.0f;
}
}
Color type_color(int type_arg) {
switch(type_arg) {
case HEALTH:
return RED;
break;
case SHIELD:
return GRAY;
break;
case SPEED:
return BLUE;
break;
default:
return YELLOW;
break;
}
}
Bar create_bar(int type_arg, int& max_arg, int& actual_arg, const std::vector<float>& position_arg, const std::vector<int>& screen_arg) {
float width = 150.0f;
float height = 15.0f;
float position_x = screen_arg[0] * position_arg[0] - width / 2;
float position_y = screen_arg[1] * position_arg[1] - height / 2;
Rectangle complete = {position_x, position_y, width, height};
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 = 10.0f;
std::string value = std::to_string(actual_arg) + "/" + std::to_string(max_arg);
float text_x = screen_arg[0] * position_arg[0] - MeasureText(value.c_str(), font_size) / 2;
float text_y = screen_arg[1] * position_arg[1] - font_size / 2;
Text text = {font, value, Vector2{text_x, text_y}, font_size, 2.0f, YELLOW};
Color color = type_color(type_arg);
return Bar{complete, progression, max_arg, actual_arg, text, color};
}
void draw_bar(const Bar& bar_arg) {
DrawRectangleRec(bar_arg.complete, WHITE);
DrawRectangleRec(bar_arg.progression, bar_arg.color);
DrawTextEx(bar_arg.text.font, bar_arg.text.text.c_str(), bar_arg.text.position, bar_arg.text.fontSize, bar_arg.text.spacing, bar_arg.text.tint);
}
Ennemy_stats create_bar(const Ennemy& ennemy_arg, const std::vector<float>& position_arg, const std::vector<int>& screen_arg) {
return Ennemy_stats{};
}

View File

@ -1,7 +1,7 @@
struct Text {
Font font;
const char *text;
std:: string text;
Vector2 position;
float fontSize, spacing;
Color tint;
@ -13,9 +13,24 @@ struct Button {
Text text;
};
Button create_button(int type_arg, int size_arg, const std::vector<float>& position_arg, const char *text_arg, const std::vector<int>& screen_arg);
struct Bar {
Rectangle complete, progression;
int max, actual;
Text text;
Color color;
};
struct Ennemy_stats {
Text name, level;
Bar health, shield, speed, tame;
};
Button create_button(int type_arg, int size_arg, const std::vector<float>& position_arg, std::string text_arg, const std::vector<int>& screen_arg);
void draw_buttons(const std::vector<Button>& buttons_arg);
std::vector<float> button_size(int size_arg, const std::vector<int>& screen_arg);
float text_size(int size_arg);
float text_size(int size_arg);
Bar create_bar(int type_arg, int& max_arg, int& actual_arg, const std::vector<float>& position_arg, const std::vector<int>& screen_arg);
void draw_bar(const Bar& bar_arg);
Ennemy_stats create_bar(const Ennemy& ennemy_arg, const std::vector<float>& position_arg, const std::vector<int>& screen_arg);

View File

@ -6,13 +6,15 @@
#include "ennemy.h"
#include "spells.h"
#include "../interface/interfaces.h"
#include "../interface/combat_interface.h"
#include "combat.h"
void init_combat(Player& player_arg, std::vector<Ennemy> ennemies_arg) {
void init_combat(Player& player_arg, std::vector<Ennemy> ennemies_arg, const std::vector<int>& screen_arg) {
std::vector<Ennemy> ennemies;
ennemies.push_back(ennemies_arg[1]);
ennemies.push_back(ennemies_arg[2]);
display_combat_interface(player_arg, ennemies, screen_arg);
combat(player_arg, ennemies);
}

View File

@ -1,5 +1,5 @@
void init_combat(Player& player_arg, std::vector<Ennemy> ennemies_arg);
void init_combat(Player& player_arg, std::vector<Ennemy> ennemies_arg, const std::vector<int>& screen_arg);
void combat(Player& player_arg, std::vector<Ennemy>& ennemies_arg);
void check_deads(Player& player_arg, std::vector<Ennemy>& ennemies_arg, bool& combat_loop);

View File

@ -71,7 +71,7 @@ void print_ennemy(const Ennemy& ennemy_arg) {
std::cout << "Health: " << ennemy_arg.health << "/"<< ennemy_arg.max_health << std::endl;
std::cout << "Shield: " << ennemy_arg.shield << "/"<< ennemy_arg.max_shield << std::endl;
std::cout << "Speed: " << ennemy_arg.speed << "/"<< ennemy_arg.max_speed << std::endl;
std::cout << "Speed: " << ennemy_arg.tame << "/"<< ennemy_arg.max_tame << std::endl;
std::cout << "Tame: " << ennemy_arg.tame << "/"<< ennemy_arg.max_tame << std::endl;
std::cout << "Escape: " << ennemy_arg.escape * 100 << "%"<< std::endl;
std::cout << "Menace: " << ennemy_arg.menace * 100 << "%"<< std::endl;
std::cout << "Spells: ";

BIN
game/main Executable file

Binary file not shown.

View File

@ -10,11 +10,11 @@
#include "logic/combat.h"
#include "interface/ui_elements.h"
void handle_menu(std::vector<Button>& buttons_arg, Player& player_arg, std::vector<Ennemy>& ennemies_arg, bool& game_loop_arg) {
void handle_menu(std::vector<Button>& buttons_arg, Player& player_arg, std::vector<Ennemy>& ennemies_arg, bool& game_loop_arg, const std::vector<int>& screen_arg) {
if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) {
if (CheckCollisionPointRec(GetMousePosition(), buttons_arg[0].rectangle)) {
buttons_arg = {};
init_combat(player_arg, ennemies_arg);
init_combat(player_arg, ennemies_arg, screen_arg);
} else if (CheckCollisionPointRec(GetMousePosition(), buttons_arg[2].rectangle)) {
game_loop_arg = 0;
}
@ -48,7 +48,7 @@ int main() {
bool game_loop = 1;
while (game_loop && !WindowShouldClose()) {
// Gestion des actions
handle_menu(buttons, mage, ennemies, game_loop);
handle_menu(buttons, mage, ennemies, game_loop, screen);
//Dessin
BeginDrawing();

Binary file not shown.