diff options
-rw-r--r-- | CMakeLists.txt | 1 | ||||
-rw-r--r-- | Canvas.cpp | 4 | ||||
-rw-r--r-- | Deserializer.cpp | 3 | ||||
-rw-r--r-- | Tile.cpp | 7 | ||||
-rw-r--r-- | Tile.h | 7 | ||||
-rw-r--r-- | TileAppearance.cpp | 23 | ||||
-rw-r--r-- | TileAppearance.h | 14 | ||||
-rw-r--r-- | docs/class-diag.puml | 10 |
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 @@ -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); } @@ -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); } @@ -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 |