More work on basic turn layout.
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
#include "../Flow/TurnHandler.hpp"
|
||||
#include "../TurnChoices/AttackTurnChoice.hpp"
|
||||
#include "../Flow/TurnOrdering.hpp"
|
||||
#include "../../Core/Exceptions/NotImplementedException.hpp"
|
||||
|
||||
using namespace CreatureLib;
|
||||
using namespace CreatureLib::Battling;
|
||||
@@ -10,10 +11,10 @@ const BattleLibrary *Battle::GetLibrary() const {
|
||||
return _library;
|
||||
}
|
||||
|
||||
bool Battle::CanUse(BaseTurnChoice *choice) {
|
||||
bool Battle::CanUse(const BaseTurnChoice *choice) {
|
||||
if (choice->GetKind() == TurnChoiceKind::Attack){
|
||||
//HOOK: change number of uses needed.
|
||||
return static_cast<AttackTurnChoice*>(choice)->GetAttack()->GetRemainingUses() > 1;
|
||||
return static_cast<const AttackTurnChoice*>(choice)->GetAttack()->GetRemainingUses() > 1;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -36,6 +37,16 @@ void Battle::CheckChoicesSetAndRun() {
|
||||
auto i = 0;
|
||||
for (auto side: _sides){
|
||||
for (auto choice: side->GetChoices()){
|
||||
if (choice->GetKind() == TurnChoiceKind::Attack){
|
||||
auto attack = static_cast<const AttackTurnChoice*>(choice)->GetAttack();
|
||||
uint8_t uses = 1;
|
||||
//HOOK: change number of uses needed.
|
||||
if (attack->GetRemainingUses() < uses){
|
||||
//TODO: Implement default move
|
||||
throw NotImplementedException("Not enough remaining uses, change to default move.");
|
||||
}
|
||||
//HOOK: Check if we need to change the move
|
||||
}
|
||||
choices[i] = choice;
|
||||
i++;
|
||||
}
|
||||
@@ -54,3 +65,11 @@ ChoiceQueue* Battle::GetCurrentTurnQueue() const {
|
||||
Core::Random &Battle::GetRandom(){
|
||||
return _random;
|
||||
}
|
||||
|
||||
bool Battle::CreatureInField(const Creature *creature) const {
|
||||
for (auto s: _sides){
|
||||
if (s->CreatureOnSide(creature))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include "../Library/BattleLibrary.hpp"
|
||||
#include "../TurnChoices/BaseTurnChoice.hpp"
|
||||
#include "../Flow/ChoiceQueue.hpp"
|
||||
#include "Target.hpp"
|
||||
|
||||
namespace CreatureLib::Battling {
|
||||
class Battle {
|
||||
@@ -19,13 +20,19 @@ namespace CreatureLib::Battling {
|
||||
public:
|
||||
const BattleLibrary* GetLibrary() const;
|
||||
|
||||
virtual bool CanUse(BaseTurnChoice* choice);
|
||||
virtual bool CanUse(const BaseTurnChoice* choice);
|
||||
virtual bool TrySetChoice(BaseTurnChoice* choice);
|
||||
|
||||
void CheckChoicesSetAndRun();
|
||||
|
||||
ChoiceQueue* GetCurrentTurnQueue() const;
|
||||
Core::Random& GetRandom();
|
||||
|
||||
bool CreatureInField(const Creature* creature) const;
|
||||
|
||||
Creature* GetTarget(const Target& target){
|
||||
return _sides[target.GetSideIndex()]->GetCreature(target.GetCreatureIndex());
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -34,3 +34,11 @@ void BattleSide::SetChoice(const BaseTurnChoice *choice) {
|
||||
void BattleSide::SetCreature(Creature *creature, uint8_t index) {
|
||||
_creatures[index] = creature;
|
||||
}
|
||||
|
||||
bool BattleSide::CreatureOnSide(const Creature *creature) const {
|
||||
return std::find(_creatures.begin(), _creatures.end(), creature) != _creatures.end();
|
||||
}
|
||||
|
||||
Creature *BattleSide::GetCreature(uint8_t index) const {
|
||||
return _creatures[index];
|
||||
}
|
||||
|
||||
@@ -25,6 +25,9 @@ namespace CreatureLib::Battling{
|
||||
|
||||
void SetCreature(Creature* creature, uint8_t index);
|
||||
|
||||
Creature* GetCreature(uint8_t index) const;
|
||||
bool CreatureOnSide(const Creature* creature) const;
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -103,6 +103,8 @@ void Battling::Creature::RecalculateBoostedStat(Core::Statistic stat) {
|
||||
this->_boostedStats.SetStat(stat, s);
|
||||
}
|
||||
|
||||
//endregion
|
||||
|
||||
Battling::Battle *Battling::Creature::GetBattle() const{
|
||||
return _battle;
|
||||
}
|
||||
@@ -111,5 +113,6 @@ Battling::BattleSide *Battling::Creature::GetBattleSide() const {
|
||||
return _side;
|
||||
}
|
||||
|
||||
|
||||
//endregion
|
||||
bool Battling::Creature::IsFainted() const {
|
||||
return this->__CurrentHealth <= 0;
|
||||
}
|
||||
|
||||
@@ -53,6 +53,8 @@ namespace CreatureLib::Battling{
|
||||
Battle* GetBattle() const;
|
||||
BattleSide* GetBattleSide() const;
|
||||
|
||||
bool IsFainted() const;
|
||||
|
||||
//region Stat APIs
|
||||
|
||||
void SetBattle(Battle* battle);
|
||||
|
||||
24
src/Battling/Models/Target.hpp
Normal file
24
src/Battling/Models/Target.hpp
Normal file
@@ -0,0 +1,24 @@
|
||||
#ifndef CREATURELIB_TARGET_HPP
|
||||
#define CREATURELIB_TARGET_HPP
|
||||
|
||||
#include <cstdint>
|
||||
#include "Creature.hpp"
|
||||
|
||||
namespace CreatureLib::Battling {
|
||||
class Target {
|
||||
uint8_t _side;
|
||||
uint8_t _creature;
|
||||
public:
|
||||
Target(uint8_t side, uint8_t creature) : _side(side), _creature(creature){}
|
||||
|
||||
uint8_t GetSideIndex() const{
|
||||
return _side;
|
||||
}
|
||||
|
||||
uint8_t GetCreatureIndex() const{
|
||||
return _creature;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
#endif //CREATURELIB_TARGET_HPP
|
||||
Reference in New Issue
Block a user