aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/Graphics/je_sprite.cpp
blob: 9ee4fc15da4cccf96d5429423118f7ba26028007 (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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include "shaders/je_shader.h"

#include "je_sprite.h"

using namespace JinEngine::Graphics::Shaders;

namespace JinEngine
{
    namespace Graphics
    {

        Sprite::Sprite()
            : mShader(nullptr)
            , mGraphic(nullptr)
            , mScale(1, 1)
            , mColor(255, 255, 255, 255)
        {
        }

        Sprite::~Sprite()
        {
        }

        void Sprite::setRotation(float r)
        {
            mRotation = r;
        }

        void Sprite::setOrigin(Origin origin)
        {
            int l = 0, r = 0, t = 0, b = 0;
            if (mGraphic != nullptr)
            {
                r = mGraphic->getWidth(); 
                b = mGraphic->getHeight();
            }
            switch (origin)
            {
            case TopLeft:
                mOrigin.x = l;
                mOrigin.y = t;
                break;
            case TopCenter:
                mOrigin.x = r/2.f;
                mOrigin.y = t;
                break;
            case TopRight:
                mOrigin.x = r;
                mOrigin.y = t;
                break;
            case MiddleLeft:
                mOrigin.x = l;
                mOrigin.y = b/2.f;
                break;
            case MiddleCenter:
                mOrigin.x = r/2.f;
                mOrigin.y = b/2.f;
                break;
            case MiddleRight:
                mOrigin.x = r;
                mOrigin.y = b/2.f;
                break;
            case BottomLeft:
                mOrigin.x = l;
                mOrigin.y = b;
                break;
            case BottomCenter:
                mOrigin.x = r/2.f;
                mOrigin.y = b;
                break;
            case BottomRight:
                mOrigin.x = r;
                mOrigin.y = b;
                break;
            }
        }

        void Sprite::setOrigin(int x, int y)
        {
            mOrigin.set(x, y);
        }

        void Sprite::setPosition(int x, int y)
        {
            mPosition.set(x, y);
        }

        void Sprite::setScale(float x, float y)
        {
            mScale.set(x, y);
        }

        void Sprite::setColor(Color color)
        {
            mColor = color;
        }

        void Sprite::setShader(Shader* shader)
        {
            mShader = shader;
        }

        void Sprite::setGraphic(const Graphic* graphic)
        {
            mGraphic = graphic;
        }

        void Sprite::render()
        {
            Shader* shader = Shader::getCurrentShader();
            Color c = gl.getColor();
            gl.setColor(mColor);
            if(mShader != nullptr)
                mShader->use();
            if(mGraphic != nullptr)
                mGraphic->render(mPosition.x, mPosition.y, mScale.x, mScale.y, mRotation, mOrigin.x, mOrigin.y);
            shader->use();
            gl.setColor(c);
        }

    } // namespace Graphics
} // namespace JinEngine