}
}
+void BattleState::PreviousHero() {
+ --activeHero;
+ while (activeHero >= 0 && heroes[activeHero].Health() == 0) {
+ --activeHero;
+ }
+}
+
void BattleState::SwapHeroes(int lhs, int rhs) {
if (lhs < 0 || lhs >= numHeroes || rhs < 0 || rhs >= numHeroes || lhs == rhs) return;
std::swap(heroes[lhs], heroes[rhs]);
}
for (vector<Monster>::size_type i(0), end(monsters.size()); i < end; ++i) {
attackOrder.push_back(Order(i, true));
+ MonsterAt(i).GetAttackChoice() = AttackChoice(this);
}
std::sort(attackOrder.begin(), attackOrder.end(), OrderCompare(this));
-
- monsterAttacks.resize(monsters.size(), AttackChoice(this));
}
void BattleState::NextAttack() {
}
void BattleState::CalculateDamage() {
- AttackChoice &ac(CurrentAttack().isMonster ? monsterAttacks[CurrentAttack().index] : AttackChoiceAt(CurrentAttack().index));
+ AttackChoice &ac(CurrentAttack().isMonster ? MonsterAt(CurrentAttack().index).GetAttackChoice() : HeroAt(CurrentAttack().index).GetAttackChoice());
if (ac.GetType() == AttackChoice::DEFEND) return;
if (CurrentAttack().isMonster) {
void BattleState::ApplyDamage() {
if (attackCursor < 0) return;
- AttackChoice &ac(CurrentAttack().isMonster ? monsterAttacks[CurrentAttack().index] : AttackChoiceAt(CurrentAttack().index));
+ AttackChoice &ac(CurrentAttack().isMonster ? MonsterAt(CurrentAttack().index).GetAttackChoice() : HeroAt(CurrentAttack().index).GetAttackChoice());
TargetSelection &ts(ac.Selection());
if (ts.TargetsEnemies()) {
for (int i(0); i < MaxMonsters(); ++i) {
AttackChoice &BattleState::CurrentAttackAttackChoice() {
if (CurrentAttack().isMonster) {
- return monsterAttacks[CurrentAttack().index];
+ return MonsterAt(CurrentAttack().index).GetAttackChoice();
} else {
- return AttackChoiceAt(CurrentAttack().index);
+ return HeroAt(CurrentAttack().index).GetAttackChoice();
}
}
void BattleState::ClearAllAttacks() {
attackCursor = -1;
activeHero = -1;
- for (int i(0); i < numHeroes; ++i) {
- heroes[i].GetAttackChoice() = AttackChoice(this);
+ for (int i(0); i < NumHeroes(); ++i) {
+ HeroAt(i).GetAttackChoice() = AttackChoice(this);
+ }
+ for (int i(0); i < MaxMonsters(); ++i) {
+ MonsterAt(i).GetAttackChoice() = AttackChoice(this);
}
attackOrder.clear();
- monsterAttacks.clear();
}