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