289 lines
6.5 KiB
C++
289 lines
6.5 KiB
C++
#include "cSprite.hpp"
|
|
|
|
/*** Custom Header Files ***/
|
|
#include "cRenderer.hpp"
|
|
|
|
using VideoEngine::cSprite;
|
|
using MathEngine::iVector2;
|
|
using MathEngine::iVector4;
|
|
|
|
cSprite::cSprite( VideoEngine::cImage** image, VideoEngine::cCamera** camera /*= nullptr*/ )
|
|
: mpp_image(image), mpp_camera(camera)
|
|
{
|
|
setPosition(0, 0);
|
|
|
|
setStartImageArea(0, 0);
|
|
setEndImageArea(Uint16((*mpp_image)->getWidth()), Uint16((*mpp_image)->getHeight()));
|
|
}
|
|
|
|
cSprite::cSprite( const signed long int xpos /*= 0*/, const signed long int ypos /*= 0*/, const signed long int xarea /*= 0*/,
|
|
const signed long int yarea /*= 0*/, const unsigned long int warea /*= 0*/, const unsigned long int harea /*= 0*/,
|
|
VideoEngine::cImage** image /*= nullptr*/, VideoEngine::cCamera** camera /*= nullptr*/ )
|
|
: mpp_image(image), mpp_camera(camera)
|
|
{
|
|
setPosition(Sint16(xpos), Sint16(ypos));
|
|
|
|
setStartImageArea(Sint16(xarea), Sint16(yarea));
|
|
setEndImageArea(Uint16(warea), Uint16(harea));
|
|
}
|
|
|
|
cSprite::cSprite( const cSprite& copy )
|
|
{
|
|
Copy(copy);
|
|
}
|
|
|
|
cSprite& cSprite::operator=( const cSprite& copy )
|
|
{
|
|
return Copy(copy);
|
|
}
|
|
|
|
cSprite::~cSprite()
|
|
{
|
|
mpp_image = nullptr;
|
|
mpp_camera = nullptr;
|
|
}
|
|
|
|
/// Functions
|
|
cSprite& cSprite::Copy( const cSprite & copy )
|
|
{
|
|
if (this != ©)
|
|
{
|
|
mpp_image = nullptr;
|
|
mpp_camera = nullptr;
|
|
|
|
signed long int x = 0;
|
|
signed long int y = 0;
|
|
|
|
unsigned long int h = 0;
|
|
unsigned long int w = 0;
|
|
|
|
copy.getPosition(x, y);
|
|
setPosition(x, y);
|
|
|
|
copy.getStartImageArea(x, y);
|
|
copy.getEndImageArea(w, h);
|
|
|
|
setStartImageArea(x, y);
|
|
setEndImageArea(w, h);
|
|
|
|
*mpp_image = copy.getImage();
|
|
*mpp_camera = copy.getCamera();
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
void cSprite::Draw()
|
|
{
|
|
//SDL_Texture* texture = (*mpp_image)->getImage();
|
|
|
|
if (mpp_camera != nullptr && *mpp_camera != nullptr) {
|
|
CameraDraw();
|
|
//surface = (*mpp_camera)->getCameraView();
|
|
}
|
|
|
|
if (mpp_image != nullptr && *mpp_image != nullptr) {
|
|
if ((*mpp_image)->getIsSurface() == false)
|
|
cRenderer::Inst().Render((*mpp_image)->getImage(), &m_imageArea, &m_position);
|
|
else
|
|
cRenderer::Inst().Render((*mpp_image)->getSurface(), &m_imageArea, &m_position);
|
|
}
|
|
// cRenderer::Inst().Render((*mpp_image)->getImage(), &m_imageArea, &m_position);
|
|
}
|
|
|
|
void cSprite::CameraDraw()
|
|
{
|
|
if ((mpp_image != nullptr) && (mpp_camera != nullptr) && (*mpp_image != nullptr) && (*mpp_camera != nullptr))
|
|
cRenderer::Inst().RenderToTexture((*mpp_image)->getImage(), &m_imageArea, (*mpp_camera)->getCameraView(), &m_position);
|
|
//RendererDraw( (*mpp_camera)->getCameraView() );
|
|
}
|
|
//
|
|
// void cSprite::RendererDraw( SDL_Renderer* rend )
|
|
// {
|
|
// cVideo::Instance().RenderToTexture()
|
|
// if ((rend != nullptr) && (mpp_image != nullptr) && (*mpp_image != nullptr))
|
|
// Video::Instance().Render((*mpp_image)->getImage(), &m_imageArea, rend, &m_position);
|
|
// }
|
|
|
|
void cSprite::DefaltDraw()
|
|
{
|
|
if (mpp_image != nullptr && *mpp_image != nullptr) {
|
|
if ((*mpp_image)->getIsSurface() == false)
|
|
cRenderer::Inst().Render((*mpp_image)->getImage(), nullptr, nullptr);
|
|
else
|
|
cRenderer::Inst().Render((*mpp_image)->getSurface(), nullptr, nullptr);
|
|
}
|
|
}
|
|
|
|
void cSprite::AddPosX( const signed long int x )
|
|
{
|
|
m_position.x += Sint16(x);
|
|
}
|
|
|
|
void cSprite::AddPosY( const signed long int y )
|
|
{
|
|
m_position.y += Sint16(y);
|
|
}
|
|
|
|
void cSprite::SaveImage( const cString& fileName, const cString& dir /*= ""*/ )
|
|
{
|
|
if (mpp_image != nullptr && *mpp_image != nullptr) {
|
|
SDL_Texture* temp = (*mpp_image)->getImage();//(*mpp_image)->NewImage(this->getImageArea())->getImage();
|
|
|
|
cRenderer::Inst().SaveTexture( temp, fileName, dir );
|
|
}
|
|
}
|
|
|
|
/// Sets
|
|
void cSprite::setPosX( const signed long int x )
|
|
{
|
|
setPosition( x, getPosY());
|
|
}
|
|
|
|
void cSprite::setPosY( const signed long int y )
|
|
{
|
|
setPosition( getPosX(), y );
|
|
}
|
|
|
|
void cSprite::setPosition( const signed long int x, const signed long int y )
|
|
{
|
|
m_position.x = (signed short int)x;
|
|
m_position.y = (signed short int)y;
|
|
setPositionEnd();
|
|
}
|
|
|
|
void cSprite::setPosition( const MathEngine::iVector2& position /*= MathEngine::iVector2(0,0)*/ )
|
|
{
|
|
setPosition(position.x, position.y);
|
|
}
|
|
|
|
void cSprite::setImageArea( const MathEngine::iVector4& area /*= MathEngine::iVector4(0,0,0,0)*/ )
|
|
{
|
|
if (area == iVector4(0,0,0,0)) {
|
|
setStartImageArea(0,0);
|
|
if ((mpp_image != nullptr) && (*mpp_image != nullptr))
|
|
setEndImageArea((*mpp_image)->getWidth(), (*mpp_image)->getHeight());
|
|
} else {
|
|
setStartImageArea( area.x, area.y );
|
|
setEndImageArea( area.z, area.w );
|
|
}
|
|
}
|
|
|
|
/// Top left starting area.
|
|
void cSprite::setStartImageArea( const signed long int x, const signed long int y )
|
|
{
|
|
m_imageArea.x = (signed short int)x;
|
|
m_imageArea.y = (signed short int)y;
|
|
}
|
|
|
|
/// Bottom right image ends.
|
|
void cSprite::setEndImageArea( const unsigned long int w, const unsigned long int h )
|
|
{
|
|
m_imageArea.w = (unsigned short int)w;
|
|
m_imageArea.h = (unsigned short int)h;
|
|
|
|
setPositionEnd();
|
|
}
|
|
|
|
void cSprite::setImage( VideoEngine::cImage** image )
|
|
{
|
|
mpp_image = image;
|
|
}
|
|
|
|
void cSprite::setImage(VideoEngine::cImageFile** image)
|
|
{
|
|
setImage((VideoEngine::cImage**) image);
|
|
}
|
|
|
|
void cSprite::setCamera( VideoEngine::cCamera** camera )
|
|
{
|
|
mpp_camera = camera;
|
|
}
|
|
|
|
/// Gets
|
|
const signed long int cSprite::getPosX() const
|
|
{
|
|
return m_position.x;
|
|
}
|
|
|
|
const signed long int cSprite::getPosY() const
|
|
{
|
|
return m_position.y;
|
|
}
|
|
|
|
void cSprite::getPosition( signed long int& x, signed long int& y ) const
|
|
{
|
|
x = m_position.x;
|
|
y = m_position.y;
|
|
}
|
|
|
|
const MathEngine::iVector4 cSprite::getPosition() const
|
|
{
|
|
return iVector4(m_position);
|
|
}
|
|
|
|
void cSprite::getStartImageArea( signed long int& x, signed long int& y ) const
|
|
{
|
|
x = m_imageArea.x;
|
|
y = m_imageArea.y;
|
|
}
|
|
|
|
void cSprite::getEndImageArea( unsigned long int& w, unsigned long int& h ) const
|
|
{
|
|
w = m_imageArea.w;
|
|
h = m_imageArea.h;
|
|
}
|
|
|
|
const SDL_Rect& cSprite::getImageArea() const
|
|
{
|
|
return m_imageArea;
|
|
}
|
|
|
|
const unsigned long int cSprite::getWidth() const
|
|
{
|
|
return m_imageArea.w;
|
|
}
|
|
|
|
const unsigned long int cSprite::getHeight() const
|
|
{
|
|
return m_imageArea.h;
|
|
}
|
|
|
|
VideoEngine::cImage* cSprite::getImage() const
|
|
{
|
|
if (mpp_image == nullptr)
|
|
return nullptr;
|
|
else
|
|
return (*mpp_image);
|
|
}
|
|
|
|
VideoEngine::cCamera* cSprite::getCamera() const
|
|
{
|
|
if (mpp_camera == nullptr)
|
|
return nullptr;
|
|
else
|
|
return (*mpp_camera);
|
|
}
|
|
|
|
const bool cSprite::getImageSetup() const
|
|
{
|
|
bool rtn = false;
|
|
if ((mpp_image != nullptr) && (*mpp_image != nullptr))
|
|
rtn = true;
|
|
|
|
return rtn;
|
|
}
|
|
|
|
const bool cSprite::getCameraSetup() const
|
|
{
|
|
bool rtn = false;
|
|
if ((mpp_camera != nullptr) && (*mpp_camera != nullptr))
|
|
rtn = true;
|
|
|
|
return rtn;
|
|
}
|
|
|
|
void cSprite::setPositionEnd()
|
|
{
|
|
m_position.w = m_imageArea.w;
|
|
m_position.h = m_imageArea.h;
|
|
} |