aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoek Le Blansch <loek@pipeframe.xyz>2024-10-10 00:55:03 +0200
committerLoek Le Blansch <loek@pipeframe.xyz>2024-10-10 00:55:03 +0200
commit112d1a25506dee481b7ab4a95b8146d40eef1e1a (patch)
tree16134f1d43ef095619cf51c5a5c1e21b0324c1ba
parent3d62a3cf54465a521c6c30ae21c80a2e18871478 (diff)
WIP color registering - going to bed
-rw-r--r--CMakeLists.txt1
-rw-r--r--Canvas.cpp4
-rw-r--r--Deserializer.cpp3
-rw-r--r--Tile.cpp7
-rw-r--r--Tile.h7
-rw-r--r--TileAppearance.cpp23
-rw-r--r--TileAppearance.h14
-rw-r--r--docs/class-diag.puml10
8 files changed, 59 insertions, 10 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2cef305..921b6d9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -28,6 +28,7 @@ add_executable(main
# TXTParser.cpp
Deserializer.cpp
Tile.cpp
+ TileAppearance.cpp
)
target_link_libraries(main
diff --git a/Canvas.cpp b/Canvas.cpp
index 0a252b4..b2ab49e 100644
--- a/Canvas.cpp
+++ b/Canvas.cpp
@@ -49,8 +49,8 @@ string Canvas::to_string(bool truecolor) {
if (type_str.length() == 0) type_str = ".";
if (truecolor)
- out += stringf("\e[48;2;%d;%d;%dm", tile.appearance.color.red,
- tile.appearance.color.green, tile.appearance.color.blue);
+ out += stringf("\e[48;2;%d;%d;%dm",
+ tile.color.red, tile.color.green, tile.color.blue);
out += stringf("%-2s ", type_str.c_str());
}
diff --git a/Deserializer.cpp b/Deserializer.cpp
index 89489a5..b8311a5 100644
--- a/Deserializer.cpp
+++ b/Deserializer.cpp
@@ -1,5 +1,6 @@
#include "Deserializer.h"
#include "Exception.h"
+#include "TileAppearance.h"
void Deserializer::set_target(Museum * museum) {
this->museum = museum;
@@ -46,5 +47,7 @@ void Deserializer::add_type(std::string type, Color color, unsigned int weight)
if (type.length() == 0) return;
printf("add type(%s) color(#%02x%02x%02x) weight(%d)...\n", type.c_str(),
color.red, color.green, color.blue, weight);
+
+ TileAppearance::register_color(type, color);
}
diff --git a/Tile.cpp b/Tile.cpp
index 230bd36..fd33423 100644
--- a/Tile.cpp
+++ b/Tile.cpp
@@ -1,12 +1,19 @@
#include <cstdio>
#include "Tile.h"
+#include "TileAppearance.h"
Tile::Tile() {
this->data = {};
+ this->update();
}
Tile::Tile(TileData data) {
this->data = data;
+ this->update();
+}
+
+void Tile::update() {
+ this->color = TileAppearance::get_color(this->data.type);
}
diff --git a/Tile.h b/Tile.h
index ebf00d9..538a857 100644
--- a/Tile.h
+++ b/Tile.h
@@ -2,7 +2,7 @@
#include "TileData.h"
#include "TileBehavior.h"
-#include "TileAppearance.h"
+#include "Color.h"
class Tile {
public:
@@ -11,8 +11,11 @@ public:
public:
TileData data;
- TileAppearance appearance;
+ Color color;
private:
TileBehavior behavior;
+
+public:
+ void update();
};
diff --git a/TileAppearance.cpp b/TileAppearance.cpp
new file mode 100644
index 0000000..988b02f
--- /dev/null
+++ b/TileAppearance.cpp
@@ -0,0 +1,23 @@
+#include "TileAppearance.h"
+
+using namespace std;
+
+Color TileAppearance::get_color(string type) {
+ auto type_map = TileAppearance::get_collection();
+
+ if (type_map.contains(type))
+ return type_map.at(type);
+
+ return {
+ .red = 0xff,
+ .green = 0xff,
+ .blue = 0xff,
+ };
+}
+
+void TileAppearance::register_color(string type, Color color) {
+ auto type_map = TileAppearance::get_collection();
+
+ type_map[type] = color;
+}
+
diff --git a/TileAppearance.h b/TileAppearance.h
index 25db909..8a7a0f7 100644
--- a/TileAppearance.h
+++ b/TileAppearance.h
@@ -1,9 +1,21 @@
#pragma once
+#include <map>
+#include <string>
+
#include "Color.h"
class TileAppearance {
+ typedef std::map<std::string, Color> TileAppearanceCollection;
+
public:
- Color color;
+ static Color get_color(std::string);
+ static void register_color(std::string, Color);
+
+private:
+ static TileAppearanceCollection & get_collection() {
+ static TileAppearanceCollection c = {};
+ return c;
+ }
};
diff --git a/docs/class-diag.puml b/docs/class-diag.puml
index 697e32c..b8e8a63 100644
--- a/docs/class-diag.puml
+++ b/docs/class-diag.puml
@@ -59,8 +59,7 @@ rectangle Group_FileReading as "File reading" <<group>> {
rectangle Group_ParsingDeserialization as "Parsing & deserialization" <<group>> {
class Parser {
+ parse(File, Deserializer) <<static>>
- --
- - register_strategy(ParserStrategy) <<static>>
+ + register_strategy(ParserStrategy) <<static>>
}
interface ParserStrategy {
+ parse(File, Deserializer) <<static>>
@@ -137,12 +136,13 @@ rectangle Group_Model as "Model" <<group>> {
blue : unsigned int
}
class TileAppearance {
- + color : Color
+ + get_color(string) : Color <<static>>
+ + register_color(string, Color) <<static>>
}
- TileAppearance --> Color
+ Tile --> Color
- Tile --> "state" TileAppearance
+ Color <.. TileAppearance
}
rectangle Group_Tile_Behavior as "Tile behavior" <<group>> {
interface TileBehavior