aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/Graphics
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin/Graphics')
-rw-r--r--src/libjin/Graphics/je_graphics.h1
-rw-r--r--src/libjin/Graphics/je_sprite.cpp28
-rw-r--r--src/libjin/Graphics/je_sprite.h7
-rw-r--r--src/libjin/Graphics/je_sprite_batch.h17
-rw-r--r--src/libjin/Graphics/je_sprite_sheet.cpp22
-rw-r--r--src/libjin/Graphics/je_sprite_sheet.h19
6 files changed, 73 insertions, 21 deletions
diff --git a/src/libjin/Graphics/je_graphics.h b/src/libjin/Graphics/je_graphics.h
index a46e740..979d8f4 100644
--- a/src/libjin/Graphics/je_graphics.h
+++ b/src/libjin/Graphics/je_graphics.h
@@ -11,6 +11,7 @@
#include "je_bitmap.h"
#include "je_image.h"
#include "je_sprite.h"
+#include "je_sprite_sheet.h"
#include "shaders/je_shader.h"
diff --git a/src/libjin/Graphics/je_sprite.cpp b/src/libjin/Graphics/je_sprite.cpp
index 9ee4fc1..176447c 100644
--- a/src/libjin/Graphics/je_sprite.cpp
+++ b/src/libjin/Graphics/je_sprite.cpp
@@ -2,6 +2,7 @@
#include "je_sprite.h"
+using namespace JinEngine::Math;
using namespace JinEngine::Graphics::Shaders;
namespace JinEngine
@@ -14,6 +15,7 @@ namespace JinEngine
, mGraphic(nullptr)
, mScale(1, 1)
, mColor(255, 255, 255, 255)
+ , mIsOriginEnum(false)
{
}
@@ -21,6 +23,16 @@ namespace JinEngine
{
}
+ 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;
@@ -28,12 +40,12 @@ namespace JinEngine
void Sprite::setOrigin(Origin origin)
{
+ mIsOriginEnum = true;
+ mOriginEnum = origin;
int l = 0, r = 0, t = 0, b = 0;
- if (mGraphic != nullptr)
- {
- r = mGraphic->getWidth();
- b = mGraphic->getHeight();
- }
+ Vector2<int> size = getSize();
+ r = size.w;
+ b = size.h;
switch (origin)
{
case TopLeft:
@@ -78,6 +90,7 @@ namespace JinEngine
void Sprite::setOrigin(int x, int y)
{
mOrigin.set(x, y);
+ mIsOriginEnum = false;
}
void Sprite::setPosition(int x, int y)
@@ -103,6 +116,9 @@ namespace JinEngine
void Sprite::setGraphic(const Graphic* graphic)
{
mGraphic = graphic;
+ int w = mGraphic->getWidth();
+ int h = mGraphic->getHeight();
+ setQuad(0, 0, w, h);
}
void Sprite::render()
@@ -113,7 +129,7 @@ namespace JinEngine
if(mShader != nullptr)
mShader->use();
if(mGraphic != nullptr)
- mGraphic->render(mPosition.x, mPosition.y, mScale.x, mScale.y, mRotation, mOrigin.x, mOrigin.y);
+ mGraphic->render(mQuad, mPosition.x, mPosition.y, mScale.x, mScale.y, mRotation, mOrigin.x, mOrigin.y);
shader->use();
gl.setColor(c);
}
diff --git a/src/libjin/Graphics/je_sprite.h b/src/libjin/Graphics/je_sprite.h
index fad5b44..ad95aa4 100644
--- a/src/libjin/Graphics/je_sprite.h
+++ b/src/libjin/Graphics/je_sprite.h
@@ -34,6 +34,7 @@ namespace JinEngine
BottomRight
};
+ void setQuad(int x, int y, int w, int h);
void setRotation(float r);
void setOrigin(Origin origin);
void setOrigin(int x, int y);
@@ -44,6 +45,8 @@ namespace JinEngine
void setGraphic(const Graphic* graphic);
float getRotation() { return mRotation; }
+ Math::Vector2<int> getSize() { return Math::Vector2<int>(mQuad.w, mQuad.h); }
+ const Math::Quad& getQuad() { return mQuad; }
const Math::Vector2<float>& getPosition() { return mPosition; }
const Math::Vector2<int>& getOrigin() { return mOrigin; }
const Math::Vector2<float>& getScale() { return mScale; }
@@ -61,6 +64,10 @@ namespace JinEngine
Math::Vector2<float> mPosition;
Math::Vector2<int> mOrigin;
Math::Vector2<float> mScale;
+ Math::Quad mQuad;
+
+ bool mIsOriginEnum;
+ Origin mOriginEnum;
float mRotation;
Color mColor;
diff --git a/src/libjin/Graphics/je_sprite_batch.h b/src/libjin/Graphics/je_sprite_batch.h
index e69de29..7c1098b 100644
--- a/src/libjin/Graphics/je_sprite_batch.h
+++ b/src/libjin/Graphics/je_sprite_batch.h
@@ -0,0 +1,17 @@
+#ifndef __JE_GRAPHICS_SPRITE_BATCH_H__
+#define __JE_GRAPHICS_SPRITE_BATCH_H__
+
+namespace JinEngine
+{
+ namespace Graphics
+ {
+
+ class SpriteBatch
+ {
+
+ };
+
+ }
+}
+
+#endif \ No newline at end of file
diff --git a/src/libjin/Graphics/je_sprite_sheet.cpp b/src/libjin/Graphics/je_sprite_sheet.cpp
index e69de29..3a08751 100644
--- a/src/libjin/Graphics/je_sprite_sheet.cpp
+++ b/src/libjin/Graphics/je_sprite_sheet.cpp
@@ -0,0 +1,22 @@
+#include "je_sprite_sheet.h"
+
+namespace JinEngine
+{
+ namespace Graphics
+ {
+
+ SpriteSheet::SpriteSheet(const Graphic* graphic)
+ : mGraphic(graphic)
+ {
+ }
+
+ Sprite* SpriteSheet::createSprite(const Math::Quad& quad)
+ {
+ Sprite* spr = new Sprite();
+ spr->setGraphic(mGraphic);
+ spr->setQuad(quad.x, quad.y, quad.w, quad.h);
+ return spr;
+ }
+
+ }
+} \ No newline at end of file
diff --git a/src/libjin/Graphics/je_sprite_sheet.h b/src/libjin/Graphics/je_sprite_sheet.h
index 76bd022..8c56c51 100644
--- a/src/libjin/Graphics/je_sprite_sheet.h
+++ b/src/libjin/Graphics/je_sprite_sheet.h
@@ -11,7 +11,7 @@ namespace JinEngine
{
namespace Graphics
{
-
+
class SpriteSheet
{
public:
@@ -20,21 +20,10 @@ namespace JinEngine
///
Sprite* createSprite(const Math::Quad& quad);
- private:
- class SpriteInSheet : public Sprite
- {
- public:
-
- private:
- ///
- /// Quad in sprite sheet.
- ///
- Math::Quad quad;
+ SpriteSheet(const Graphic* graphic);
- };
-
- std::vector<SpriteInSheet> mSprites;
- Graphic* mGraphic;
+ private:
+ const Graphic* const mGraphic;
};