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