diff options
Diffstat (limited to 'src/libjin/Graphics/je_sprite.cpp')
-rw-r--r-- | src/libjin/Graphics/je_sprite.cpp | 28 |
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); } |