diff --git a/src/citymania/cm_colour.hpp b/src/citymania/cm_colour.hpp index 79ef6837c5..e74cafec47 100644 --- a/src/citymania/cm_colour.hpp +++ b/src/citymania/cm_colour.hpp @@ -2,11 +2,22 @@ #define CM_COLOUR_HPP #include "../blitter/32bpp_base.hpp" +#include "../palette_func.h" // PC_WHITE, PC_BLACK +#include namespace citymania { extern const uint8_t RGB_TO_M[]; +// ', '.join(["true" if grf.srgb_color_distance(c, (255, 255, 255)) > grf.srgb_color_distance(c, (0, 0, 0)) else "false" for c in grf.PALETTE]) +constexpr std::array IS_M_CLOSER_TO_BLACK = { true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, true, true, true, true, false, false, false, false, true, true, true, true, true, false, false, false, true, true, true, true, true, false, false, false, true, true, true, true, true, true, false, false, false, false, false, false, false, true, true, true, true, true, false, false, true, true, true, true, true, false, false, false, false, false, true, true, true, true, true, true, true, true, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, true, true, true, true, true, false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, true, true, true, true, true, false, true, true, true, true, true, false, false, false, true, true, true, true, false, false, false, false, true, true, true, true, true, true, false, false, false, false, true, true, true, true, false, false, false, false, true, true, true, false, false, false, false, false, true, true, true, false, false, false, false, false, true, true, true, true, true, true, true, true, true, false, false, false, false, false, true, false, false, false, false, false, true, true, true, true, true, true, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true, false, true, true, true, false, false, false, false, true, true, true, true, true, false, true, true, true, true, true, true, false, false, false, true, false }; + +constexpr std::array BLINK_COLOUR = { 141, 7, 9, 10, 11, 12, 13, 14, 2, 2, 3, 4, 5, 6, 6, 8, 22, 22, 135, 210, 2, 3, 16, 18, 29, 30, 59, 31, 69, 24, 25, 26, 37, 38, 38, 39, 104, 32, 33, 35, 77, 47, 166, 166, 49, 49, 41, 41, 42, 125, 55, 85, 86, 37, 120, 65, 69, 104, 24, 25, 78, 120, 121, 197, 60, 54, 55, 27, 85, 28, 126, 78, 79, 79, 167, 167, 167, 178, 71, 72, 94, 94, 95, 95, 95, 209, 80, 81, 101, 102, 31, 103, 69, 80, 81, 82, 101, 102, 103, 103, 69, 96, 97, 98, 36, 111, 37, 120, 121, 121, 39, 105, 79, 120, 167, 167, 167, 178, 122, 122, 61, 108, 79, 79, 167, 167, 168, 71, 133, 134, 134, 177, 177, 128, 16, 18, 142, 142, 143, 143, 143, 136, 136, 171, 150, 150, 151, 151, 152, 152, 144, 200, 154, 156, 213, 213, 212, 153, 128, 154, 155, 157, 166, 166, 180, 180, 180, 124, 35, 7, 174, 143, 176, 176, 170, 130, 131, 132, 77, 166, 166, 166, 165, 165, 180, 180, 180, 180, 62, 63, 27, 65, 53, 61, 62, 62, 55, 55, 204, 151, 151, 152, 152, 152, 198, 154, 80, 81, 83, 84, 19, 157, 156, 154, 154, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 78, 79, 167, 168, 72, 180, 180, 180, 180, 62, 62, 63, 77, 181, 29, 30, 95, 86, 152, 152, 152, 152, 152, 153, 128, 19, 161, 153, 8 }; + +static inline uint8_t GetBlinkColour(uint8_t m) { + return BLINK_COLOUR[m]; +} + static inline uint8_t GetMForRGB(uint8_t r, uint8_t g, uint8_t b) { return RGB_TO_M[((uint)(r & 0xf0) >> 4) | ((uint)g & 0xf0) | ((uint)(b & 0xf0) << 4)]; } @@ -27,8 +38,6 @@ static inline Colour Remap32RGBA(uint r, uint g, uint b, uint a, Colour current, return Remap32RGBANoCheck(r, g, b, a, current, remap); } - - } // namespace citymania #endif diff --git a/src/citymania/cm_minimap.cpp b/src/citymania/cm_minimap.cpp index a2ea68e338..cabf3e5d86 100644 --- a/src/citymania/cm_minimap.cpp +++ b/src/citymania/cm_minimap.cpp @@ -28,6 +28,7 @@ #include +#include "cm_colour.hpp" #include "cm_hotkeys.hpp" #include "cm_minimap.hpp" @@ -854,10 +855,12 @@ inline uint32 SmallMapWindow::GetTileColours(const TileArea &ta) const * This has the highest priority above any value in _tiletype_importance. */ IndustryType type = Industry::GetByTile(ti)->type; if (_legend_from_industries[_industry_to_list_pos[type]].show_on_map) { - if (type == _smallmap_industry_highlight) { - if (_smallmap_industry_highlight_state) return MKCOLOUR_XXXX(PC_WHITE); + auto map_colour = GetIndustrySpec(type)->map_colour; + if (type == _smallmap_industry_highlight && _smallmap_industry_highlight_state) { + Debug(misc, 0, "BLINK {}", map_colour); + return MKCOLOUR_XXXX(GetBlinkColour(map_colour)); } else { - return GetIndustrySpec(type)->map_colour * 0x01010101; + return map_colour * 0x01010101; } } /* Otherwise make it disappear */ @@ -1431,7 +1434,8 @@ void SmallMapWindow::RebuildColourIndexIfNecessary() SetDParam(0, tbl->legend); SetDParam(1, Industry::GetIndustryTypeCount(tbl->type)); if (tbl->show_on_map && tbl->type == _smallmap_industry_highlight) { - legend_colour = _smallmap_industry_highlight_state ? PC_WHITE : PC_BLACK; + auto mc = GetIndustrySpec(tbl->type)->map_colour; + legend_colour = _smallmap_industry_highlight_state ? GetBlinkColour(mc) : mc; } [[ fallthrough ]];