aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/Graphics/je_sprite.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin/Graphics/je_sprite.cpp')
-rw-r--r--src/libjin/Graphics/je_sprite.cpp28
1 files changed, 22 insertions, 6 deletions
diff --git a/src/libjin/Graphics/je_sprite.cpp b/src/libjin/Graphics/je_sprite.cpp
index 9ee4fc1..176447c 100644
--- a/src/libjin/Graphics/je_sprite.cpp
+++ b/src/libjin/Graphics/je_sprite.cpp
@@ -2,6 +2,7 @@
#include "je_sprite.h"
+using namespace JinEngine::Math;
using namespace JinEngine::Graphics::Shaders;
namespace JinEngine
@@ -14,6 +15,7 @@ namespace JinEngine
, mGraphic(nullptr)
, mScale(1, 1)
, mColor(255, 255, 255, 255)
+ , mIsOriginEnum(false)
{
}
@@ -21,6 +23,16 @@ namespace JinEngine
{
}
+ void Sprite::setQuad(int x, int y, int w, int h)
+ {
+ mQuad.x = x;
+ mQuad.y = y;
+ mQuad.w = w;
+ mQuad.h = h;
+ if (mIsOriginEnum)
+ setOrigin(mOriginEnum);
+ }
+
void Sprite::setRotation(float r)
{
mRotation = r;
@@ -28,12 +40,12 @@ namespace JinEngine
void Sprite::setOrigin(Origin origin)
{
+ mIsOriginEnum = true;
+ mOriginEnum = origin;
int l = 0, r = 0, t = 0, b = 0;
- if (mGraphic != nullptr)
- {
- r = mGraphic->getWidth();
- b = mGraphic->getHeight();
- }
+ Vector2<int> size = getSize();
+ r = size.w;
+ b = size.h;
switch (origin)
{
case TopLeft:
@@ -78,6 +90,7 @@ namespace JinEngine
void Sprite::setOrigin(int x, int y)
{
mOrigin.set(x, y);
+ mIsOriginEnum = false;
}
void Sprite::setPosition(int x, int y)
@@ -103,6 +116,9 @@ namespace JinEngine
void Sprite::setGraphic(const Graphic* graphic)
{
mGraphic = graphic;
+ int w = mGraphic->getWidth();
+ int h = mGraphic->getHeight();
+ setQuad(0, 0, w, h);
}
void Sprite::render()
@@ -113,7 +129,7 @@ namespace JinEngine
if(mShader != nullptr)
mShader->use();
if(mGraphic != nullptr)
- mGraphic->render(mPosition.x, mPosition.y, mScale.x, mScale.y, mRotation, mOrigin.x, mOrigin.y);
+ mGraphic->render(mQuad, mPosition.x, mPosition.y, mScale.x, mScale.y, mRotation, mOrigin.x, mOrigin.y);
shader->use();
gl.setColor(c);
}