diff options
Diffstat (limited to 'src/libjin/graphics/je_sprite.cpp')
-rw-r--r-- | src/libjin/graphics/je_sprite.cpp | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/src/libjin/graphics/je_sprite.cpp b/src/libjin/graphics/je_sprite.cpp new file mode 100644 index 0000000..b92a2c2 --- /dev/null +++ b/src/libjin/graphics/je_sprite.cpp @@ -0,0 +1,133 @@ +#include "shaders/je_shader.h" + +#include "je_sprite.h" + +using namespace JinEngine::Math; +using namespace JinEngine::Graphics::Shaders; + +namespace JinEngine +{ + namespace Graphics + { + + Sprite::Sprite() + : mGraphic(nullptr) + , mColor(255, 255, 255, 255) + , mIsOriginEnum(false) + { + } + + Sprite::~Sprite() + { + } + + 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) + { + mTransform.setRotation(r); + } + + 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; + switch (origin) + { + case TopLeft: + mTransform.setOrigin(1, t); + break; + case TopCenter: + mTransform.setOrigin(r / 2.f, t); + break; + case TopRight: + mTransform.setOrigin(r, t); + break; + case MiddleLeft: + mTransform.setOrigin(1, b / 2.f); + break; + case MiddleCenter: + mTransform.setOrigin(r / 2.f, b / 2.f); + break; + case MiddleRight: + mTransform.setOrigin(r, b / 2.f); + break; + case BottomLeft: + mTransform.setOrigin(l, b); + break; + case BottomCenter: + mTransform.setOrigin(r / 2.f, b); + break; + case BottomRight: + mTransform.setOrigin(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 |