From: Daniel Karbach Date: Wed, 6 Feb 2013 07:01:45 +0000 (+0100) Subject: show battle results interactively X-Git-Url: http://git.localhorst.tv/?p=l2e.git;a=commitdiff_plain;h=acc322b16b5f31cfbc350d4fccb457c7730287fd show battle results interactively --- diff --git a/src/battle/BattleState.h b/src/battle/BattleState.h index cfd344d..24b7c94 100644 --- a/src/battle/BattleState.h +++ b/src/battle/BattleState.h @@ -61,6 +61,7 @@ public: public: Battle &GetBattle() { return battle; } const Battle &GetBattle() const { return battle; } + const common::GameConfig &Game() const { return *game; } const Resources &Res() const { return *res; } AttackTypeMenu &GetAttackTypeMenu() { return attackTypeMenu; } MoveMenu &GetMoveMenu() { return moveMenu; } diff --git a/src/battle/states/VictoryState.cpp b/src/battle/states/VictoryState.cpp index 3516bde..dca0bf2 100644 --- a/src/battle/states/VictoryState.cpp +++ b/src/battle/states/VictoryState.cpp @@ -5,6 +5,8 @@ #include "../Hero.h" #include "../../app/Application.h" #include "../../app/Input.h" +#include "../../common/GameConfig.h" +#include "../../common/GameState.h" #include "../../common/Hero.h" #include "../../math/Vector.h" #include "../../graphics/Font.h" @@ -47,6 +49,11 @@ void VictoryState::LoadResults() { s << hero.Name() << " next level " << hero.NextLevel(); lines.push_back(s.str()); } + + lines.push_back(""); + s.str(""); + s << parent->Game().state->money << " gold"; + lines.push_back(s.str()); } void VictoryState::OnExitState(SDL_Surface *screen) { @@ -54,7 +61,7 @@ void VictoryState::OnExitState(SDL_Surface *screen) { } void VictoryState::OnResumeState(SDL_Surface *screen) { - timer = GraphicsTimers().StartCountdown(1500); + } void VictoryState::OnPauseState(SDL_Surface *screen) { @@ -77,7 +84,26 @@ void VictoryState::OnResize(int width, int height) { void VictoryState::HandleEvents(const Input &input) { - if (timer.Finished()) { + if (input.JustPressed(Input::ACTION_A)) { + ++cursor; + timer = GraphicsTimers().StartInterval(150); + } else if (input.IsDown(Input::ACTION_A) + && timer.JustHit() + && timer.Iteration() > 3) { + ++cursor; + } else if (input.JustPressed(Input::SHOULDER_LEFT)) { + ++cursor; + timer = GraphicsTimers().StartInterval(150); + } else if (input.IsDown(Input::SHOULDER_LEFT) + && timer.JustHit() + && timer.Iteration() > 3) { + ++cursor; + } + if (!input.IsDown(Input::ACTION_A) + && !input.IsDown(Input::SHOULDER_LEFT)) { + timer.Clear(); + } + if (cursor >= int(lines.size())) { Ctrl().PopState(); // pop self } } @@ -89,6 +115,7 @@ void VictoryState::UpdateWorld(Uint32 deltaT) { void VictoryState::Render(SDL_Surface *screen) { parent->RenderBackground(screen); + parent->RenderHeroes(screen); RenderFrame(screen); RenderLines(screen); } @@ -102,10 +129,8 @@ void VictoryState::RenderLines(SDL_Surface *screen) { // naive implementation const Font &font = *parent->Res().normalFont; Vector position = textPosition; - for (vector::const_iterator - i(lines.begin()), end(lines.end()); - i != end; ++i) { - font.DrawString(i->c_str(), screen, position); + for (int i = 0; i <= cursor && i < int(lines.size()); ++i) { + font.DrawString(lines[i].c_str(), screen, position); position.Y() += font.CharHeight(); } } diff --git a/src/battle/states/VictoryState.h b/src/battle/states/VictoryState.h index bb872a2..d14ec76 100644 --- a/src/battle/states/VictoryState.h +++ b/src/battle/states/VictoryState.h @@ -22,7 +22,8 @@ public: Battle *battle, BattleState *parent) : battle(battle) - , parent(parent) { } + , parent(parent) + , cursor(0) { } public: virtual void HandleEvents(const app::Input &); @@ -50,6 +51,7 @@ private: math::Vector framePosition; math::Vector frameSize; math::Vector textPosition; + int cursor; };