From 112d1a25506dee481b7ab4a95b8146d40eef1e1a Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Thu, 10 Oct 2024 00:55:03 +0200 Subject: WIP color registering - going to bed --- CMakeLists.txt | 1 + Canvas.cpp | 4 ++-- Deserializer.cpp | 3 +++ Tile.cpp | 7 +++++++ Tile.h | 7 +++++-- TileAppearance.cpp | 23 +++++++++++++++++++++++ TileAppearance.h | 14 +++++++++++++- docs/class-diag.puml | 10 +++++----- 8 files changed, 59 insertions(+), 10 deletions(-) create mode 100644 TileAppearance.cpp 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 #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 +#include + #include "Color.h" class TileAppearance { + typedef std::map 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" <> { rectangle Group_ParsingDeserialization as "Parsing & deserialization" <> { class Parser { + parse(File, Deserializer) <> - -- - - register_strategy(ParserStrategy) <> + + register_strategy(ParserStrategy) <> } interface ParserStrategy { + parse(File, Deserializer) <> @@ -137,12 +136,13 @@ rectangle Group_Model as "Model" <> { blue : unsigned int } class TileAppearance { - + color : Color + + get_color(string) : Color <> + + register_color(string, Color) <> } - TileAppearance --> Color + Tile --> Color - Tile --> "state" TileAppearance + Color <.. TileAppearance } rectangle Group_Tile_Behavior as "Tile behavior" <> { interface TileBehavior -- cgit v1.2.3