diff options
Diffstat (limited to 'src/libjin/graphics/je_sprite.cpp')
-rw-r--r-- | src/libjin/graphics/je_sprite.cpp | 122 |
1 files changed, 42 insertions, 80 deletions
diff --git a/src/libjin/graphics/je_sprite.cpp b/src/libjin/graphics/je_sprite.cpp index b92a2c2..b45fdf3 100644 --- a/src/libjin/graphics/je_sprite.cpp +++ b/src/libjin/graphics/je_sprite.cpp @@ -1,19 +1,39 @@ -#include "shaders/je_shader.h" - +#include "je_graphic.h" #include "je_sprite.h" using namespace JinEngine::Math; -using namespace JinEngine::Graphics::Shaders; +using namespace JinEngine::Graphics; namespace JinEngine { namespace Graphics { - Sprite::Sprite() - : mGraphic(nullptr) - , mColor(255, 255, 255, 255) - , mIsOriginEnum(false) + Sprite::Sprite(const Graphic* graphic, const Math::Quad& quad, Origin origin) + : mGraphic(graphic) + , mQuad(quad) + { + setOrigin(origin); + } + + Sprite::Sprite(const Graphic* graphic, const Math::Quad& quad, float ox, float oy) + : mGraphic(graphic) + , mQuad(quad) + , mOrigin(ox, oy) + { + } + + Sprite::Sprite(const Graphic* graphic, Origin origin) + : mGraphic(graphic) + , mQuad(0, 0, graphic->getWidth(), graphic->getHeight()) + { + setOrigin(origin); + } + + Sprite::Sprite(const Graphic* graphic, float ox, float oy) + : mGraphic(graphic) + , mQuad(0, 0, graphic->getWidth(), graphic->getHeight()) + , mOrigin(ox, oy) { } @@ -21,113 +41,55 @@ namespace JinEngine { } - void Sprite::setQuad(int x, int y, int w, int h) + Math::Vector2<int> Sprite::getSize() { - mQuad.x = x; - mQuad.y = y; - mQuad.w = w; - mQuad.h = h; - if (mIsOriginEnum) - setOrigin(mOriginEnum); + return Math::Vector2<int>(mQuad.w, mQuad.h); } - void Sprite::setRotation(float r) + void Sprite::render(float x, float y, float sx, float sy, float r) const { - mTransform.setRotation(r); + if (mGraphic != nullptr) + mGraphic->render(mQuad, x, y, sx, sy, r, mOrigin.x, mOrigin.y); } void Sprite::setOrigin(Origin origin) { - mIsOriginEnum = true; - mOriginEnum = origin; int l = 0, r = 0, t = 0, b = 0; Vector2<int> size = getSize(); r = size.w; b = size.h; + Vector2<float>* org = const_cast<Vector2<float>*>(&mOrigin); switch (origin) { case TopLeft: - mTransform.setOrigin(1, t); + org->set(1, t); break; case TopCenter: - mTransform.setOrigin(r / 2.f, t); + org->set(r / 2.f, t); break; case TopRight: - mTransform.setOrigin(r, t); + org->set(r, t); break; case MiddleLeft: - mTransform.setOrigin(1, b / 2.f); + org->set(1, b / 2.f); break; case MiddleCenter: - mTransform.setOrigin(r / 2.f, b / 2.f); + org->set(r / 2.f, b / 2.f); break; case MiddleRight: - mTransform.setOrigin(r, b / 2.f); + org->set(r, b / 2.f); break; case BottomLeft: - mTransform.setOrigin(l, b); + org->set(l, b); break; case BottomCenter: - mTransform.setOrigin(r / 2.f, b); + org->set(r / 2.f, b); break; case BottomRight: - mTransform.setOrigin(r, b); + org->set(r, b); break; } } - void Sprite::setOrigin(int x, int y) - { - mTransform.setOrigin(x, y); - mIsOriginEnum = false; - } - - void Sprite::setPosition(float x, float y) - { - mTransform.setPosition(x, y); - } - - void Sprite::setScale(float x, float y) - { - mTransform.setScale(x, y); - } - - void Sprite::setColor(Color color) - { - mColor = color; - } - - void Sprite::setGraphic(const Graphic* graphic) - { - mGraphic = graphic; - int w = mGraphic->getWidth(); - int h = mGraphic->getHeight(); - setQuad(0, 0, w, h); - } - - void Sprite::move(float x, float y) - { - mTransform.move(x, y); - } - - void Sprite::rotate(float r) - { - mTransform.rotate(r); - } - - void Sprite::scale(float sx, float sy) - { - mTransform.scale(sx, sy); - } - - void Sprite::render() - { - Color c = gl.getColor(); - gl.setColor(mColor); - if (mGraphic != nullptr) - mGraphic->render(mQuad, mTransform); - gl.setColor(c); - } - } // namespace Graphics } // namespace JinEngine
\ No newline at end of file |