open-story-teller/story-player-sdl/src/gfx-engine/entity.cpp

69 lines
1.4 KiB
C++

#include "entity.h"
#include "xlog.h"
using namespace gfx;
Entity::Entity(Display &s)
: mSystem(s)
{
mRect.x = 0;
mRect.y = 0;
mRect.w = 0;
mRect.h = 0;
}
Entity::~Entity()
{
mTexture = nullptr;
}
void Entity::OnCreate(SDL_Renderer *renderer)
{
(void) renderer;
mCreated = true;
}
void Entity::ProcessEvent(const SDL_Event &event, const Vector2 &origin)
{
(void) event;
}
void Entity::Update(double deltaTime) { (void) deltaTime; }
void Entity::Draw(SDL_Renderer *renderer, int x_offset, int y_offset)
{
if (!mCreated)
{
OnCreate(renderer);
}
if (IsVisible() && (mTexture != nullptr))
{
SDL_Rect r = GetRect();
r.w *= GetScale().x;
r.h *= GetScale().y;
r.x = GetX() + x_offset;
r.y = GetY() + y_offset;
Render(renderer, r);
}
}
void Entity::SetTexture(SDL_Texture *texture)
{
mTexture = texture;
int w = 0;
int h = 0;
// get the width and height of the texture
if (SDL_QueryTexture(mTexture, NULL, NULL, &w, &h) == 0)
{
SetSize(w, h);
}
}
void Entity::Render(SDL_Renderer *renderer, const SDL_Rect &pos)
{
SDL_SetTextureBlendMode(mTexture, mBlend);
SDL_SetTextureColorMod(mTexture, mColorMod.r, mColorMod.g, mColorMod.b);
SDL_RenderCopyEx(renderer, mTexture, NULL, &pos, GetAngle(), NULL, SDL_FLIP_NONE);
}