-
Notifications
You must be signed in to change notification settings - Fork 0
/
bitmaps.cpp
executable file
·107 lines (86 loc) · 2.57 KB
/
bitmaps.cpp
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
#include <cassert>
#include <fstream>
#include "bitmaps.hpp"
using namespace std;
using namespace cnv;
std::vector<cnv::Image*> Bitmaps::find (Id id) const // возвращает пак картинок по id
{
/* Завершает программу с ошибкой, если запрошенного пака не существует.
Используется только в самом классе, в случаях, когда надо безопасно
обратиться к существующему паку.
*/
assert (bitmaps_.find(id) != bitmaps_.end() && "Bitmaps: ID not found");
return bitmaps_.find(id)->second;
}
int Bitmaps::size (Id id) const // размер конкретного пака картинок по id
{
return find(id).size();
}
void Bitmaps::draw (Id id, int frame, int x, int y) const
{
color (1, 1, 1);
find(id).at(frame)->draw (x, y, getScale());
}
void Bitmaps::load()
{
ifstream imglist ("img/img.txt");
assert (imglist.good() && "Bitmaps: 'img.txt' not found");
string img;
int id;
vector<Image*> pack;
/*
Список картинок построен по следующему принципу:
# BEGIN COMMENT(string)
ID(int)
path/to/file
# END COMMENT
Комментарии после BEGIN и END обязательны, но нести смысловую нагрузку
не обязаны, как и совпадать. В приложенном файле они соответствуют имени
константы, указанной в строке ID.
*/
while (imglist >> img)
{
if (img == "#")
{
imglist >> img;
if (img == "END_OF_FILE") break;
else if (img == "BEGIN")
{
imglist >> img; // выкидывает коммент
imglist >> id; // и считывает id
}
else if (img == "END")
{
imglist >> img; // выкидывает коммент
bitmaps_[id] = pack; //копирует временный пак в map
pack.clear();
}
}
else pack.push_back (new Image (img)); // загружает картинку во временный пак
}
}
/*** namespace bitmaps ***/
void bitmaps::load ()
{
Bitmaps::inst().load();
}
void bitmaps::draw (Id id, int frame, int x, int y)
{
Bitmaps::inst().draw (id, frame, x, y);
}
int bitmaps::size (Id id)
{
return Bitmaps::inst().size (id);
}
size_t bitmaps::getWindowSize()
{
return Bitmaps::inst().getWindowSize();
}
void bitmaps::setWindowSize(size_t size)
{
Bitmaps::inst().setWindowSize (size);
}
float bitmaps::getScale()
{
return Bitmaps::inst().getScale();
}