diff options
Diffstat (limited to 'src/libjin/Graphics')
-rw-r--r-- | src/libjin/Graphics/je_graphics.h | 1 | ||||
-rw-r--r-- | src/libjin/Graphics/je_sprite.cpp | 28 | ||||
-rw-r--r-- | src/libjin/Graphics/je_sprite.h | 7 | ||||
-rw-r--r-- | src/libjin/Graphics/je_sprite_batch.h | 17 | ||||
-rw-r--r-- | src/libjin/Graphics/je_sprite_sheet.cpp | 22 | ||||
-rw-r--r-- | src/libjin/Graphics/je_sprite_sheet.h | 19 |
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; }; |