-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathgbs.h
More file actions
163 lines (158 loc) · 6.37 KB
/
gbs.h
File metadata and controls
163 lines (158 loc) · 6.37 KB
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#pragma once
#include <stdint.h>
#include <vector>
#include <string>
#include <filesystem>
#include <fstream>
#include <iostream>
#include "reader_writer.h"
namespace fs = std::filesystem;
namespace gbs {
enum config : uint32_t {
None = 0,
add_new_fonts = 1 << 0,
divide_coords = 1 << 1,
calculate_texture_id = 1 << 2,
All = add_new_fonts | divide_coords | calculate_texture_id
};
constexpr config operator|(config a, config b) noexcept {
return static_cast<config>(
static_cast<uint32_t>(a) |
static_cast<uint32_t>(b));
}
constexpr bool has_flag(config value, config flag) noexcept {
return (static_cast<uint32_t>(value) &
static_cast<uint32_t>(flag)) != 0;
}
class gbs_t {
public:
class font_t;
class char_t;
class texture_t;
gbs_t(const fs::path pathtoread);
void write(fs::path const pathtowrite);
private:
void _read();
public:
class font_t {
public:
font_t(std::vector<unsigned char>& buffer, size_t ptr);
private:
void _read(std::vector<unsigned char>& buffer, size_t ptr);
private:
std::string m_gfnt_lable;
uint32_t m_font_lenght;
uint32_t m_font_id;
std::string m_font_name;
uint32_t m_font_size;
uint32_t m_atlas_w;
uint32_t m_atlas_h;
uint32_t m_max_top;
uint32_t m_atlas_count;
uint32_t m_chars_count;
std::vector<char_t> m_chars;
friend gbs_t merge(gbs_t& first_gbs, gbs_t& second_gbs, config config);
public:
std::string gfnt_lable() const { return m_gfnt_lable; }
uint32_t font_lenght() const { return m_font_lenght; }
uint32_t font_id() const { return m_font_id; }
std::string font_name() const { return m_font_name; }
uint32_t font_size() const { return m_font_size; }
uint32_t atlas_w() const { return m_atlas_w; }
uint32_t atlas_h() const { return m_atlas_h; }
uint32_t max_top() const { return m_max_top; }
uint32_t atlas_count() const { return m_atlas_count; }
uint32_t chars_count() const { return m_chars_count; }
std::vector<char_t> chars() const { return m_chars; }
public:
size_t size() const { return m_font_lenght; }
};
class char_t {
public:
char_t(std::vector <unsigned char>& file_buffer, size_t ptr_f);
~char_t() = default;
private:
void _read(std::vector <unsigned char>& file_buffer, size_t ptr_f);
private:
std::string m_char_code;
uint32_t m_is_image_glyph;
uint32_t m_char_x_offset;
uint32_t m_char_y_offset;
uint32_t m_char_w;
uint32_t m_char_h;
uint32_t m_char_top;
uint32_t m_char_advance;
uint32_t m_char_left_bearning;
uint32_t m_char_atlas_index;
friend gbs_t merge(gbs_t& first_gbs, gbs_t& second_gbs, config config);
public:
std::string char_code() const { return m_char_code; }
uint32_t is_image_glyph() const { return m_is_image_glyph; }
uint32_t char_x_offset() const { return m_char_x_offset; }
uint32_t char_y_offset() const { return m_char_y_offset; }
uint32_t char_w() const { return m_char_w; }
uint32_t char_h() const { return m_char_h; }
uint32_t char_top() const { return m_char_top; }
uint32_t char_advance() const { return m_char_advance; }
uint32_t char_left_bearning() const { return m_char_left_bearning; }
uint32_t char_atlas_index() const { return m_char_atlas_index; }
};
class texture_t {
public:
texture_t(std::vector<unsigned char>& buffer, size_t ptr);
private:
void _read(std::vector<unsigned char>& buffer, size_t ptr);
private:
uint16_t m_id;
uint16_t m_type;
std::string m_path;
friend gbs_t merge(gbs_t& first_gbs, gbs_t& second_gbs, config config);
public:
uint16_t id() const { return m_id; }
uint16_t type() const { return m_type; }
std::string path() const { return m_path; }
public:
size_t size() const { return 0x11C; }
};
private:
std::string m_gbsc_header = "CSGG";
uint32_t m_file_size;
std::string m_data_version;
uint32_t m_scene_id;
uint32_t m_fonts_count;
uint32_t m_textures_count;
uint32_t m_sounds_count;
uint32_t m_views_count;
uint32_t m_messages_count;
uint32_t m_fonts_offset;
uint32_t m_textures_offset;
uint32_t m_sounds_offset;
uint32_t m_view_offset;
uint32_t m_messages_offset;
std::vector<font_t> m_fonts;
std::vector<texture_t> m_textures;
friend gbs_t merge(gbs_t& first_gbs, gbs_t& second_gbs, config config);
public:
std::string gbsc_header() const { return m_gbsc_header; }
uint32_t file_size() const { return m_file_size; }
std::string data_version() const { return m_data_version; }
uint32_t scene_id() const { return m_scene_id; }
uint32_t fonts_count() const { return m_fonts_count; }
uint32_t textures_count() const { return m_textures_count; }
uint32_t sounds_count() const { return m_sounds_count; }
uint32_t views_count() const { return m_views_count; }
uint32_t messages_count() const { return m_messages_count; }
uint32_t fonts_offset() const { return m_fonts_offset; }
uint32_t textures_offset() const { return m_textures_offset; }
uint32_t sounds_offset() const { return m_sounds_offset; }
uint32_t view_offset() const { return m_view_offset; }
uint32_t messages_offset() const { return m_messages_offset; }
std::vector<font_t> fonts() const { return m_fonts; }
std::vector<texture_t> textures() const { return m_textures; }
private:
std::vector<unsigned char> file_buffer;
public:
// std::vector<unsigned char> file_buffer() const { return file_buffer; }
};
gbs_t merge(gbs_t& first_gbs, gbs_t& second_gbs, config config = config::None);
}