aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/graphics/sprite.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin/graphics/sprite.cpp')
-rw-r--r--src/libjin/graphics/sprite.cpp95
1 files changed, 95 insertions, 0 deletions
diff --git a/src/libjin/graphics/sprite.cpp b/src/libjin/graphics/sprite.cpp
new file mode 100644
index 0000000..d74c1ef
--- /dev/null
+++ b/src/libjin/graphics/sprite.cpp
@@ -0,0 +1,95 @@
+#include "graphic.h"
+#include "sprite.h"
+
+using namespace JinEngine::Math;
+using namespace JinEngine::Graphics;
+
+namespace JinEngine
+{
+ namespace Graphics
+ {
+
+ 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)
+ {
+ }
+
+ Sprite::~Sprite()
+ {
+ }
+
+ Math::Vector2<int> Sprite::getSize()
+ {
+ return Math::Vector2<int>(mQuad.w, mQuad.h);
+ }
+
+ void Sprite::render(float x, float y, float sx, float sy, float r) const
+ {
+ if (mGraphic != nullptr)
+ mGraphic->render(mQuad, x, y, sx, sy, r, mOrigin.x(), mOrigin.y());
+ }
+
+ void Sprite::setOrigin(Origin 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 Origin::TOPLEFT:
+ org->set(l, t);
+ break;
+ case Origin::TOPCENTER:
+ org->set(r / 2.f, t);
+ break;
+ case Origin::TOPRIGHT:
+ org->set(r, t);
+ break;
+ case Origin::MIDDLELEFT:
+ org->set(l, b / 2.f);
+ break;
+ case Origin::MIDDLECENTER:
+ org->set(r / 2.f, b / 2.f);
+ break;
+ case Origin::MIDDLERIGHT:
+ org->set(r, b / 2.f);
+ break;
+ case Origin::BOTTOMLEFT:
+ org->set(l, b);
+ break;
+ case Origin::BOTTOMCENTER:
+ org->set(r / 2.f, b);
+ break;
+ case Origin::BOTTOMRIGHT:
+ org->set(r, b);
+ break;
+ }
+ }
+
+ } // namespace Graphics
+} // namespace JinEngine \ No newline at end of file