X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fbattle%2FBattleState.cpp;h=7c8b3306e8c29947c9a4868c8de8c2d20c8f408f;hb=f552d26f537af9fa48255bd71cdc1a0a1b860bac;hp=f548f2dfdc6968a59c4ce8a8dbd09ec50f24d1e0;hpb=0542849dfccfec1ce1477265fa0fee2401a8fb23;p=l2e.git diff --git a/src/battle/BattleState.cpp b/src/battle/BattleState.cpp index f548f2d..7c8b330 100644 --- a/src/battle/BattleState.cpp +++ b/src/battle/BattleState.cpp @@ -12,6 +12,7 @@ #include "states/PerformAttacks.h" #include "../app/Application.h" #include "../app/Input.h" +#include "../common/GameState.h" #include "../common/Ikari.h" #include "../common/Inventory.h" #include "../common/Item.h" @@ -29,6 +30,7 @@ using app::Input; using common::Inventory; using common::Item; using common::Spell; +using common::Stats; using geometry::Vector; using graphics::Menu; @@ -72,17 +74,17 @@ void BattleState::SwapHeroes(int lhs, int rhs) { } -void BattleState::Resize(int w, int h) { +void BattleState::OnResize(int w, int h) { } -void BattleState::EnterState(Application &ctrl, SDL_Surface *screen) { +void BattleState::OnEnterState(SDL_Surface *screen) { for (int i(0); i < 4; ++i) { heroes[i].Position() = heroesLayout->CalculatePosition(i, background->w, background->h); - heroes[i].SpellMenu() = res->spellMenuPrototype; + heroes[i].SpellMenu() = *res->spellMenuProperties; heroes[i].UpdateSpellMenu(); - heroes[i].IkariMenu() = res->ikariMenuPrototype; + heroes[i].IkariMenu() = *res->ikariMenuProperties; heroes[i].UpdateIkariMenu(res); heroTags[i] = HeroTag(this, i); smallHeroTags[i] = SmallHeroTag(this, i); @@ -109,12 +111,13 @@ void BattleState::EnterState(Application &ctrl, SDL_Surface *screen) { smallHeroTagPositions[2] = Vector(xOffset + tagWidth, yOffset); smallHeroTagPositions[3] = Vector(xOffset + 3 * tagWidth, yOffset); - itemMenu = res->itemMenuPrototype; + itemMenu = *res->itemMenuProperties; LoadInventory(); + ClearAllAttacks(); } void BattleState::LoadInventory() { - const Inventory &inv(*res->inventory); + const Inventory &inv(game->state->inventory); itemMenu.Clear(); itemMenu.Reserve(inv.MaxItems()); for (int i(0); i < inv.MaxItems(); ++i) { @@ -125,33 +128,30 @@ void BattleState::LoadInventory() { itemMenu.AddEmptyEntry(); } } - ClearAllAttacks(); } -void BattleState::ExitState(Application &ctrl, SDL_Surface *screen) { +void BattleState::OnExitState(SDL_Surface *screen) { } -void BattleState::ResumeState(Application &ctrl, SDL_Surface *screen) { +void BattleState::OnResumeState(SDL_Surface *screen) { if (ranAway) { - ctrl.PopState(); // quit the battle scene + Ctrl().PopState(); // quit the battle scene return; } if (Victory()) { - // TODO: push victory state - ctrl.PopState(); + Ctrl().PopState(); return; } if (Defeat()) { - // TODO: push defeat state - ctrl.PopState(); + Ctrl().PopState(); return; } // TODO: this should not push a state while quitting if (AttackSelectionDone()) { - ctrl.PushState(new PerformAttacks(this)); + Ctrl().PushState(new PerformAttacks(this)); } else { - ctrl.PushState(new SelectMoveAction(this)); + Ctrl().PushState(new SelectMoveAction(this)); } } @@ -169,7 +169,7 @@ bool BattleState::Defeat() const { return true; } -void BattleState::PauseState(Application &ctrl, SDL_Surface *screen) { +void BattleState::OnPauseState(SDL_Surface *screen) { } @@ -227,7 +227,6 @@ void BattleState::CalculateDamage() { if (ac.GetType() == AttackChoice::DEFEND) return; TargetSelection &ts(ac.Selection()); - // TODO: this only evaluates SWORD type attacks if (CurrentAttack().isMonster) { const Stats &attackerStats(MonsterAt(CurrentAttack().index).GetStats()); CalculateDamage(attackerStats, ts); @@ -241,7 +240,6 @@ void BattleState::DecideMonsterAttack(Monster &m) const { AttackChoice &ac(m.GetAttackChoice()); TargetSelection &ts(ac.Selection()); ac.Reset(); - // TODO: run monster's attack script int target(rand() % NumHeroes()); while (!HeroPositionOccupied(target)) { target = rand() % NumHeroes(); @@ -302,7 +300,6 @@ void BattleState::CalculateDamage(const Stats &attackerStats, TargetSelection &t } Uint16 BattleState::CalculateDamage(const Stats &attacker, const Stats &defender) const { - // TODO: find out real formula and add some randomness return attacker.Attack() / 2 - defender.Defense() / 4; } @@ -427,7 +424,7 @@ void BattleState::RenderSmallHeroTags(SDL_Surface *screen, const Vector &of SDL_FillRect(screen, &rect, SDL_MapRGB(screen->format, 0, 0, 0)); rect.y += res->normalFont->CharHeight() / 8; rect.h -= res->normalFont->CharHeight() / 4; - SDL_FillRect(screen, &rect, res->heroesBgColor); + SDL_FillRect(screen, &rect, res->heroesBgColor.MapRGB(screen->format)); for (int i(0); i < numHeroes; ++i) { smallHeroTags[i].Render(screen, tagWidth, tagHeight, smallHeroTagPositions[i] + offset);