aboutsummaryrefslogtreecommitdiffstats
path: root/yage/base/spritesheet.cpp
blob: 748cdb5c6e1ff237dd2c5bd201705f40ea317f86 (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
/* ----------------------------------------------------------------------------
 * spritesheet.cpp
 *
 * Copyright (c) 2017 Yann Herklotz Grave <ymherklotz@gmail.com>
 * MIT License, see LICENSE file for more details.
 * ----------------------------------------------------------------------------
 */

#include "spritesheet.h"

namespace yage
{

namespace details
{

bool SpriteSheetHandler::Null()
{
    return true;
}

bool SpriteSheetHandler::Bool(bool)
{
    return true;
}

bool SpriteSheetHandler::Int(int i)
{
    return handleNumber(i);
}

bool SpriteSheetHandler::Uint(unsigned u)
{
    return handleNumber(static_cast<int>(u));
}

bool SpriteSheetHandler::Int64(int64_t i)
{
    return handleNumber(static_cast<int>(i));
}

bool SpriteSheetHandler::Uint64(uint64_t u)
{
    return handleNumber(static_cast<int>(u));
}

bool SpriteSheetHandler::Double(double d)
{
    return handleNumber(static_cast<int>(d));
}

bool SpriteSheetHandler::String(const char *, rapidjson::SizeType, bool)
{
    return true;
}

bool SpriteSheetHandler::Key(const char *str, rapidjson::SizeType length, bool)
{
    current_key_ = std::string(str, length);
    return true;
}

bool SpriteSheetHandler::StartObject()
{
    depth_++;

    if(depth_ == 3) {
        current_image_ = current_key_;
    }

    return true;
}

bool SpriteSheetHandler::EndObject(rapidjson::SizeType)
{
    if(depth_ == 3) {
        map_[current_image_] = coord_;
    }
    depth_--;
    return true;
}

bool SpriteSheetHandler::StartArray()
{
    return true;
}

bool SpriteSheetHandler::EndArray(rapidjson::SizeType)
{
    return true;
}

SpriteMap SpriteSheetHandler::spriteMap() const
{
    return map_;
}

bool SpriteSheetHandler::handleNumber(int i)
{
    if(current_key_ == "width") {
        if(depth_ == 1) {
            image_width_ = i;
        } else {
            coord_.width = i;
        }
    } else if(current_key_ == "height") {
        if(depth_ == 1) {
            image_height_ = i;
        } else {
            coord_.height = i;
        }
    } else if(current_key_ == "x") {
        coord_.x = i;
    } else if(current_key_ == "y") {
        coord_.y = i;
    }
    return true;
}

} // namespace details

} // namespace yage