add keybindings
This commit is contained in:
parent
64975b3180
commit
643514e600
|
@ -9,23 +9,38 @@
|
||||||
#include "../interface/combat_interface.h"
|
#include "../interface/combat_interface.h"
|
||||||
#include "combat.h"
|
#include "combat.h"
|
||||||
|
|
||||||
|
const int BUTTON_BOOK_SPELL = KEY_B;
|
||||||
|
const int BUTTON_CAST_SPELL = KEY_C;
|
||||||
|
const int BUTTON_INVENTORY = KEY_I;
|
||||||
|
const int BUTTON_ESCAPE = KEY_E;
|
||||||
|
|
||||||
|
const int BUTTON_UP = KEY_UP;
|
||||||
|
const int BUTTON_DOWN = KEY_DOWN;
|
||||||
|
const int BUTTON_RIGHT = KEY_RIGHT;
|
||||||
|
const int BUTTON_LEFT = KEY_LEFT;
|
||||||
|
const int BUTTON_CONFIRM_SPELL = KEY_ENTER;
|
||||||
|
|
||||||
|
const int BUTTON_FIRST_ENNEMI = KEY_KP_1;
|
||||||
|
const int BUTTON_SECOND_ENNEMI = KEY_KP_2;
|
||||||
|
const int BUTTON_THIRD_ENNEMI = KEY_KP_3;
|
||||||
|
const int BUTTON_FOURTH_ENNEMI = KEY_KP_4;
|
||||||
|
|
||||||
void init_combat(Player& player_arg, std::vector<Ennemy> ennemies_arg, const std::vector<float>& screen_arg) {
|
void init_combat(Player& player_arg, std::vector<Ennemy> ennemies_arg, const std::vector<float>& screen_arg) {
|
||||||
|
std::vector<Ennemy> combat_ennemies;
|
||||||
|
combat_ennemies.push_back(ennemies_arg[0]);
|
||||||
std::vector<Ennemy_stats> ennemies_stats;
|
std::vector<Ennemy_stats> ennemies_stats;
|
||||||
Player_stats player_stats;
|
Player_stats player_stats;
|
||||||
|
|
||||||
create_combat_interface(player_arg, ennemies_arg, screen_arg, ennemies_stats, player_stats);
|
create_combat_interface(player_arg, combat_ennemies, screen_arg, ennemies_stats, player_stats);
|
||||||
combat(player_arg, player_stats, ennemies_arg, ennemies_stats);
|
combat(player_arg, player_stats, combat_ennemies, ennemies_stats);
|
||||||
}
|
}
|
||||||
|
|
||||||
void combat(Player& player_arg, Player_stats& player_stats_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;
|
bool combat_loop = 1;
|
||||||
while (combat_loop) {
|
while (combat_loop) {
|
||||||
inc_speed(player_arg, -1);
|
inc_speed(player_arg, -1);
|
||||||
if (player_arg.speed == 0) {
|
if (player_arg.speed == 0) {
|
||||||
display_combat_interface(player_arg, player_stats_arg, ennemies_arg, ennemies_stats_arg);
|
player_turn(player_arg, player_stats_arg, ennemies_arg, ennemies_stats_arg, combat_loop);
|
||||||
|
|
||||||
player_turn(player_arg, ennemies_arg, combat_loop, arg);
|
|
||||||
check_deads(player_arg, ennemies_arg, combat_loop);
|
check_deads(player_arg, ennemies_arg, combat_loop);
|
||||||
init_speed(player_arg);
|
init_speed(player_arg);
|
||||||
}
|
}
|
||||||
|
@ -43,45 +58,113 @@ void combat(Player& player_arg, Player_stats& player_stats_arg, std::vector<Enne
|
||||||
}
|
}
|
||||||
void check_deads(Player& player_arg, std::vector<Ennemy>& ennemies_arg, bool& combat_loop) {
|
void check_deads(Player& player_arg, std::vector<Ennemy>& ennemies_arg, bool& combat_loop) {
|
||||||
if (player_arg.health == 0) {
|
if (player_arg.health == 0) {
|
||||||
|
std::cout << "You are dead" << std::endl;
|
||||||
combat_loop = 0;
|
combat_loop = 0;
|
||||||
}
|
}
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for(Ennemy& ennemy: ennemies_arg) {
|
for(Ennemy& ennemy: ennemies_arg) {
|
||||||
if (ennemy.health == 0) {
|
if (ennemy.health == 0) {
|
||||||
|
std::cout << ennemy.name << " is dead" << std::endl;
|
||||||
ennemies_arg.erase(ennemies_arg.begin() + i);
|
ennemies_arg.erase(ennemies_arg.begin() + i);
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
if (ennemies_arg.empty()) {
|
||||||
|
std::cout << "You won" << std::endl;
|
||||||
|
combat_loop = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void player_turn(Player& player_arg, std::vector<Ennemy>& ennemies_arg, bool& combat_loop_arg, int& arg) {
|
void player_turn(Player& player_arg, Player_stats& player_stats_arg, std::vector<Ennemy>& ennemies_arg, std::vector<Ennemy_stats>& ennemies_stats_arg, bool& combat_loop_arg) {
|
||||||
display_combat_menu(player_arg, ennemies_arg);
|
bool take_action = 1;
|
||||||
std::cin >> arg;
|
while (take_action) {
|
||||||
select_combat_action(arg, player_arg, combat_loop_arg, ennemies_arg);
|
display_combat_interface(player_arg, player_stats_arg, ennemies_arg, ennemies_stats_arg);
|
||||||
}
|
if(IsKeyPressed(BUTTON_BOOK_SPELL)) {
|
||||||
|
|
||||||
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);
|
print_spell_book(player_arg.spell_book);
|
||||||
break;
|
take_action = 0;
|
||||||
case 2:
|
} else if (IsKeyPressed(BUTTON_CAST_SPELL)) {
|
||||||
attack(player_arg, ennemies_arg);
|
attack(player_arg, player_stats_arg, ennemies_arg, ennemies_stats_arg);
|
||||||
break;
|
take_action = 0;
|
||||||
case 3:
|
} else if (IsKeyPressed(BUTTON_INVENTORY)) {
|
||||||
|
take_action = 0;
|
||||||
|
} else if (IsKeyPressed(BUTTON_ESCAPE)) {
|
||||||
if(escape(player_arg, ennemies_arg)) {
|
if(escape(player_arg, ennemies_arg)) {
|
||||||
std::cout << "Escape succesfully" << std::endl;
|
std::cout << "Escape succesfully" << std::endl;
|
||||||
combat_loop_arg = 0;
|
combat_loop_arg = 0;
|
||||||
} else {
|
} else {
|
||||||
std::cout << "Escape not succesfully" << std::endl;
|
std::cout << "Escape not succesfully" << std::endl;
|
||||||
}
|
}
|
||||||
break;
|
take_action = 0;
|
||||||
default:
|
}
|
||||||
combat_loop_arg = 0;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void casting_spell(Player& player_arg, Player_stats& player_stats_arg, std::vector<Ennemy>& ennemies_arg, std::vector<Ennemy_stats>& ennemies_stats_arg) {
|
||||||
|
std::vector<int> spell;
|
||||||
|
int spell_segment;
|
||||||
|
bool is_casting_spell = 1;
|
||||||
|
while(is_casting_spell) {
|
||||||
|
display_combat_interface(player_arg, player_stats_arg, ennemies_arg, ennemies_stats_arg);
|
||||||
|
if (IsKeyPressed(BUTTON_UP)) {
|
||||||
|
if (cast_spell(player_arg, player_stats_arg, spell, UP, ennemies_arg, ennemies_stats_arg)) {
|
||||||
|
is_casting_spell = 0;
|
||||||
|
}
|
||||||
|
} else if (IsKeyPressed(BUTTON_DOWN)) {
|
||||||
|
if (cast_spell(player_arg, player_stats_arg, spell, DOWN, ennemies_arg, ennemies_stats_arg)) {
|
||||||
|
is_casting_spell = 0;
|
||||||
|
}
|
||||||
|
} else if (IsKeyPressed(BUTTON_RIGHT)) {
|
||||||
|
if (cast_spell(player_arg, player_stats_arg, spell, RIGHT, ennemies_arg, ennemies_stats_arg)) {
|
||||||
|
is_casting_spell = 0;
|
||||||
|
}
|
||||||
|
} else if (IsKeyPressed(BUTTON_LEFT)) {
|
||||||
|
if (cast_spell(player_arg, player_stats_arg, spell, LEFT, ennemies_arg, ennemies_stats_arg)) {
|
||||||
|
is_casting_spell = 0;
|
||||||
|
}
|
||||||
|
} else if (IsKeyPressed(BUTTON_CONFIRM_SPELL)) {
|
||||||
|
if (cast_spell(player_arg, player_stats_arg, spell, END_SPELL, ennemies_arg, ennemies_stats_arg)) {
|
||||||
|
is_casting_spell = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Ennemy& choose_target(Player& player_arg, Player_stats& player_stats_arg, std::vector<Ennemy>& ennemies_arg, std::vector<Ennemy_stats>& ennemies_stats_arg) {
|
||||||
|
std::cout << "Selecting target ennemi" << std::endl;
|
||||||
|
int arg;
|
||||||
|
bool selecting_ennemi = 1;
|
||||||
|
while(selecting_ennemi) {
|
||||||
|
display_combat_interface(player_arg, player_stats_arg, ennemies_arg, ennemies_stats_arg);
|
||||||
|
if (IsKeyPressed(BUTTON_FIRST_ENNEMI)) {
|
||||||
|
std::cout << "NUMPAD1" << std::endl;
|
||||||
|
if (ennemies_arg.size() >= 1) {
|
||||||
|
arg = 0;
|
||||||
|
selecting_ennemi = 0;
|
||||||
|
}
|
||||||
|
} else if (IsKeyPressed(BUTTON_SECOND_ENNEMI)) {
|
||||||
|
std::cout << "NUMPAD1" << std::endl;
|
||||||
|
if (ennemies_arg.size() >= 2) {
|
||||||
|
arg = 1;
|
||||||
|
selecting_ennemi = 0;
|
||||||
|
}
|
||||||
|
} else if (IsKeyPressed(BUTTON_THIRD_ENNEMI)) {
|
||||||
|
std::cout << "NUMPAD1" << std::endl;
|
||||||
|
if (ennemies_arg.size() >= 3) {
|
||||||
|
arg = 2;
|
||||||
|
selecting_ennemi = 0;
|
||||||
|
}
|
||||||
|
} else if (IsKeyPressed(BUTTON_FOURTH_ENNEMI)) {
|
||||||
|
std::cout << "NUMPAD1" << std::endl;
|
||||||
|
if (ennemies_arg.size() >= 4) {
|
||||||
|
arg = 3;
|
||||||
|
selecting_ennemi = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
std::cout << ennemies_arg[arg].name << " is selected" << std::endl;
|
||||||
|
return ennemies_arg[arg];
|
||||||
|
}
|
||||||
|
|
||||||
Spell choose_spell(const Ennemy& ennemy_arg) {
|
Spell choose_spell(const Ennemy& ennemy_arg) {
|
||||||
std::vector<int> spells(ennemy_arg.spells.size());
|
std::vector<int> spells(ennemy_arg.spells.size());
|
||||||
int i = random_choice(spells);
|
int i = random_choice(spells);
|
||||||
|
@ -94,9 +177,9 @@ void ennemy_turn(Player& player_arg, Ennemy& ennemy_arg) {
|
||||||
ennemy_use_spell(spell, player_arg, ennemy_arg);
|
ennemy_use_spell(spell, player_arg, ennemy_arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void attack(Player& player_arg, std::vector<Ennemy>& ennemies_arg){
|
void attack(Player& player_arg, Player_stats& player_stats_arg, std::vector<Ennemy>& ennemies_arg, std::vector<Ennemy_stats>& ennemies_stats_arg){
|
||||||
if(player_arg.job == MAGE) {
|
if(player_arg.job == MAGE) {
|
||||||
casting_spell(player_arg, ennemies_arg);
|
casting_spell(player_arg, player_stats_arg, ennemies_arg, ennemies_stats_arg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,11 +4,12 @@ void combat(Player& player_arg, Player_stats& player_stats_arg, std::vector<Enne
|
||||||
|
|
||||||
void check_deads(Player& player_arg, std::vector<Ennemy>& ennemies_arg, bool& combat_loop);
|
void check_deads(Player& player_arg, std::vector<Ennemy>& ennemies_arg, bool& combat_loop);
|
||||||
|
|
||||||
void player_turn(Player& player_arg, std::vector<Ennemy>& ennemies_arg, bool& combat_loop_arg, int& arg);
|
void player_turn(Player& player_arg, Player_stats& player_stats_arg, std::vector<Ennemy>& ennemies_arg, std::vector<Ennemy_stats>& ennemies_stats_arg, bool& combat_loop_arg);
|
||||||
void select_combat_action(int arg, Player& player_arg, bool& combat_loop_arg, std::vector<Ennemy>& ennemies_arg);
|
void casting_spell(Player& player_arg, Player_stats& player_stats_arg, std::vector<Ennemy>& ennemies_arg, std::vector<Ennemy_stats>& ennemies_stats_arg);
|
||||||
|
Ennemy& choose_target(Player& player_arg, Player_stats& player_stats_arg, std::vector<Ennemy>& ennemies_arg, std::vector<Ennemy_stats>& ennemies_stats_arg);
|
||||||
|
|
||||||
Spell choose_spell(const Ennemy& ennemy_arg);
|
Spell choose_spell(const Ennemy& ennemy_arg);
|
||||||
void ennemy_turn(Player& player_arg, Ennemy& ennemy_arg);
|
void ennemy_turn(Player& player_arg, Ennemy& ennemy_arg);
|
||||||
|
|
||||||
void attack(Player& player_arg, std::vector<Ennemy>& ennemies_arg);
|
void attack(Player& player_arg, Player_stats& player_stats_arg, std::vector<Ennemy>& ennemies_arg, std::vector<Ennemy_stats>& ennemies_stats_arg);
|
||||||
bool escape(const Player& player_arg, std::vector<Ennemy>& ennemies_arg);
|
bool escape(const Player& player_arg, std::vector<Ennemy>& ennemies_arg);
|
|
@ -5,6 +5,7 @@
|
||||||
#include "../define.h"
|
#include "../define.h"
|
||||||
#include "player.h"
|
#include "player.h"
|
||||||
#include "ennemy.h"
|
#include "ennemy.h"
|
||||||
|
#include "combat.h"
|
||||||
#include "../interface/interfaces.h"
|
#include "../interface/interfaces.h"
|
||||||
#include "spells.h"
|
#include "spells.h"
|
||||||
|
|
||||||
|
@ -125,17 +126,16 @@ Spell find_spell_by_combinaison(const std::vector<Spell>& spell_book_arg, const
|
||||||
return spell_book_arg[0];
|
return spell_book_arg[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
//Return true if the player still can cast a spell
|
//Return true if the player casts a spell
|
||||||
bool cast_spell(Player& player_arg, std::vector<int>& spell_arg, int spell_segment_arg, std::vector<Ennemy>& ennemies_arg) {
|
bool cast_spell(Player& player_arg, Player_stats& player_stats_arg, std::vector<int>& spell_arg, int spell_segment_arg, std::vector<Ennemy>& ennemies_arg, std::vector<Ennemy_stats>& ennemies_stats_arg) {
|
||||||
|
|
||||||
std::vector<Spell> spell_book = player_arg.spell_book;
|
std::vector<Spell> spell_book = player_arg.spell_book;
|
||||||
|
|
||||||
if (spell_segment_arg == END_SPELL) {
|
if (spell_segment_arg == END_SPELL) {
|
||||||
Spell casted_spell = find_spell_by_combinaison(spell_book, spell_arg);
|
Spell casted_spell = find_spell_by_combinaison(spell_book, spell_arg);
|
||||||
if (spell_arg.size() == casted_spell.combinaison.size()) {
|
if (spell_arg.size() == casted_spell.combinaison.size()) {
|
||||||
use_spell(casted_spell, player_arg, ennemies_arg);
|
use_spell(casted_spell, player_arg, player_stats_arg, ennemies_arg, ennemies_stats_arg);
|
||||||
}
|
}
|
||||||
return 0;
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
spell_arg.push_back(spell_segment_arg);
|
spell_arg.push_back(spell_segment_arg);
|
||||||
int count_spell = possible_spell(spell_book, spell_arg);
|
int count_spell = possible_spell(spell_book, spell_arg);
|
||||||
|
@ -143,30 +143,21 @@ bool cast_spell(Player& player_arg, std::vector<int>& spell_arg, int spell_segme
|
||||||
if (count_spell == 1) {
|
if (count_spell == 1) {
|
||||||
Spell casted_spell = find_spell_by_combinaison(spell_book, spell_arg);
|
Spell casted_spell = find_spell_by_combinaison(spell_book, spell_arg);
|
||||||
if (spell_arg.size() == casted_spell.combinaison.size()) {
|
if (spell_arg.size() == casted_spell.combinaison.size()) {
|
||||||
use_spell(casted_spell, player_arg, ennemies_arg);
|
use_spell(casted_spell, player_arg, player_stats_arg, ennemies_arg, ennemies_stats_arg);
|
||||||
} else {
|
} else {
|
||||||
return 1;
|
return 0;
|
||||||
}
|
}
|
||||||
} else if (count_spell == 0) {
|
} else if (count_spell == 0) {
|
||||||
std::cout << "Spell doesn't exist" << std::endl;
|
std::cout << "Spell doesn't exist" << std::endl;
|
||||||
}
|
}
|
||||||
spell_arg = {};
|
spell_arg = {};
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 1;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void casting_spell(Player& player_arg, std::vector<Ennemy>& ennemies_arg) {
|
void use_spell(const Spell& spell_arg, Player& player_arg, Player_stats& player_stats_arg, std::vector<Ennemy>& ennemies_arg, std::vector<Ennemy_stats>& ennemies_stats_arg) {
|
||||||
std::vector<int> spell;
|
|
||||||
int spell_segment;
|
|
||||||
do {
|
|
||||||
std::cin >> spell_segment;
|
|
||||||
} while (cast_spell(player_arg, spell, spell_segment, ennemies_arg));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void use_spell(const Spell& spell_arg, Player& player_arg, std::vector<Ennemy>& ennemies_arg) {
|
|
||||||
if (player_arg.mana - spell_arg.cost_mana >= 0) {
|
if (player_arg.mana - spell_arg.cost_mana >= 0) {
|
||||||
inc_health(player_arg, -spell_arg.cost_health);
|
inc_health(player_arg, -spell_arg.cost_health);
|
||||||
inc_mana(player_arg, -spell_arg.cost_mana);
|
inc_mana(player_arg, -spell_arg.cost_mana);
|
||||||
|
@ -175,7 +166,7 @@ void use_spell(const Spell& spell_arg, Player& player_arg, std::vector<Ennemy>&
|
||||||
spell_damage(ennemy, spell_arg);
|
spell_damage(ennemy, spell_arg);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Ennemy& ennemy = choose_target(ennemies_arg);
|
Ennemy& ennemy = choose_target(player_arg, player_stats_arg, ennemies_arg, ennemies_stats_arg);
|
||||||
spell_damage(ennemy, spell_arg);
|
spell_damage(ennemy, spell_arg);
|
||||||
}
|
}
|
||||||
std::cout << player_arg.name<< " casts " << spell_arg.name << std::endl;
|
std::cout << player_arg.name<< " casts " << spell_arg.name << std::endl;
|
||||||
|
@ -197,13 +188,6 @@ void spell_damage(Ennemy& ennemy_arg, const Spell& spell_arg) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ennemy& choose_target(std::vector<Ennemy>& ennemies_arg) {
|
|
||||||
display_ennemies(ennemies_arg);
|
|
||||||
int arg;
|
|
||||||
std::cin >> arg;
|
|
||||||
return ennemies_arg[arg];
|
|
||||||
}
|
|
||||||
|
|
||||||
void ennemy_use_spell(const Spell& spell_arg, Player& player_arg, Ennemy& ennemy_arg) {
|
void ennemy_use_spell(const Spell& spell_arg, Player& player_arg, Ennemy& ennemy_arg) {
|
||||||
inc_health(ennemy_arg, -spell_arg.cost_health);
|
inc_health(ennemy_arg, -spell_arg.cost_health);
|
||||||
|
|
||||||
|
|
|
@ -12,12 +12,10 @@ void init_spells(std::vector<Spell>& spell_book_arg);
|
||||||
|
|
||||||
int possible_spell(const std::vector<Spell>& spell_book_arg, const std::vector<int>& spell_arg);
|
int possible_spell(const std::vector<Spell>& spell_book_arg, const std::vector<int>& spell_arg);
|
||||||
Spell find_spell_by_combinaison(const std::vector<Spell>& spell_book_arg, const std::vector<int>& spell_arg);
|
Spell find_spell_by_combinaison(const std::vector<Spell>& spell_book_arg, const std::vector<int>& spell_arg);
|
||||||
bool cast_spell(Player& player_arg, std::vector<int>& spell_arg, std::vector<Ennemy>& ennemies_arg);
|
bool cast_spell(Player& player_arg, Player_stats& player_stats_arg, std::vector<int>& spell_arg, int spell_segment_arg, std::vector<Ennemy>& ennemies_arg, std::vector<Ennemy_stats>& ennemies_stats_arg);
|
||||||
void casting_spell(Player& player_arg, std::vector<Ennemy>& ennemies_arg);
|
void use_spell(const Spell& spell_arg, Player& player_arg, Player_stats& player_stats_arg, std::vector<Ennemy>& ennemies_arg, std::vector<Ennemy_stats>& ennemies_stats_arg);
|
||||||
void use_spell(const Spell& spell_arg, Player& player_arg, std::vector<Ennemy>& ennemies_arg);
|
|
||||||
void spell_damage(Ennemy& ennemy_arg, const Spell& spell_arg);
|
void spell_damage(Ennemy& ennemy_arg, const Spell& spell_arg);
|
||||||
Ennemy& choose_target(std::vector<Ennemy>& ennemies_arg);
|
|
||||||
void ennemy_use_spell(const Spell& spell_arg, Player& player_arg, Ennemy& ennemy_arg);
|
void ennemy_use_spell(const Spell& spell_arg, Player& player_arg, Ennemy& ennemy_arg);
|
||||||
|
|
||||||
void print_spell(const Spell& spell_arg);
|
void print_spell(const Spell& spell_arg);
|
||||||
void print_spell_book(const std::vector<Spell>& spell_book_arg);
|
void print_spell_book(const std::vector<Spell>& spell_book_arg);
|
BIN
game/release
BIN
game/release
Binary file not shown.
Loading…
Reference in New Issue