Lamthai/game/logic/combat.cpp

109 lines
2.9 KiB
C++

#include <iostream>
#include <vector>
#include "../define.h"
#include "utilities.h"
#include "player.h"
#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, const std::vector<int>& screen_arg) {
std::vector<Ennemy> ennemies;
ennemies.push_back(ennemies_arg[1]);
ennemies.push_back(ennemies_arg[2]);
inc_health(player_arg,-5);
display_combat_interface(player_arg, ennemies, screen_arg);
combat(player_arg, ennemies);
}
void combat(Player& player_arg, std::vector<Ennemy>& ennemies_arg) {
int arg;
bool combat_loop = 1;
while (combat_loop) {
inc_speed(player_arg, -1);
if (player_arg.speed == 0) {
player_turn(player_arg, ennemies_arg, combat_loop, arg);
check_deads(player_arg, ennemies_arg, combat_loop);
init_speed(player_arg);
}
for (Ennemy& ennemy: ennemies_arg) {
inc_speed(ennemy, -1);
if (ennemy.speed == 0) {
ennemy_turn(player_arg, ennemy);
check_deads(player_arg, ennemies_arg, combat_loop);
init_speed(ennemy);
}
}
}
}
void check_deads(Player& player_arg, std::vector<Ennemy>& ennemies_arg, bool& combat_loop) {
if (player_arg.health == 0) {
combat_loop = 0;
}
int i = 0;
for(Ennemy& ennemy: ennemies_arg) {
if (ennemy.health == 0) {
ennemies_arg.erase(ennemies_arg.begin() + i);
}
i++;
}
}
void player_turn(Player& player_arg, std::vector<Ennemy>& ennemies_arg, bool& combat_loop_arg, int& arg) {
display_combat_menu(player_arg, ennemies_arg);
std::cin >> arg;
select_combat_action(arg, player_arg, combat_loop_arg, ennemies_arg);
}
void select_combat_action(int arg, Player& player_arg, bool& combat_loop_arg, std::vector<Ennemy>& ennemies_arg) {
switch (arg){
case 1:
print_spell_book(player_arg.spell_book);
break;
case 2:
attack(player_arg, ennemies_arg);
break;
case 3:
if(escape(player_arg, ennemies_arg)) {
std::cout << "Escape succesfully" << std::endl;
combat_loop_arg = 0;
} else {
std::cout << "Escape not succesfully" << std::endl;
}
break;
default:
combat_loop_arg = 0;
break;
}
}
Spell choose_spell(const Ennemy& ennemy_arg) {
std::vector<int> spells(ennemy_arg.spells.size());
int i = random_choice(spells);
return ennemy_arg.spells[i];
}
void ennemy_turn(Player& player_arg, Ennemy& ennemy_arg) {
display_ennemi_turn(ennemy_arg);
Spell spell = choose_spell(ennemy_arg);
ennemy_use_spell(spell, player_arg, ennemy_arg);
}
void attack(Player& player_arg, std::vector<Ennemy>& ennemies_arg){
if(player_arg.job == MAGE) {
casting_spell(player_arg, ennemies_arg);
}
}
bool escape(const Player& player_arg, std::vector<Ennemy>& ennemies_arg) {
float min = 1;
for(Ennemy& ennemy: ennemies_arg) {
if(ennemy.menace < min) {
min = ennemy.menace;
}
}
return random_success(player_arg.escape * min);
}