Skip to content

Commit c4d42c2

Browse files
committed
change water style
1 parent 9fb61d5 commit c4d42c2

7 files changed

Lines changed: 122 additions & 16 deletions

File tree

CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ set (mapgen_VERSION_PATCH 1)
1313
file(GLOB SOURCE "src/*.cpp" "include/mapgen/*.h")
1414
file(COPY "font.ttf" DESTINATION "bin")
1515
file(COPY "images" DESTINATION "bin")
16+
file(COPY "images" DESTINATION "bin")
17+
file(COPY "src/blur.frag" DESTINATION "bin")
1618

1719
configure_file (
1820
"${PROJECT_SOURCE_DIR}/MapgenConfig.h.in"

mapgen_screenshot.png

524 KB
Loading

src/Painter.cpp

Lines changed: 78 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
#include "mapgen/Walker.hpp"
1717
#include "rang.hpp"
1818

19+
#include <cmath>
20+
1921
// TODO: move ints to utils.cpp
2022
template <typename T> using filterFunc = std::function<bool(T *)>;
2123
template <typename T> using sortFunc = std::function<bool(T *, T *)>;
@@ -52,6 +54,12 @@ class Painter {
5254
bgColor.g = static_cast<sf::Uint8>(color[1] * 255.f);
5355
bgColor.b = static_cast<sf::Uint8>(color[2] * 255.f);
5456
window->clear(bgColor);
57+
58+
char spath[100];
59+
sprintf(spath, "%s/blur.frag", dir.c_str());
60+
61+
shader_blur.loadFromFile(spath, sf::Shader::Type::Fragment);
62+
shader_blur.setUniform("blur_radius", 0.004f);
5563
};
5664

5765
sf::Font sffont;
@@ -69,6 +77,7 @@ class Painter {
6977
bool needUpdate = true;
7078
sf::Clock clock;
7179
std::vector<Walker*> walkers;
80+
sf::Shader shader_blur;
7281

7382
std::string get_selfpath() {
7483
char buff[PATH_MAX];
@@ -113,6 +122,7 @@ class Painter {
113122

114123
public:
115124
std::vector<sf::ConvexShape> polygons;
125+
std::vector<sf::ConvexShape> waterPolygons;
116126
std::vector<sf::ConvexShape> infoPolygons;
117127
std::vector<sf::CircleShape> poi;
118128
std::vector<sf::Sprite> sprites;
@@ -131,6 +141,8 @@ class Painter {
131141
bool states = true;
132142
bool areas = false;
133143
bool showWalkers = true;
144+
bool lables = true;
145+
bool blur = true;
134146

135147
bool isIncreasing{true};
136148

@@ -170,7 +182,7 @@ class Painter {
170182
if (mapgen->map != nullptr) {
171183
sf::Text operation(mapgen->map->status, sffont);
172184
operation.setCharacterSize(20);
173-
operation.setColor(sf::Color::White);
185+
operation.setFillColor(sf::Color::White);
174186

175187
auto middle = (sf::Vector2f(window->getSize())) / 2.f;
176188
operation.setPosition(sf::Vector2f(
@@ -325,8 +337,61 @@ class Painter {
325337
}
326338
}
327339

340+
void drawLables() {
341+
for (auto c : mapgen->map->cities) {
342+
343+
sf::RectangleShape bg;
344+
bg.setFillColor(sf::Color(50,30,22, 200));
345+
if (c->isCapital) {
346+
bg.setOutlineColor(c->region->state->color);
347+
} else {
348+
bg.setOutlineColor(sf::Color(200,200,180, 180));
349+
}
350+
bg.setOutlineThickness(1);
351+
352+
sf::Text label(c->name, sffont);
353+
label.setCharacterSize(10);
354+
label.setFillColor(sf::Color(255,255,220));
355+
label.setPosition(sf::Vector2f(c->region->site->x, c->region->site->y + 10));
356+
357+
bg.setSize(sf::Vector2f(label.getGlobalBounds().width + 8, 18));
358+
bg.setPosition(sf::Vector2f(c->region->site->x - 4, c->region->site->y + 7));
359+
360+
window->draw(bg);
361+
window->draw(label);
362+
}
363+
}
364+
328365
void drawMap() {
329366
if (needUpdate) {
367+
sf::Vector2u windowSize = window->getSize();
368+
for (auto p : waterPolygons) {
369+
window->draw(p);
370+
}
371+
372+
if (blur) {
373+
for (auto p : polygons) {
374+
window->draw(p);
375+
}
376+
cachedMap.create(windowSize.x, windowSize.y);
377+
cachedMap.update(*window);
378+
379+
sf::RectangleShape rectangle;
380+
rectangle.setSize(sf::Vector2f(window->getSize().x, window->getSize().y));
381+
rectangle.setPosition(0, 0);
382+
rectangle.setTexture(&cachedMap);
383+
384+
window->draw(rectangle, &shader_blur);
385+
386+
for (auto p : polygons) {
387+
auto p2 = sf::ConvexShape(p);
388+
p2.setFillColor(bgColor);
389+
p2.setOutlineColor(sf::Color(50,20,0));
390+
p2.setOutlineThickness(2);
391+
window->draw(p2);
392+
}
393+
}
394+
330395
for (auto p : polygons) {
331396
window->draw(p);
332397
}
@@ -339,11 +404,10 @@ class Painter {
339404
window->draw(sprite);
340405
}
341406

342-
// if (info) {
343-
// for (auto p : poi) {
344-
// window->draw(p);
345-
// }
346-
// }
407+
if (lables) {
408+
drawLables();
409+
}
410+
347411
if (states) {
348412
drawBorders();
349413
}
@@ -368,7 +432,6 @@ class Painter {
368432
}
369433
drawMark();
370434

371-
sf::Vector2u windowSize = window->getSize();
372435
cachedMap.create(windowSize.x, windowSize.y);
373436
cachedMap.update(*window);
374437
needUpdate = false;
@@ -377,6 +440,7 @@ class Painter {
377440
rectangle.setSize(sf::Vector2f(window->getSize().x, window->getSize().y));
378441
rectangle.setPosition(0, 0);
379442
rectangle.setTexture(&cachedMap);
443+
380444
window->draw(rectangle);
381445
}
382446
}
@@ -469,7 +533,7 @@ class Painter {
469533
sprintf(mt, "Mapgen [%s] by Averrin", VERSION.c_str());
470534
sf::Text mark(mt, sffont);
471535
mark.setCharacterSize(15);
472-
mark.setColor(sf::Color::White);
536+
mark.setFillColor(sf::Color::White);
473537
mark.setPosition(sf::Vector2f(windowSize.x - 240, windowSize.y - 25));
474538
window->draw(mark);
475539
}
@@ -483,6 +547,7 @@ class Painter {
483547
void update() {
484548
infoPolygons.clear();
485549
polygons.clear();
550+
waterPolygons.clear();
486551
poi.clear();
487552
sprites.clear();
488553
walkers.clear();
@@ -610,7 +675,11 @@ class Painter {
610675
polygon.setFillColor(col);
611676
}
612677
}
613-
polygons.push_back(polygon);
678+
if (region->megaCluster->isLand) {
679+
polygons.push_back(polygon);
680+
} else {
681+
waterPolygons.push_back(polygon);
682+
}
614683
}
615684

616685
needUpdate = true;

src/Walker.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ Walker::Walker(City *c, MapGenerator *m) : mapgen(m) {
1818
// road = *mapgen->select_randomly(s->roads.begin(), s->roads.end());
1919
reverse = rand() % 2 == 0;
2020
shape = new sf::CircleShape(3);
21-
shape->setFillColor(sf::Color::Red);
21+
shape->setFillColor(sf::Color(225,225,190));
22+
shape->setOutlineColor(sf::Color::Black);
23+
shape->setOutlineThickness(1);
2224
road = *select_randomly(c->roads.begin(), c->roads.end());
2325
reverse = road->regions.back()->city == c;
2426
if (reverse) {

src/application.cpp

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ class Application {
105105
void initMapGen() {
106106
seed = std::chrono::system_clock::now().time_since_epoch().count();
107107
mapgen = new MapGenerator(window->getSize().x, window->getSize().y);
108-
//mapgen->setSeed(28167073);
108+
// mapgen->setSeed(28167073);
109109
octaves = mapgen->getOctaveCount();
110110
freq = mapgen->getFrequency();
111111
nPoints = mapgen->getPointCount();
@@ -164,7 +164,15 @@ class Application {
164164
getScreenshot = true;
165165
break;
166166
case sf::Keyboard::W:
167-
painter->showWalkers = ! painter->showWalkers;
167+
painter->showWalkers = !painter->showWalkers;
168+
break;
169+
case sf::Keyboard::N:
170+
painter->lables = !painter->lables;
171+
painter->invalidate();
172+
break;
173+
case sf::Keyboard::B:
174+
painter->blur = !painter->blur;
175+
painter->invalidate();
168176
break;
169177
}
170178
break;
@@ -190,7 +198,7 @@ class Application {
190198

191199
ImGui::DrawTabsBackground();
192200

193-
//TODO: move to separate file
201+
// TODO: move to separate file
194202
if (ImGui::AddTab("Generation")) {
195203
ImGui::Text("Application average %.3f ms/frame (%.1f FPS)",
196204
1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate);
@@ -274,6 +282,7 @@ class Application {
274282
painter->update();
275283
}
276284
ImGui::Checkbox("Walkers*", &painter->showWalkers);
285+
ImGui::Checkbox("Lables", &painter->lables);
277286

278287
ImGui::TreePop();
279288
}
@@ -287,7 +296,11 @@ class Application {
287296
"\n[ESC] for exit\n[S] for save screenshot\n[R] for random "
288297
"map\n[U] toggle ui\n[H] toggle humidity\n[I] toggle info\n[P] "
289298
"toggle pathes\n[RCLICK] toggle selection lock\n"
290-
"[M] for distance ruler");
299+
"[M] for distance ruler\n"
300+
"[W] toggle walkers\n"
301+
"[B] toggle water blur\n"
302+
"[N] toggle labels\n"
303+
"[A] show state clusters\n");
291304
}
292305

293306
if (ImGui::AddTab("Simulation")) {
@@ -367,7 +380,7 @@ class Application {
367380
mg::getDistance(rulerRegion->site, currentRegion->site));
368381
sf::Text mark(mt, painter->sffont);
369382
mark.setCharacterSize(15);
370-
mark.setColor(sf::Color::Black);
383+
mark.setFillColor(sf::Color::Black);
371384
mark.setPosition(line[1].position + sf::Vector2f(15.f, 15.f));
372385
window->draw(mark);
373386
}

src/blur.frag

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
uniform sampler2D texture;
2+
uniform float blur_radius;
3+
4+
void main()
5+
{
6+
vec2 offx = vec2(blur_radius, 0.0);
7+
vec2 offy = vec2(0.0, blur_radius);
8+
9+
vec4 pixel = texture2D(texture, gl_TexCoord[0].xy) * 4.0 +
10+
texture2D(texture, gl_TexCoord[0].xy - offx) * 2.0 +
11+
texture2D(texture, gl_TexCoord[0].xy + offx) * 2.0 +
12+
texture2D(texture, gl_TexCoord[0].xy - offy) * 2.0 +
13+
texture2D(texture, gl_TexCoord[0].xy + offy) * 2.0 +
14+
texture2D(texture, gl_TexCoord[0].xy - offx - offy) * 1.0 +
15+
texture2D(texture, gl_TexCoord[0].xy - offx + offy) * 1.0 +
16+
texture2D(texture, gl_TexCoord[0].xy + offx - offy) * 1.0 +
17+
texture2D(texture, gl_TexCoord[0].xy + offx + offy) * 1.0;
18+
19+
gl_FragColor = gl_Color * (pixel / 16.0);
20+
}

src/main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include "application.cpp"
22

3-
std::string VERSION = "0.5.3";
3+
std::string VERSION = "0.6.1";
44

55
int main()
66
{

0 commit comments

Comments
 (0)