#include "../../common/Spell.h"
#include "../../geometry/operators.h"
#include "../../geometry/Point.h"
+#include "../../graphics/Animation.h"
#include "../../graphics/Font.h"
#include "../../graphics/Frame.h"
-#include "../../graphics/SimpleAnimation.h"
#include <cstring>
using app::Input;
using geometry::Point;
using geometry::Vector;
-using graphics::SimpleAnimation;
namespace battle {
void PerformAttacks::EnterState(Application &c, SDL_Surface *screen) {
ctrl = &c;
- // TODO: push battle animation if enemy is faster
}
void PerformAttacks::ExitState(Application &c, SDL_Surface *screen) {
}
} else {
if (cursor == 0) {
- battle->HeroAnimationAt(battle->NumHeroes() - 1).Stop();
+ if (battle->HeroAt(battle->NumHeroes() - 1).AttackAnimation()) {
+ battle->HeroAt(battle->NumHeroes() - 1).AttackAnimation()->Stop();
+ }
+ if (battle->HeroAt(battle->NumHeroes() - 1).SpellAnimation()) {
+ battle->HeroAt(battle->NumHeroes() - 1).SpellAnimation()->Stop();
+ }
}
titleBarText = battle->MonsterAt(cursor).Name();
}
switch (ac.GetType()) {
case AttackChoice::SWORD:
- battle->HeroAnimationAt(cursor) = SimpleAnimation(
- battle->HeroAt(cursor).Sprite(),
- battle->HeroAt(cursor).AttackFrameTime(),
- battle->HeroAt(cursor).AttackFrames(), 2);
+ if (battle->HeroAt(cursor).AttackAnimation()) {
+ battle->HeroAt(cursor).AttackAnimation()->Start(*this);
+ }
break;
case AttackChoice::MAGIC:
- battle->HeroAnimationAt(cursor) = SimpleAnimation(
- battle->HeroAt(cursor).Sprite(),
- battle->HeroAt(cursor).SpellFrameTime(),
- battle->HeroAt(cursor).SpellFrames(), 3);
+ if (battle->HeroAt(cursor).SpellAnimation()) {
+ battle->HeroAt(cursor).SpellAnimation()->Start(*this);
+ }
break;
case AttackChoice::DEFEND:
break;
case AttackChoice::IKARI:
if (ac.GetItem()->HasIkari()) {
if (ac.GetItem()->GetIkari()->IsMagical()) {
- battle->HeroAnimationAt(cursor) = SimpleAnimation(
- battle->HeroAt(cursor).Sprite(),
- battle->HeroAt(cursor).SpellFrameTime(),
- battle->HeroAt(cursor).SpellFrames(), 3);
+ if (battle->HeroAt(cursor).SpellAnimation()) {
+ battle->HeroAt(cursor).SpellAnimation()->Start(*this);
+ }
} else {
- battle->HeroAnimationAt(cursor) = SimpleAnimation(
- battle->HeroAt(cursor).Sprite(),
- battle->HeroAt(cursor).AttackFrameTime(),
- battle->HeroAt(cursor).AttackFrames(), 2);
+ if (battle->HeroAt(cursor).AttackAnimation()) {
+ battle->HeroAt(cursor).AttackAnimation()->Start(*this);
+ }
}
}
break;
case AttackChoice::UNDECIDED:
break;
}
- battle->HeroAnimationAt(cursor).Start(*this);
++cursor;
if (cursor == battle->NumHeroes()) {
}
} else {
if (cursor > 0) {
- battle->HeroAnimationAt(cursor - 1).Stop();
+ if (battle->HeroAt(cursor - 1).AttackAnimation()) {
+ battle->HeroAt(cursor - 1).AttackAnimation()->Stop();
+ }
+ if (battle->HeroAt(cursor - 1).SpellAnimation()) {
+ battle->HeroAt(cursor - 1).SpellAnimation()->Stop();
+ }
}
switch (ac.GetType()) {
case AttackChoice::SWORD: