]> git.localhorst.tv Git - l2e.git/commitdiff
made battle's heroes into an array
authorDaniel Karbach <daniel.karbach@localhorst.tv>
Sat, 11 Aug 2012 14:15:05 +0000 (16:15 +0200)
committerDaniel Karbach <daniel.karbach@localhorst.tv>
Sat, 11 Aug 2012 14:15:05 +0000 (16:15 +0200)
src/battle/BattleState.cpp
src/battle/BattleState.h
src/battle/TargetSelection.cpp
src/battle/states/PerformAttacks.cpp
src/battle/states/SelectTarget.cpp
src/battle/states/SwapHeroes.cpp

index 9e84206b3908dde82be2eba8fec5da82bf4e8661..0f3fad94838f56e88a16bda2b6efbce8a788b624 100644 (file)
@@ -43,14 +43,15 @@ void BattleState::AddMonster(const Monster &m) {
 }
 
 void BattleState::AddHero(const Hero &h) {
-       if (heroes.size() >= heroesLayout->NumPositions()) {
+       if (numHeroes >= 4 || numHeroes >= (int)heroesLayout->NumPositions()) {
                throw std::overflow_error("too many heroes for layout");
        }
-       heroes.push_back(h);
+       heroes[numHeroes] = h;
+       ++numHeroes;
 }
 
-void BattleState::SwapHeroes(std::vector<Hero>::size_type lhs, std::vector<Hero>::size_type rhs) {
-       if (lhs < 0 || lhs >= heroes.size() || rhs < 0 || rhs >= heroes.size() || lhs == rhs) return;
+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]);
 }
 
@@ -63,7 +64,7 @@ void BattleState::Resize(int w, int h) {
 void BattleState::EnterState(Application &ctrl, SDL_Surface *screen) {
        monstersLayout->CalculatePositions(background->w, background->h, monsterPositions);
        heroesLayout->CalculatePositions(background->w, background->h, heroesPositions);
-       for (vector<Hero>::size_type i(0), end(heroes.size()); i < end; ++i) {
+       for (int i(0); i < 4; ++i) {
                spellMenus[i] = res->spellMenuPrototype;
                LoadSpellMenu(i);
                ikariMenus[i] = res->ikariMenuPrototype;
@@ -208,7 +209,7 @@ void BattleState::PauseState(Application &ctrl, SDL_Surface *screen) {
 
 void BattleState::ClearAllAttacks() {
        activeHero = -1;
-       for (vector<Hero>::size_type i(0), end(heroes.size()); i < end; ++i) {
+       for (int i(0); i < numHeroes; ++i) {
                attackChoices[i] = AttackChoice(this);
        }
 }
@@ -249,7 +250,7 @@ void BattleState::RenderMonsters(SDL_Surface *screen, const Vector<int> &offset)
 }
 
 void BattleState::RenderHeroes(SDL_Surface *screen, const Vector<int> &offset) {
-       for (vector<Hero>::size_type i(0), end(heroes.size()); i < end; ++i) {
+       for (int i(0); i < numHeroes; ++i) {
                heroes[i].Sprite()->DrawCenterBottom(screen, heroesPositions[i] + offset, 0, 1);
        }
 }
@@ -258,7 +259,7 @@ void BattleState::RenderHeroTags(SDL_Surface *screen, const Vector<int> &offset)
        int tagHeight(attackTypeMenu.Height());
        int tagWidth(attackTypeMenu.Width() * 2 + attackTypeMenu.Width() / 2);
 
-       for (vector<Hero>::size_type i(0), end(heroes.size()); i < end; ++i) {
+       for (int i(0); i < numHeroes; ++i) {
                heroTags[i].Render(screen, tagWidth, tagHeight, heroTagPositions[i] + offset, (int)i == activeHero);
        }
 }
index 7dbd016d8717ff8415a1ed63aa8d0f717ffbd54d..978581f3062843018925d782ecf63d5de3995d46 100644 (file)
@@ -51,6 +51,7 @@ public:
        , res(res)
        , attackTypeMenu(res->attackIcons)
        , moveMenu(res->moveIcons)
+       , numHeroes(0)
        , activeHero(-1)
        , ranAway(false) { }
 
@@ -75,28 +76,28 @@ public:
        AttackTypeMenu &GetAttackTypeMenu() { return attackTypeMenu; }
        MoveMenu &GetMoveMenu() { return moveMenu; }
 
-       bool HasMoreHeroes() const { return activeHero < (int) heroes.size(); }
+       bool HasMoreHeroes() const { return activeHero < numHeroes; }
        void NextHero() { ++activeHero; }
        bool BeforeFirstHero() const { return activeHero < 0; }
        void PreviousHero() { --activeHero; }
        Hero &ActiveHero() { return heroes[activeHero]; }
        const Hero &ActiveHero() const { return heroes[activeHero]; }
-       Hero &HeroAt(std::vector<Hero>::size_type index) { return heroes[index]; }
-       const Hero &HeroAt(std::vector<Hero>::size_type index) const { return heroes[index]; }
+       Hero &HeroAt(int index) { return heroes[index]; }
+       const Hero &HeroAt(int index) const { return heroes[index]; }
        Monster &MonsterAt(std::vector<Monster>::size_type index) { return monsters[index]; }
        const Monster &MonsterAt(std::vector<Monster>::size_type index) const { return monsters[index]; }
-       void SwapHeroes(std::vector<Hero>::size_type lhs, std::vector<Hero>::size_type rhs);
+       void SwapHeroes(int lhs, int rhs);
        const HeroTag &ActiveHeroTag() const { return heroTags[activeHero]; }
-       const HeroTag &HeroTagAt(std::vector<Hero>::size_type index) const { return heroTags[index]; }
-       const geometry::Point<int> &HeroTagPositionAt(std::vector<Hero>::size_type index) const { return heroTagPositions[index]; }
+       const HeroTag &HeroTagAt(int index) const { return heroTags[index]; }
+       const geometry::Point<int> &HeroTagPositionAt(int index) const { return heroTagPositions[index]; }
        bool HasChosenAttackType() const { return attackChoices[activeHero].GetType() != AttackChoice::UNDECIDED; }
        void SetAttackType(AttackChoice::Type t) { attackChoices[activeHero].SetType(t); }
        AttackChoice &ActiveHeroAttackChoice() { return attackChoices[activeHero]; }
        const AttackChoice &ActiveHeroAttackChoice() const { return attackChoices[activeHero]; }
-       const AttackChoice &AttackChoiceAt(std::vector<Hero>::size_type index) const { return attackChoices[index]; }
+       const AttackChoice &AttackChoiceAt(int index) const { return attackChoices[index]; }
        TargetSelection &ActiveHeroTargets() { return attackChoices[activeHero].Selection(); }
        const TargetSelection &ActiveHeroTargets() const { return attackChoices[activeHero].Selection(); }
-       bool AttackSelectionDone() const { return activeHero >= (int) heroes.size(); }
+       bool AttackSelectionDone() const { return activeHero >= numHeroes; }
 
        graphics::Menu<const common::Spell *> &GetSpellMenu() { return spellMenus[activeHero]; }
        const graphics::Menu<const common::Spell *> &GetSpellMenu() const { return spellMenus[activeHero]; }
@@ -108,9 +109,8 @@ public:
        const std::vector<geometry::Point<int> > &MonsterPositions() const { return monsterPositions; }
        bool MonsterPositionOccupied(int index) { return index >= 0 && index < int(monsters.size()) && monsters[index].Health() > 0; }
        const std::vector<geometry::Point<int> > &HeroesPositions() const { return heroesPositions; }
-       bool HeroPositionOccupied(int index) { return index >= 0 && index < int(heroes.size()); }
-       std::vector<Hero> &Heroes() { return heroes; }
-       const std::vector<Hero> &Heroes() const { return heroes; }
+       bool HeroPositionOccupied(int index) { return index >= 0 && index < numHeroes; }
+       int NumHeroes() const { return numHeroes; }
        std::vector<Monster> &Monsters() { return monsters; }
        const std::vector<Monster> &Monsters() const { return monsters; }
 
@@ -147,13 +147,14 @@ private:
        std::vector<geometry::Point<int> > monsterPositions;
        std::vector<geometry::Point<int> > heroesPositions;
        std::vector<Monster> monsters;
-       std::vector<Hero> heroes;
+       Hero heroes[4];
        graphics::Menu<const common::Spell *> spellMenus[4];
        graphics::Menu<const common::Item *> itemMenu;
        graphics::Menu<const common::Item *> ikariMenus[4];
        HeroTag heroTags[4];
        geometry::Point<int> heroTagPositions[4];
        AttackChoice attackChoices[4];
+       int numHeroes;
        int activeHero;
        bool ranAway;
 
index 85639074fd3f5ba998fcbd7ede41a625574b3ef2..c5573862bb0207fc14e9a18aab4ae6a2a592657f 100644 (file)
@@ -13,7 +13,7 @@ namespace battle {
 
 TargetSelection::TargetSelection(BattleState *battle, bool multiple, bool atEnemy)
 : battle(battle)
-, selected(battle ? (battle->MonsterPositions().size() > battle->Heroes().size() ? battle->MonsterPositions().size() : battle->Heroes().size()) : 0, false)
+, selected(battle ? ((int)battle->MonsterPositions().size() > battle->NumHeroes() ? (int)battle->MonsterPositions().size() : battle->NumHeroes()) : 0, false)
 , selection(-1)
 , cursor(0)
 , multiple(multiple)
@@ -64,7 +64,7 @@ void TargetSelection::MoveRight() {
                        cursor = (cursor + 1) % battle->MonsterPositions().size();
                }
        } else {
-               cursor = (cursor + 1) % battle->Heroes().size();
+               cursor = (cursor + 1) % battle->NumHeroes();
        }
 }
 
@@ -74,7 +74,7 @@ void TargetSelection::MoveDown() {
                return;
        }
        int newCursor(cursor + 2 % 4);
-       if (newCursor < int(battle->Heroes().size())) {
+       if (newCursor < battle->NumHeroes()) {
                cursor = newCursor;
        }
 }
@@ -84,7 +84,7 @@ void TargetSelection::MoveLeft() {
                cursor = (cursor + battle->MonsterPositions().size() - 1) % battle->MonsterPositions().size();
                FindNextEnemy();
        } else {
-               cursor = (cursor + battle->Heroes().size() - 1) % battle->Heroes().size();
+               cursor = (cursor + battle->NumHeroes() - 1) % battle->NumHeroes();
        }
 }
 
index 35253ce099c2ae6bcf1617b81145798855379ce8..e5bd7c98207da2c9b5bbc76f2a0713e01eca57b4 100644 (file)
@@ -72,7 +72,7 @@ void PerformAttacks::HandleEvents(const Input &input) {
                        if (titleBarText) {
                                titleBarText = 0;
                                ++cursor;
-                               if (cursor == (int)battle->Heroes().size()) {
+                               if (cursor == battle->NumHeroes()) {
                                        cursor = 0;
                                        monsters = true;
                                }
index c0ff6cca585a0ef143e316c10dbe73df16fb2ff8..8fe31cd60dad1e1953c3460d86f4998870158969 100644 (file)
@@ -99,7 +99,7 @@ void SelectTarget::RenderCursors(SDL_Surface *screen, const geometry::Vector<int
                        positions.push_back(*i);
                }
        } else {
-               for (vector<Hero>::size_type i(0), end(battle->Heroes().size()); i < end; ++i) {
+               for (int i(0), end(battle->NumHeroes()); i < end; ++i) {
                        Vector<int> positionCorrection(cursorIcon->Width() / 2, battle->HeroTagAt(i).HeroSprite()->Height() - cursorIcon->Height() / 2);
                        // indicator offsets are inverted for heroes
                        positionCorrection -= cursorOffset;
index f01e60da8603f862f97ad541a321d24c0bad750d..568fe8857fa4e76a16a589395bae0b84cd718ce1 100644 (file)
@@ -108,7 +108,7 @@ void SwapHeroes::MoveLeft() {
        if (cursor > 0) {
                --cursor;
        } else {
-               cursor = battle->Heroes().size();
+               cursor = battle->NumHeroes();
        }
 }
 
@@ -128,7 +128,7 @@ void SwapHeroes::RenderCursors(SDL_Surface *screen, const geometry::Vector<int>
        Vector<int> cursorOffset(battle->Res().swapCursor->Width() / -8, battle->Res().swapCursor->Height() / 8);
        Vector<int> indicatorOffset(0, 0);
        vector<Point<int> > positions;
-       for (vector<Hero>::size_type i(0), end(battle->Heroes().size()); i < end; ++i) {
+       for (int i(0), end(battle->NumHeroes()); i < end; ++i) {
                Vector<int> positionCorrection(battle->Res().swapCursor->Width() / 2, battle->HeroTagAt(i).HeroSprite()->Height() - battle->Res().swapCursor->Height() / 2);
                // indicator offsets are inverted for heroes
                positionCorrection -= cursorOffset;