diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-06-20 14:33:09 +1000 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-06-20 14:33:09 +1000 |
commit | 6352e8e3196f78388b6c771073f9e03eaa612673 (patch) | |
tree | e23772f79a7fbc41bc9108951e9e136857484bf4 /source/frontend/StarChatBubbleManager.hpp | |
parent | 6741a057e5639280d85d0f88ba26f000baa58f61 (diff) |
everything everywhere
all at once
Diffstat (limited to 'source/frontend/StarChatBubbleManager.hpp')
-rw-r--r-- | source/frontend/StarChatBubbleManager.hpp | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/source/frontend/StarChatBubbleManager.hpp b/source/frontend/StarChatBubbleManager.hpp new file mode 100644 index 0000000..b23037a --- /dev/null +++ b/source/frontend/StarChatBubbleManager.hpp @@ -0,0 +1,100 @@ +#ifndef STAR_CHAT_BUBBLE_MANAGER_HPP +#define STAR_CHAT_BUBBLE_MANAGER_HPP + +#include "StarChatAction.hpp" +#include "StarTextPainter.hpp" +#include "StarWorldCamera.hpp" +#include "StarChatBubbleSeparation.hpp" +#include "StarStoredFunctions.hpp" + +namespace Star { + +STAR_CLASS(GuiContext); +STAR_CLASS(AssetTextureGroup); +STAR_CLASS(WorldClient); +STAR_CLASS(ChatBubbleManager); + +class ChatBubbleManager { +public: + ChatBubbleManager(); + + void setCamera(WorldCamera const& camera); + + void addChatActions(List<ChatAction> chatActions, bool silent = false); + + void update(WorldClientPtr world); + void render(); + +private: + typedef tuple<String, Vec2F> BubbleImage; + typedef tuple<String, unsigned, Vec4B, bool, Vec2F> BubbleText; + + struct Bubble { + EntityId entity; + String text; + Json config; + float age; + List<BubbleImage> backgroundImages; + List<BubbleText> bubbleText; + bool onscreen; + }; + + struct PortraitBubble { + EntityId entity; + String portrait; + String text; + Vec2F position; + Json config; + float age; + List<BubbleImage> backgroundImages; + List<BubbleText> bubbleText; + bool onscreen; + }; + + // Calculate the alpha for a speech bubble based on distance from player to + // edge of screen + uint8_t calcDistanceFadeAlpha(Vec2F bubbleScreenPosition, StoredFunctionPtr fadeFunction) const; + + RectF bubbleImageRect(Vec2F screenPos, BubbleImage const& bubbleImage, int pixelRatio); + void drawBubbleImage(Vec2F screenPos, BubbleImage const& bubbleImage, int pixelRatio, int alpha); + void drawBubbleText(Vec2F screenPos, BubbleText const& bubbleText, int pixelRatio, int alpha, bool isPortrait); + + GuiContext* m_guiContext; + + WorldCamera m_camera; + + TextPositioning m_textTemplate; + TextPositioning m_portraitTextTemplate; + Color m_color; + int m_fontSize; + Vec2F m_textPadding; + + BubbleSeparator<Bubble> m_bubbles; + int m_zoom; + Vec2F m_bubbleOffset; + float m_maxAge; + float m_portraitMaxAge; + float m_interBubbleMargin; + int m_maxMessagePerEntity; + + Deque<PortraitBubble> m_portraitBubbles; + String m_portraitBackgroundImage; + String m_portraitMoreImage; + Vec2I m_portraitMorePosition; + Vec2I m_portraitBackgroundSize; + Vec2I m_portraitPosition; + Vec2I m_portraitSize; + Vec2I m_portraitTextPosition; + unsigned m_portraitTextWidth; + float m_portraitChatterFramerate; + float m_portraitChatterDuration; + + float m_furthestVisibleTextDistance; // 0.0 is directly over the player, 1.0 + // is the edge of the window + StoredFunctionPtr m_textFadeFunction; + StoredFunctionPtr m_bubbleFadeFunction; +}; + +} + +#endif |