From 2636bf475c8b4b03ee869a5db2f5fdd891ed9f97 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期四, 04 十二月 2025 09:19:35 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.1.20:10010/r/Project_SG_scripts
---
Main/System/Chat/ChatBubbleBehaviour.cs | 426 ++++++++++++++++++++++++----------------------------
1 files changed, 196 insertions(+), 230 deletions(-)
diff --git a/Main/System/Chat/ChatBubbleBehaviour.cs b/Main/System/Chat/ChatBubbleBehaviour.cs
index 4d4d25b..9178ac3 100644
--- a/Main/System/Chat/ChatBubbleBehaviour.cs
+++ b/Main/System/Chat/ChatBubbleBehaviour.cs
@@ -1,257 +1,223 @@
锘縰sing System.Collections;
-using System.Collections.Generic;
-
using UnityEngine;
using UnityEngine.UI;
- [DisallowMultipleComponent]
- [RequireComponent(typeof(RectTransform))]
- [ExecuteAlways]
- public class ChatBubbleBehaviour : MonoBehaviour
+
+[DisallowMultipleComponent]
+[RequireComponent(typeof(RectTransform))]
+[ExecuteAlways]
+public class ChatBubbleBehaviour : MonoBehaviour
+{
+ [SerializeField] Text m_Target;
+ [SerializeField] RectOffset m_Padding;
+ [SerializeField] ImageEx m_BubbleIcon;
+ [SerializeField] UIFrame m_UIFrame;
+ [SerializeField] bool left = false;
+ [SerializeField] bool m_PreferredWidth = false;
+
+ RectTransform m_Rect;
+ RectTransform rect
{
- [SerializeField] Text m_Target;
- [SerializeField] RectOffset m_Padding;
- [SerializeField] FlipImage m_Flip;
- [SerializeField] Image m_BubbleIcon;
- [SerializeField] bool left = false;
- [SerializeField] bool m_PreferredWidth = false;
- [SerializeField] RectTransform m_ContainerVoice;
-
- const float space = 5.0f;
-
- private int bubbleId = 0;
-
- RectTransform m_Rect;
- RectTransform rect
+ get
{
- get
+ if (m_Rect == null)
{
- if (m_Rect == null)
- {
- m_Rect = transform as RectTransform;
- }
- return m_Rect;
+ m_Rect = transform as RectTransform;
}
+ return m_Rect;
+ }
+ }
+
+ public RectOffset padding
+ {
+ get { return m_Padding; }
+ }
+
+ private void OnEnable()
+ {
+ Refresh();
+ }
+
+ public void DisplayContent(string content, bool _left = false)
+ {
+ if (m_Target == null)
+ {
+ return;
+ }
+ left = _left;
+ m_PreferredWidth = true;
+ var richText = m_Target as RichText;
+ if (richText != null && !left)
+ {
+ richText.AutoNewLine = false;
+ }
+ m_Target.text = content;
+
+ if (richText != null)
+ {
+ richText.AutoNewLine = true;
}
- public RectOffset padding
+ Refresh();
+ }
+ public void DisplaySysBubble(int id, Color color)
+ {
+ ChatBubbleData bubble;
+ if (ChatManager.Instance.TryGetBubble(id, out bubble))
{
- get { return m_Padding; }
- }
+ var bubblePadding = left ? bubble.leftPadding : bubble.rifhtPadding;
+ padding.top = bubblePadding.top;
+ padding.left = bubblePadding.left;
+ padding.right = bubblePadding.right;
+ padding.bottom = bubblePadding.bottom;
- private void OnEnable()
- {
- Refresh();
- }
- public void DisplayContent(string content, bool _left = false)
- {
- if (m_Target == null)
+ int resourceType = PhantasmPavilionManager.Instance.GetResourceType(PhantasmPavilionType.ChatBox, id);
+ string resourceValue = PhantasmPavilionManager.Instance.GetResourceValue(PhantasmPavilionType.ChatBox, id);
+ PhantasmPavilionManager.Instance.ShowChatBox(m_BubbleIcon, m_UIFrame, resourceType, resourceValue);
+
+ m_Target.color = color;
+
+ var position = rect.anchoredPosition;
+ if (rect.anchoredPosition != position)
{
- return;
- }
- left = _left;
- m_PreferredWidth = true;
- var targetRect = m_Target.rectTransform;
- var richText = m_Target as RichText;
- if (richText != null && !left)
- {
- richText.AutoNewLine = false;
- }
- m_Target.text = content;
- if (!left)
- {
- if (m_Target.preferredWidth > targetRect.rect.width)
- {
- m_Target.alignment = TextAnchor.UpperLeft;
- m_PreferredWidth = false;
- }
- else
- {
- m_Target.alignment = TextAnchor.UpperRight;
- }
- }
- if (richText != null)
- {
- richText.AutoNewLine = true;
+ rect.anchoredPosition = position;
}
Refresh();
}
-
- public void DisplayBubble(int id)
+ }
+ public void DisplayBubble(int id, int playerId)
+ {
+ ChatBubbleData bubble;
+ if (ChatManager.Instance.TryGetBubble(id, out bubble))
{
- bubbleId = id;
- ChatBubbleManager.ChatBubble bubble;
- if (ChatBubbleManager.Instance.TryGetBubble(id, out bubble))
+ var bubblePadding = left ? bubble.leftPadding : bubble.rifhtPadding;
+ padding.top = bubblePadding.top;
+ padding.left = bubblePadding.left;
+ padding.right = bubblePadding.right;
+ padding.bottom = bubblePadding.bottom;
+
+
+ int resourceType = PhantasmPavilionManager.Instance.GetResourceType(PhantasmPavilionType.ChatBox, id);
+ string resourceValue = PhantasmPavilionManager.Instance.GetResourceValue(PhantasmPavilionType.ChatBox, id);
+ PhantasmPavilionManager.Instance.ShowChatBox(m_BubbleIcon, m_UIFrame, resourceType, resourceValue);
+
+ if (playerId == PlayerDatas.Instance.PlayerId)
{
- var bubblePadding = left ? bubble.leftPadding : bubble.rifhtPadding;
- padding.top = bubblePadding.top;
- padding.left = bubblePadding.left;
- padding.right = bubblePadding.right;
- padding.bottom = bubblePadding.bottom;
-
- bool requireFlip = false;
- var iconKey = bubble.GetBubbleIcon(left, ref requireFlip);
-
- //m_BubbleIcon.SetSprite(iconKey);
-
-
- UIFrame frame = m_BubbleIcon.GetComponent<UIFrame>();
- if (UIFrameMgr.Inst.ContainsDynamicImage(iconKey))
- {
- if (frame == null)
- frame = m_BubbleIcon.gameObject.AddComponent<UIFrame>();
- frame.ResetFrame(iconKey);
- frame.enabled = true;
- }
- else
- {
- if (frame != null)
- frame.enabled = false;
- m_BubbleIcon.SetSprite(iconKey);
- }
- m_Flip.flipHorizontal = requireFlip;
- m_Target.color = bubble.color;
-
- var position = rect.anchoredPosition;
- // TODO YYL
- // ChatBubbleBoxConfig config = ChatBubbleBoxConfig.Get(bubbleId);
- // position.y = -config.top;
- if (rect.anchoredPosition != position)
- {
- rect.anchoredPosition = position;
- }
-
- Refresh();
- }
- }
-
- [ExecuteAlways]
- private void LateUpdate()
- {
- Refresh();
- }
-
- void Refresh()
- {
- if (m_Target == null)
- {
- return;
- }
- bool nullContent = string.IsNullOrEmpty(m_Target.text);
-
- var targetRect = m_Target.rectTransform;
- var sizeDelta = targetRect.sizeDelta;
-
- var width = m_PreferredWidth || !Application.isPlaying ? m_Target.preferredWidth : sizeDelta.x;
- if (nullContent)
- {
- width = 0f;
- }
- var height = sizeDelta.y;
- if (nullContent)
- {
- height = 0;
- }
-
- if (m_ContainerVoice != null)
- {
- width = Mathf.Max(m_ContainerVoice.sizeDelta.x, width);
- height += m_ContainerVoice.sizeDelta.y;
- if (!nullContent)
- {
- height += space;
- }
- }
-
- sizeDelta.x = width + m_Padding.left + m_Padding.right;
- sizeDelta.y = height + m_Padding.top + m_Padding.bottom;
- if (sizeDelta != rect.sizeDelta)
- {
- rect.sizeDelta = sizeDelta;
- }
-
- SetAnchor(m_Target.rectTransform);
- if (m_ContainerVoice != null)
- {
- SetAnchor(m_ContainerVoice);
- }
-
- float top = padding.top;
- Vector2 position = Vector2.zero;
- position.x = left ? padding.left : -padding.right;
- if (m_ContainerVoice != null)
- {
- position.y = -top;
- if (m_ContainerVoice.anchoredPosition != position)
- {
- m_ContainerVoice.anchoredPosition = position;
- }
- top = top + m_ContainerVoice.sizeDelta.y;
- top += space;
- }
- position.y = -top;
- if (targetRect.anchoredPosition != position)
- {
- targetRect.anchoredPosition = position;
- }
- }
-
- void SetAnchor(RectTransform targetRect)
- {
- if (!left)
- {
- if (targetRect.anchorMin != Vector2.one)
- {
- targetRect.anchorMin = Vector2.one;
- }
- if (targetRect.anchorMax != Vector2.one)
- {
- targetRect.anchorMax = Vector2.one;
- }
- if (targetRect.pivot != Vector2.one)
- {
- targetRect.pivot = Vector2.one;
- }
+ m_Target.color = bubble.myColor;
}
else
{
- if (targetRect.anchorMin != Vector2.up)
- {
- targetRect.anchorMin = Vector2.up;
- }
- if (targetRect.anchorMax != Vector2.up)
- {
- targetRect.anchorMax = Vector2.up;
- }
- if (targetRect.pivot != Vector2.up)
- {
- targetRect.pivot = Vector2.up;
- }
+ m_Target.color = bubble.otherColor;
}
+
+ var position = rect.anchoredPosition;
+ position.y = -bubble.top;
+ if (rect.anchoredPosition != position)
+ {
+ rect.anchoredPosition = position;
+ }
+
+ Refresh();
+ }
+ }
+
+ [ExecuteAlways]
+ private void LateUpdate()
+ {
+ Refresh();
+ }
+
+ void Refresh()
+ {
+ if (m_Target == null)
+ {
+ return;
+ }
+ bool nullContent = string.IsNullOrEmpty(m_Target.text);
+
+ var targetRect = m_Target.rectTransform;
+ var sizeDelta = targetRect.sizeDelta;
+
+ var width = m_PreferredWidth || !Application.isPlaying ? m_Target.preferredWidth : sizeDelta.x;
+ if (nullContent)
+ {
+ width = 0f;
+ }
+ var height = sizeDelta.y;
+ if (nullContent)
+ {
+ height = 0;
}
- public float GetBubbleHeight(string content, ArrayList list)
+ sizeDelta.x = width + m_Padding.left + m_Padding.right;
+ sizeDelta.y = height + m_Padding.top + m_Padding.bottom;
+ if (sizeDelta != rect.sizeDelta)
{
- if (m_Target is RichText)
- {
- (m_Target as RichText).SetExtenalData(list);
- }
- m_Target.text = content;
- var height = m_Target.preferredHeight;
- bool nullContent = string.IsNullOrEmpty(content);
- if (nullContent)
- {
- height = 0f;
- }
- if (m_ContainerVoice != null)
- {
- height += m_ContainerVoice.sizeDelta.y;
- if (!nullContent)
- {
- height += space;
- }
- }
- return height + padding.top + padding.bottom;
+ rect.sizeDelta = sizeDelta;
}
- }
\ No newline at end of file
+
+ SetAnchor(m_Target.rectTransform);
+
+ float top = padding.top;
+ Vector2 position = Vector2.zero;
+ position.x = left ? padding.left : -padding.right;
+
+ position.y = -top;
+ if (targetRect.anchoredPosition != position)
+ {
+ targetRect.anchoredPosition = position;
+ }
+ }
+
+ void SetAnchor(RectTransform targetRect)
+ {
+ if (!left)
+ {
+ if (targetRect.anchorMin != Vector2.one)
+ {
+ targetRect.anchorMin = Vector2.one;
+ }
+ if (targetRect.anchorMax != Vector2.one)
+ {
+ targetRect.anchorMax = Vector2.one;
+ }
+ if (targetRect.pivot != Vector2.one)
+ {
+ targetRect.pivot = Vector2.one;
+ }
+ }
+ else
+ {
+ if (targetRect.anchorMin != Vector2.up)
+ {
+ targetRect.anchorMin = Vector2.up;
+ }
+ if (targetRect.anchorMax != Vector2.up)
+ {
+ targetRect.anchorMax = Vector2.up;
+ }
+ if (targetRect.pivot != Vector2.up)
+ {
+ targetRect.pivot = Vector2.up;
+ }
+ }
+ }
+
+ public float GetBubbleHeight(string content, ArrayList list)
+ {
+ if (m_Target is RichText)
+ {
+ (m_Target as RichText).SetExtenalData(list);
+ }
+ m_Target.text = content;
+ var height = m_Target.preferredHeight;
+ bool nullContent = string.IsNullOrEmpty(content);
+ if (nullContent)
+ {
+ height = 0f;
+ }
+ //Debug.Log($"GetBubbleHeight {height + padding.top + padding.bottom} height {height} padding.top {padding.top} padding.bottom {padding.bottom}");
+ return height + padding.top + padding.bottom;
+ }
+}
\ No newline at end of file
--
Gitblit v1.8.0