diff options
Diffstat (limited to 'src/libjin/Graphics/je_sprite.cpp')
-rw-r--r-- | src/libjin/Graphics/je_sprite.cpp | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/src/libjin/Graphics/je_sprite.cpp b/src/libjin/Graphics/je_sprite.cpp index 3ac976a..810cb0e 100644 --- a/src/libjin/Graphics/je_sprite.cpp +++ b/src/libjin/Graphics/je_sprite.cpp @@ -1,11 +1,156 @@ +#include "shaders/je_shader.h" + #include "je_sprite.h" +using namespace JinEngine::Math; +using namespace JinEngine::Graphics::Shaders; + namespace JinEngine { namespace Graphics { + Sprite::Sprite() + : mShader(nullptr) + , mGraphic(nullptr) + , mScale(1, 1) + , 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) + { + mRotation = 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: + mOrigin.x = l; + mOrigin.y = t; + break; + case TopCenter: + mOrigin.x = r/2.f; + mOrigin.y = t; + break; + case TopRight: + mOrigin.x = r; + mOrigin.y = t; + break; + case MiddleLeft: + mOrigin.x = l; + mOrigin.y = b/2.f; + break; + case MiddleCenter: + mOrigin.x = r/2.f; + mOrigin.y = b/2.f; + break; + case MiddleRight: + mOrigin.x = r; + mOrigin.y = b/2.f; + break; + case BottomLeft: + mOrigin.x = l; + mOrigin.y = b; + break; + case BottomCenter: + mOrigin.x = r/2.f; + mOrigin.y = b; + break; + case BottomRight: + mOrigin.x = r; + mOrigin.y = b; + break; + } + } + + void Sprite::setOrigin(int x, int y) + { + mOrigin.set(x, y); + mIsOriginEnum = false; + } + + void Sprite::setPosition(float x, float y) + { + mPosition.set(x, y); + } + + void Sprite::setScale(float x, float y) + { + mScale.set(x, y); + } + + void Sprite::setColor(Color color) + { + mColor = color; + } + + void Sprite::setShader(Shader* shader) + { + mShader = shader; + } + + 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) + { + mPosition.x += x; + mPosition.y += y; + } + + void Sprite::rotate(float r) + { + mRotation += r; + } + + void Sprite::scale(float sx, float sy) + { + mScale.x += sx; + mScale.y += sy; + } + void Sprite::render() + { + Shader* shader = Shader::getCurrentShader(); + Color c = gl.getColor(); + gl.setColor(mColor); + if(mShader != nullptr) + mShader->use(); + if(mGraphic != nullptr) + mGraphic->render(mQuad, mPosition.x, mPosition.y, mScale.x, mScale.y, mRotation, mOrigin.x, mOrigin.y); + shader->use(); + gl.setColor(c); + } } // namespace Graphics } // namespace JinEngine
\ No newline at end of file |