123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- /*
- * VisualLogger.h, part of VCMI engine
- *
- * Authors: listed in file AUTHORS in main folder
- *
- * License: GNU General Public License v2.0 or later
- * Full text of license available in license.txt file, in main folder
- *
- */
- #pragma once
- #include "../int3.h"
- #include "../constants/EntityIdentifiers.h"
- #include "../battle/BattleHex.h"
- #include "../Color.h"
- VCMI_LIB_NAMESPACE_BEGIN
- class IMapOverlayLogVisualizer
- {
- public:
- virtual void drawLine(int3 start, int3 end) = 0;
- virtual void drawText(int3 tile, int lineNumber, const std::string & text, const std::optional<ColorRGBA> & color) = 0;
- };
- class IBattleOverlayLogVisualizer
- {
- public:
- virtual void drawText(BattleHex tile, int lineNumber, const std::string & text) = 0;
- };
- class DLL_LINKAGE IVisualLogBuilder
- {
- public:
- virtual void addLine(int3 start, int3 end) = 0;
- virtual void addText(int3 tile, const std::string & text, const std::optional<ColorRGBA> & color = {}) = 0;
- virtual void addText(BattleHex tile, const std::string & text) = 0;
- void addText(int3 tile, const std::string & text, PlayerColor background);
- };
- /// The logger is used to show screen overlay
- class DLL_LINKAGE VisualLogger
- {
- private:
- template<typename T>
- struct Line
- {
- T start;
- T end;
- Line(T start, T end)
- :start(start), end(end)
- {
- }
- };
- template<typename T>
- struct Text
- {
- T tile;
- std::string text;
- std::optional<ColorRGBA> background;
- Text(T tile, std::string text, std::optional<ColorRGBA> background)
- :tile(tile), text(text), background(background)
- {
- }
- };
- class VisualLogBuilder : public IVisualLogBuilder
- {
- private:
- std::vector<Line<int3>> & mapLines;
- std::vector<Text<BattleHex>> & battleTexts;
- std::vector<Text<int3>> & mapTexts;
- public:
- VisualLogBuilder(
- std::vector<Line<int3>> & mapLines,
- std::vector<Text<int3>> & mapTexts,
- std::vector<Text<BattleHex>> & battleTexts)
- :mapLines(mapLines), mapTexts(mapTexts), battleTexts(battleTexts)
- {
- }
- void addLine(int3 start, int3 end) override
- {
- mapLines.emplace_back(start, end);
- }
- void addText(BattleHex tile, const std::string & text) override
- {
- battleTexts.emplace_back(tile, text, std::optional<ColorRGBA>());
- }
- void addText(int3 tile, const std::string & text, const std::optional<ColorRGBA> & background) override
- {
- mapTexts.emplace_back(tile, text, background);
- }
- };
- private:
- std::map<std::string, std::vector<Line<int3>>> mapLines;
- std::map<std::string, std::vector<Text<int3>>> mapTexts;
- std::map<std::string, std::vector<Text<BattleHex>>> battleTexts;
- std::mutex mutex;
- std::string keyToShow;
- public:
- void updateWithLock(const std::string & channel, const std::function<void(IVisualLogBuilder & logBuilder)> & func);
- void visualize(IMapOverlayLogVisualizer & visulizer);
- void visualize(IBattleOverlayLogVisualizer & visulizer);
- void setKey(const std::string & key);
- };
- extern DLL_LINKAGE VisualLogger * logVisual;
- VCMI_LIB_NAMESPACE_END
|