Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/frontend/StarChatBubbleManager.hpp
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2023-06-20 14:33:09 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2023-06-20 14:33:09 +1000
commit6352e8e3196f78388b6c771073f9e03eaa612673 (patch)
treee23772f79a7fbc41bc9108951e9e136857484bf4 /source/frontend/StarChatBubbleManager.hpp
parent6741a057e5639280d85d0f88ba26f000baa58f61 (diff)
everything everywhere
all at once
Diffstat (limited to 'source/frontend/StarChatBubbleManager.hpp')
-rw-r--r--source/frontend/StarChatBubbleManager.hpp100
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