#include "BattleState.h"
#include "PartyLayout.h"
+#include "../geometry/operators.h"
#include "../graphics/Sprite.h"
#include <stdexcept>
using app::Application;
using geometry::Point;
+using geometry::Vector;
using std::vector;
}
void BattleState::Render(SDL_Surface *screen) {
+ Vector<int> offset(
+ (screen->w - background->w) / 2,
+ (screen->h - background->h) / 2);
+
+ RenderBackground(screen, offset);
+ RenderMonsters(screen, offset);
+ RenderHeroes(screen, offset);
+}
+
+void BattleState::RenderBackground(SDL_Surface *screen, const Vector<int> &offset) {
// black for now
SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 0, 0, 0));
SDL_Rect destRect;
- destRect.x = (screen->w - background->w) / 2;
- destRect.y = (screen->h - background->h) / 2;
+ destRect.x = offset.X();
+ destRect.y = offset.Y();
destRect.w = background->w;
destRect.h = background->h;
-
- // TODO: center background if screen bigger
SDL_BlitSurface(background, 0, screen, &destRect);
+}
+void BattleState::RenderMonsters(SDL_Surface *screen, const Vector<int> &offset) {
for (vector<Monster>::size_type i(0), end(monsters.size()); i < end; ++i) {
- monsters[i].Sprite()->DrawCenterBottom(screen, Point<int>(monsterPositions[i].X() + destRect.x, monsterPositions[i].Y() + destRect.y));
+ monsters[i].Sprite()->DrawCenterBottom(screen, monsterPositions[i] + offset);
}
+}
+void BattleState::RenderHeroes(SDL_Surface *screen, const Vector<int> &offset) {
for (vector<Hero>::size_type i(0), end(heroes.size()); i < end; ++i) {
- heroes[i].Sprite()->DrawCenterBottom(screen, Point<int>(heroesPositions[i].X() + destRect.x, heroesPositions[i].Y() + destRect.y));
+ heroes[i].Sprite()->DrawCenterBottom(screen, heroesPositions[i] + offset);
}
}
#include "Monster.h"
#include "../app/State.h"
#include "../geometry/Point.h"
+#include "../geometry/Vector.h"
#include <vector>
#include <SDL.h>
virtual void UpdateWorld(float deltaT);
virtual void Render(SDL_Surface *);
+private:
+ void RenderBackground(SDL_Surface *screen, const geometry::Vector<int> &offset);
+ void RenderMonsters(SDL_Surface *screen, const geometry::Vector<int> &offset);
+ void RenderHeroes(SDL_Surface *screen, const geometry::Vector<int> &offset);
+
private:
SDL_Surface *background;
const PartyLayout *monstersLayout;