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.cpp145
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