Support texture resizing.

This commit is contained in:
King_DuckZ 2014-02-22 12:25:16 +01:00
parent e2bd48ec90
commit 739b75b0b6
8 changed files with 29 additions and 14 deletions

View file

@ -5,16 +5,18 @@
namespace cloonel {
///-------------------------------------------------------------------------
///-------------------------------------------------------------------------
Character::Character (const std::string& parPath, SDLMain* parMain) :
Character::Character (const std::string& parPath, SDLMain* parMain, ushort2 parSize) :
Placeable(0.0f, 0.0f),
Drawable(parSize),
m_texture(new Texture(parPath, parMain, false))
{
}
///-------------------------------------------------------------------------
///-------------------------------------------------------------------------
Character::Character (const std::string&& parPath, SDLMain* parMain) :
Character::Character (const std::string&& parPath, SDLMain* parMain, ushort2 parSize) :
Placeable(0.0f, 0.0f),
Drawable(parSize),
m_texture(new Texture(parPath, parMain, false))
{
}
@ -27,6 +29,9 @@ namespace cloonel {
///-------------------------------------------------------------------------
///-------------------------------------------------------------------------
void Character::Prepare() {
const SDLMain* const sdlmain = m_texture->SDLObject();
const int2 screensize(sdlmain->DefWidthHeight());
m_texture->Reload();
}
@ -40,6 +45,6 @@ namespace cloonel {
///-------------------------------------------------------------------------
void Character::Draw() const {
const int2 pos(m_pos + 0.5f);
m_texture->Render(pos);
m_texture->Render(pos, m_wh);
}
} //namespace cloonel

View file

@ -13,8 +13,8 @@ namespace cloonel {
class Character : public Placeable, public Drawable {
public:
Character ( const std::string& parPath, SDLMain* parMain );
Character ( const std::string&& parPath, SDLMain* parMain );
Character ( const std::string& parPath, SDLMain* parMain, ushort2 parSize );
Character ( const std::string&& parPath, SDLMain* parMai, ushort2 parSize );
virtual ~Character ( void ) noexcept;
void Prepare ( void );

View file

@ -1,13 +1,21 @@
#ifndef idC5A880D06A03407DB4E9FC21593A47FB
#define idC5A880D06A03407DB4E9FC21593A47FB
#include "vector.hpp"
#include <cstdint>
namespace cloonel {
class Drawable {
public:
Drawable ( void ) = default;
Drawable ( uint16_t parWidth, uint16_t parHeight ) : m_wh(parWidth, parHeight) {}
explicit Drawable ( ushort2 parWH ) : m_wh(parWH) {}
virtual ~Drawable ( void ) noexcept = default;
virtual void Draw ( void ) const = 0;
protected:
ushort2 m_wh;
};
} //namespace cloonel

View file

@ -25,7 +25,7 @@ namespace cloonel {
///--------------------------------------------------------------------------
void GameplaySceneClassic::Prepare() {
std::unique_ptr<MoverSine> moverSine(new MoverSine());
std::unique_ptr<Character> player(new Character("resources/graphics/player.png", SDLObject()));
std::unique_ptr<Character> player(new Character("resources/graphics/player.png", SDLObject(), ushort2(80, 120)));
player->Prepare();
player->SwapMover(moverSine.get());

View file

@ -13,8 +13,7 @@ namespace cloonel {
SDLMain::SDLMain (const char* parGameName, int parWidth, int parHeight) :
m_gameName(parGameName),
m_localData(new LocalData),
m_defWidth(parWidth),
m_defHeight(parHeight)
m_defWH(parWidth, parHeight)
{
}
@ -42,7 +41,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_defWidth, m_defHeight, SDL_WINDOW_SHOWN);
SDL_Window* const win = SDL_CreateWindow(m_gameName.c_str(), 100, 100, m_defWH.x(), m_defWH.y(), SDL_WINDOW_SHOWN);
if (!win)
throw std::runtime_error(SDL_GetError());
parInitSDL.window = win;

View file

@ -1,6 +1,7 @@
#ifndef id8E7A054DAC9040B887F2620EFD229EE8
#define id8E7A054DAC9040B887F2620EFD229EE8
#include "vector.hpp"
#include <memory>
struct SDL_Renderer;
@ -13,6 +14,7 @@ namespace cloonel {
void Init ( void );
SDL_Renderer* GetRenderer ( void );
const int2& DefWidthHeight ( void ) const { return m_defWH; }
private:
struct LocalData;
@ -22,8 +24,7 @@ namespace cloonel {
const std::string m_gameName;
std::unique_ptr<LocalData> m_localData;
const int m_defWidth;
const int m_defHeight;
const int2 m_defWH;
};
} //namespace cloonel

View file

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

View file

@ -17,7 +17,9 @@ namespace cloonel {
void Reload ( void );
void Destroy ( void ) noexcept;
bool IsLoaded ( void ) const { return nullptr != m_texture; }
void Render ( int2 parPos ) const;
void Render ( int2 parPos ) const { Render(parPos, m_size); }
void Render ( int2 parPos, ushort2 parSize ) const;
const SDLMain* SDLObject ( void ) const { return m_sdlmain; }
private:
const std::string m_path;