for (vector<Monster>::size_type i(0), end(monsters.size()); i < end; ++i) {
if (MonsterPositionOccupied(i)) {
// TODO: better solution for running animations
- if (monsters[i].AttackAnimation() && monsters[i].AttackAnimation()->Running()) {
- monsters[i].AttackAnimation()->DrawCenter(screen, monsterPositions[i] + offset);
- } else if (monsters[i].SpellAnimation() && monsters[i].SpellAnimation()->Running()) {
- monsters[i].SpellAnimation()->DrawCenter(screen, monsterPositions[i] + offset);
+ if (monsters[i].GetAnimation().Running()) {
+ monsters[i].GetAnimation().DrawCenter(screen, monsterPositions[i] + offset);
} else {
monsters[i].Sprite()->DrawCenter(screen, monsterPositions[i] + offset);
}
void BattleState::RenderHeroes(SDL_Surface *screen, const Vector<int> &offset) {
assert(screen);
for (int i(0); i < numHeroes; ++i) {
- if (heroes[i].AttackAnimation() && heroes[i].AttackAnimation()->Running()) {
- heroes[i].AttackAnimation()->DrawCenter(screen, heroesPositions[i] + offset);
- } else if (heroes[i].SpellAnimation() && heroes[i].SpellAnimation()->Running()) {
- heroes[i].SpellAnimation()->DrawCenter(screen, heroesPositions[i] + offset);
+ if (heroes[i].GetAnimation().Running()) {
+ heroes[i].GetAnimation().DrawCenter(screen, heroesPositions[i] + offset);
} else {
int row(heroes[i].Health() > 0 ? 0 : 2);
heroes[i].Sprite()->DrawCenter(screen, heroesPositions[i] + offset, 1, row);
moveAnimation.Clear();
break;
}
- hero.SetAnimation(moveAnimation);
}
if (titleBarText) titleBarTimer = GraphicsTimers().StartCountdown(850);
- if (moveAnimation.Valid()) moveAnimation.Start(*this);
+ if (moveAnimation.Valid()) {
+ moveAnimation.Start(*this);
+ if (battle->CurrentAttack().isMonster) {
+ battle->MonsterAt(battle->CurrentAttack().index).SetAnimation(moveAnimation);
+ } else {
+ battle->HeroAt(battle->CurrentAttack().index).SetAnimation(moveAnimation);
+ }
+ }
if (targetAnimation.Valid()) {
targetAnimationTimer = GraphicsTimers().StartCountdown(150);
} else {