Refactoring in SDLMain.

This commit is contained in:
King_DuckZ 2014-03-06 11:43:28 +01:00
parent 4e3ad27ae8
commit ccc831e34d
7 changed files with 34 additions and 13 deletions

View file

@ -21,11 +21,13 @@
#define id5FC1D6EEF9DF41E790068FBC6753035F
#define GameName "@PROJECT_NAME@"
#define GameVersionMinor 1
#define GameVersionMinor 11
#define GameVersionMajor 0
#define DEF_WIN_WIDTH 800
#define DEF_WIN_HEIGHT 600
#define REFERENCE_WIDTH 480
#define REFERENCE_HEIGHT 600
#define DEF_WIN_WIDTH REFERENCE_WIDTH
#define DEF_WIN_HEIGHT REFERENCE_HEIGHT
#define GAME_BASE_PATH "@CMAKE_SOURCE_DIR@"

View file

@ -49,7 +49,7 @@ namespace cloonel {
///-------------------------------------------------------------------------
void Character::Prepare() {
const SDLMain* const sdlmain = m_texture->SDLObject();
const int2 screensize(sdlmain->DefWidthHeight());
const int2 screensize(sdlmain->WidthHeight());
m_texture->Reload();
}

View file

@ -77,7 +77,7 @@ namespace cloonel {
AddDrawable(m_wallpaper.get());
AddDrawable(m_player.get());
m_moverSine->SetPower(static_cast<float>(SDLObject()->DefWidthHeight().y() / 2));
m_moverSine->SetPower(static_cast<float>(SDLObject()->WidthHeight().y() / 2));
}
///--------------------------------------------------------------------------

View file

@ -21,6 +21,7 @@
#include "sdlmain.hpp"
#include "physicsfswrapper.hpp"
#include "gameplaysceneclassic.hpp"
#include "vector.hpp"
#include <iostream>
#include <stdexcept>
#include <ciso646>
@ -44,7 +45,7 @@ int main (int, char* parArgv[]) {
std::cout << GameName << " v" << GameVersionMajor << "." << GameVersionMinor << std::endl;
int retVal = 0;
cloonel::SDLMain sdlmain(GameName, DEF_WIN_WIDTH, DEF_WIN_HEIGHT);
cloonel::SDLMain sdlmain(GameName, cloonel::ushort2(DEF_WIN_WIDTH, DEF_WIN_HEIGHT), cloonel::ushort2(REFERENCE_WIDTH, REFERENCE_HEIGHT));
try {
cloonel::PhysicsFSWrapper physfs(parArgv[0]);
physfs.Append(GAME_BASE_PATH "/resources/", "resources");

View file

@ -27,12 +27,27 @@ namespace cloonel {
bool initialized;
};
namespace {
float2 GetScaling (ushort2 parRes, ushort2 parRef) __attribute__((pure));
///----------------------------------------------------------------------
///----------------------------------------------------------------------
float2 GetScaling (ushort2 parRes, ushort2 parRef) {
return float2(
static_cast<float>(parRes.x()) / static_cast<float>(parRef.x()),
static_cast<float>(parRes.y()) / static_cast<float>(parRef.y())
);
}
} //unnamed namespace
///------------------------------------------------------------------------
///------------------------------------------------------------------------
SDLMain::SDLMain (const char* parGameName, int parWidth, int parHeight) :
SDLMain::SDLMain (const char* parGameName, ushort2 parRes, ushort2 parReferenceRes) :
m_gameName(parGameName),
m_localData(new LocalData),
m_defWH(parWidth, parHeight)
m_WHScaling(GetScaling(parRes, parReferenceRes)),
m_WH(parRes),
m_WHRef(parReferenceRes)
{
}
@ -60,7 +75,7 @@ namespace cloonel {
throw std::runtime_error(SDL_GetError());
parInitSDL.initialized = true;
SDL_Window* const win = SDL_CreateWindow(m_gameName.c_str(), 100, 100, m_defWH.x(), m_defWH.y(), SDL_WINDOW_SHOWN);
SDL_Window* const win = SDL_CreateWindow(m_gameName.c_str(), 100, 100, m_WH.x(), m_WH.y(), SDL_WINDOW_SHOWN);
if (!win)
throw std::runtime_error(SDL_GetError());
parInitSDL.window = win;

View file

@ -28,12 +28,13 @@ struct SDL_Renderer;
namespace cloonel {
class SDLMain {
public:
SDLMain ( const char* parGameName, int parWidth, int parHeight );
SDLMain ( const char* parGameName, ushort2 parRes, ushort2 parReferenceRes );
~SDLMain ( void ) noexcept;
void Init ( void );
SDL_Renderer* GetRenderer ( void );
const int2& DefWidthHeight ( void ) const { return m_defWH; }
const ushort2& WidthHeight ( void ) const { return m_WH; }
const float2& WHScaling ( void ) const { return m_WHScaling; }
private:
struct LocalData;
@ -43,7 +44,9 @@ namespace cloonel {
const std::string m_gameName;
std::unique_ptr<LocalData> m_localData;
const int2 m_defWH;
float2 m_WHScaling;
ushort2 m_WH;
const ushort2 m_WHRef;
};
} //namespace cloonel

View file

@ -271,7 +271,7 @@ namespace cloonel {
///--------------------------------------------------------------------------
void Texture::Render (int2 parPos, ushort2 parSize) const {
assert(IsLoaded());
const int screenHeight = m_sdlmain->DefWidthHeight().y();
const int screenHeight = m_sdlmain->WidthHeight().y();
const SDL_Rect dest = { parPos.x(), screenHeight - parPos.y() - parSize.y(), parSize.x(), parSize.y() };
SDL_RenderCopy(m_sdlmain->GetRenderer(), m_texture, nullptr, &dest);
}