2
2
#include < cstdint>
3
3
#include < iostream>
4
4
#include < set>
5
+ #include < sstream>
6
+ #include < string>
7
+ #include < string_view>
5
8
#include < context.hpp>
6
9
#include < delta_time.hpp>
7
10
#include < gfx/follow_eye.hpp>
8
11
#include < maths/maths.hpp>
9
12
#include < pini/pini.hpp>
10
13
#include < world_clock/gui.hpp>
11
14
#include < world_clock/io.hpp>
15
+ #include " SFML/Graphics/Color.hpp"
16
+ #include " types.hpp"
12
17
#include " world_clock/world_clock.hpp"
18
+ #include " world_clock/world_hour.hpp"
13
19
14
20
using namespace misc ;
15
21
@@ -120,10 +126,7 @@ u32 random_number(u32 min, u32 max) {
120
126
return uniform_dist (re);
121
127
}
122
128
123
- bool load_timezones (std::filesystem::path const & filename, world_clock_t & clock) {
124
- pn::pini timezones;
125
- if (!timezones.load_file (filename)) { return false ; }
126
-
129
+ bool load_timezones (pn::pini const & timezones, world_clock_t & clock) {
127
130
for (auto & pair : timezones) {
128
131
u32 color = random_number (255 , UINT32_MAX);
129
132
color |= 0xff ;
@@ -132,19 +135,40 @@ bool load_timezones(std::filesystem::path const& filename, world_clock_t& clock)
132
135
}
133
136
return true ;
134
137
}
138
+
139
+ u32 hex_to_int (std::string_view const & hex_value) {
140
+ u32 assigned_color;
141
+ std::stringstream ss;
142
+ ss << std::hex << hex_value;
143
+ ss >> assigned_color;
144
+ return assigned_color;
145
+ }
146
+
147
+ sf::Color generate_color (pn::pini const & colors, world_clock_t const & clock) {
148
+ if (colors.empty ()) { return sf::Color::White; }
149
+ world_hour_t const primary_hour = clock .begin ()->hour ;
150
+ u32 const assigned_color = hex_to_int (colors.get_string (std::to_string (static_cast <int >(primary_hour.hour ()))));
151
+ sf::Color const clock_color (assigned_color);
152
+ return clock_color;
153
+ }
154
+
135
155
int main () {
136
156
misc::context_t ctx (" World Clock" );
137
157
ctx.setVerticalSyncEnabled (true );
138
158
world_clock_t clock ;
139
- load_timezones (" src/timezones.pini" , clock );
159
+ pn::pini colors;
160
+ colors.load_file (" src/colors.pini" );
161
+ pn::pini timezones;
162
+ timezones.load_file (" src/timezones.pini" );
163
+ load_timezones (timezones, clock );
140
164
std::cout << clock << ' \n ' ;
141
165
input_t input;
142
166
delta_time_t dt;
143
167
clock_ticker_t tick{&input, &clock };
144
168
while (ctx.running ()) {
145
169
input.update (ctx.poll ());
146
170
tick (++dt);
147
- if (auto drawer = ctx.drawer ()) {
171
+ if (auto drawer = ctx.drawer (generate_color (colors, clock ) )) {
148
172
world_clock_drawer_t ::in_t in;
149
173
in.blink = tick.blink ();
150
174
in.mouse_pos = ctx.mouse_pos ();
0 commit comments