aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/graphics/sprite.cpp
blob: d74c1ef71e311f1e3680f29f5e2b057e5525bad5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
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