Преглед на файлове

Added ID and group to Activity Message

jamesperet преди 2 години
родител
ревизия
a63ef40d12

+ 35 - 24
Prefabs/ActivityMessage.prefab

@@ -33,10 +33,10 @@ RectTransform:
   m_Father: {fileID: 6443834885651354899}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 0, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 140.35, y: -41.755}
+  m_SizeDelta: {x: 276.7, y: 79.51}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &4698823716394155074
 CanvasRenderer:
@@ -61,23 +61,23 @@ MonoBehaviour:
   m_Material: {fileID: 0}
   m_Color: {r: 1, g: 1, b: 1, a: 1}
   m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
   m_Maskable: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
-  m_text: "<size=30><sprite=5></size> <b>New Clue:</b> Steins of blood on \nthe sink
-    left by the killer washing \nhis hands aftwards"
+  m_text: "<b>New Clue:</b> Steins of blood on \nthe sink left by the killer washing
+    \nhis hands aftwards"
   m_isRightToLeft: 0
-  m_fontAsset: {fileID: 11400000, guid: 9e763638319e10443abbee71efdadc5b, type: 2}
-  m_sharedMaterial: {fileID: 1867558077309050534, guid: 9e763638319e10443abbee71efdadc5b,
-    type: 2}
+  m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
+  m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
   m_fontSharedMaterials: []
   m_fontMaterial: {fileID: 0}
   m_fontMaterials: []
   m_fontColor32:
     serializedVersion: 2
-    rgba: 16777215
-  m_fontColor: {r: 1, g: 1, b: 1, a: 0}
+    rgba: 4294967295
+  m_fontColor: {r: 1, g: 1, b: 1, a: 1}
   m_enableVertexGradient: 0
   m_colorMode: 3
   m_fontColorGradient:
@@ -130,7 +130,7 @@ MonoBehaviour:
   m_VertexBufferAutoSizeReduction: 1
   m_useMaxVisibleDescender: 1
   m_pageToDisplay: 1
-  m_margin: {x: 10, y: 8, z: 8, w: 8}
+  m_margin: {x: 10, y: 8, z: 8, w: 10}
   m_isUsingLegacyAnimationComponent: 0
   m_isVolumetricText: 0
   m_hasFontAssetChanged: 0
@@ -210,7 +210,7 @@ RectTransform:
   m_GameObject: {fileID: 3358351919906791836}
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
-  m_LocalScale: {x: 0.8, y: 0.8, z: 0.8}
+  m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children:
   - {fileID: 6545386760744466189}
   m_Father: {fileID: 0}
@@ -242,13 +242,14 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 0}
+  m_Color: {r: 0.8207547, g: 0.8207547, b: 0.8207547, a: 1}
   m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
   m_Maskable: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
-  m_Sprite: {fileID: 21300000, guid: 6fc45c9721fda3f4a97804fc3535a740, type: 3}
+  m_Sprite: {fileID: 21300000, guid: 09d958a2dd49892409cae61293913a0f, type: 3}
   m_Type: 1
   m_PreserveAspect: 0
   m_FillCenter: 1
@@ -257,7 +258,7 @@ MonoBehaviour:
   m_FillClockwise: 1
   m_FillOrigin: 0
   m_UseSpriteMesh: 0
-  m_PixelsPerUnitMultiplier: 2
+  m_PixelsPerUnitMultiplier: 1
 --- !u!114 &7323877514386933844
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -271,7 +272,8 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   m_Navigation:
-    m_Mode: 3
+    m_Mode: 0
+    m_WrapAround: 0
     m_SelectOnUp: {fileID: 0}
     m_SelectOnDown: {fileID: 0}
     m_SelectOnLeft: {fileID: 0}
@@ -286,11 +288,10 @@ MonoBehaviour:
     m_ColorMultiplier: 1
     m_FadeDuration: 0.1
   m_SpriteState:
-    m_HighlightedSprite: {fileID: 21300000, guid: 6e51d147d909c1043a82cfcde36a4f8b,
-      type: 3}
-    m_PressedSprite: {fileID: 21300000, guid: 55f8b441584104c4ab85039a0e8b2fcf, type: 3}
-    m_SelectedSprite: {fileID: 21300000, guid: 353576b41b7482140b91077a2fff93cb, type: 3}
-    m_DisabledSprite: {fileID: 21300000, guid: 19335ad27efccc0419ea918d2127d541, type: 3}
+    m_HighlightedSprite: {fileID: 21300000, guid: 151dded6c4510f74291cd8ce9ebfebae, type: 3}
+    m_PressedSprite: {fileID: 21300000, guid: a61c56481268fb749998efa8aef0c72e, type: 3}
+    m_SelectedSprite: {fileID: 21300000, guid: 7c07987884e204b428123addcda05e88, type: 3}
+    m_DisabledSprite: {fileID: 21300000, guid: 8eb64a9caded62e4f87634df9bbe2417, type: 3}
   m_AnimationTriggers:
     m_NormalTrigger: Normal
     m_HighlightedTrigger: Highlighted
@@ -302,7 +303,9 @@ MonoBehaviour:
   m_OnClick:
     m_PersistentCalls:
       m_Calls:
-      - m_Target: {fileID: 0}
+      - m_Target: {fileID: 892465510631762317}
+        m_TargetAssemblyTypeName: KairoEngine.UI.ActivityMessages.ActivityMessageUi,
+          KairoEngine.UI
         m_MethodName: OnClick
         m_Mode: 1
         m_Arguments:
@@ -338,6 +341,7 @@ MonoBehaviour:
   m_ChildControlHeight: 1
   m_ChildScaleWidth: 0
   m_ChildScaleHeight: 0
+  m_ReverseArrangement: 0
 --- !u!114 &892465510631762317
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -354,8 +358,15 @@ MonoBehaviour:
   buttonImage: {fileID: 4493079208567175465}
   message:
     text: 
-  autoHide: 1
+    id: 
+    group: 
+    prefab: 
+    icon: {fileID: 0}
+    time: 0
+    sticky: 0
+  autoHide: 0
   hideTimer: 5
   fadeIn: 1
   fadeOut: 1
+  hideOnClick: 1
   fadeTimer: 0.1

+ 28 - 3
Runtime/ActivityMessages/ActivityMessage.cs

@@ -1,17 +1,42 @@
-using System.Collections;
+using System;
+using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
+using Sirenix.OdinInspector;
 
 namespace KairoEngine.UI.ActivityMessages
 {
     [System.Serializable]
     public class ActivityMessage
     {
-        public string text;
+        [FoldoutGroup("@GetTitle()")] public string text;
+        [FoldoutGroup("@GetTitle()")] public string id;
+        [FoldoutGroup("@GetTitle()")] public string group;
+        [FoldoutGroup("@GetTitle()")] public string prefab;
+        [FoldoutGroup("@GetTitle()")] public Sprite icon;
+        [FoldoutGroup("@GetTitle()")] public float time;
+        [FoldoutGroup("@GetTitle()")] public bool sticky;
+        [FoldoutGroup("@GetTitle()")] public bool hideOnClick;
+        [FoldoutGroup("@GetTitle()")] public Action action;
 
-        public ActivityMessage(string text)
+        public ActivityMessage(string text, string id = "", string group = "", string prefab = "", Sprite icon = null, float time = 5f, bool sticky = false, 
+            bool hideOnClick = true, Action action = null)
         {
             this.text = text;
+            this.id = id;
+            this.group = group;
+            this.prefab = prefab;
+            this.icon = icon;
+            this.time = time;
+            this.sticky = sticky;
+            this.hideOnClick = hideOnClick;
+            this.action = action;
+        }
+
+        public string GetTitle()
+        {
+            if(id != "") return id;
+            else return text;
         }
     }
 }

+ 77 - 22
Runtime/ActivityMessages/ActivityMessageController.cs

@@ -1,4 +1,5 @@
-using System.Collections;
+using System;
+using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using Sirenix.OdinInspector;
@@ -16,19 +17,22 @@ namespace KairoEngine.UI.ActivityMessages
     /// Controller for showing activity messages to the player. 
     /// Use the ActivityMessageEvents.Send() to send a message to this controller.
     /// </summary>
+    [HideMonoScript]
     public class ActivityMessageController : MonoBehaviour , IUiSystemElement
     {
-        [Tooltip("The container that will hold all the activity message GameObjects.")]
-        [LabelText("MSG Container")] public Transform activityMessagesContainer;
+        [BoxGroup("Settings")] public string elementTitle = "ActivityMessages";
+        [BoxGroup("Settings")] public Canvas canvas;
+        [BoxGroup("Settings")] public bool startVisible = false;
+        [BoxGroup("Settings")] public int defaultGroupIndex = 0;
+        [BoxGroup("Settings")] public int defaultPrefabIndex = 0;
 
-        [Tooltip("The GameObject prefab for the ActivityMessage.")]
-        [LabelText("MSG Prefab")] public GameObject activityMessageUiPrefab;
+        [PropertySpace(4,4)]
+        public List<ActivityMessageGroup> groups = new List<ActivityMessageGroup>();
 
-        public List<ActivityMessage> messages;
-        public List<ActivityMessageUi> activeMessages;
+        [PropertySpace(4,4), Tooltip("The GameObject prefab for the ActivityMessage.")]
+        public List<ActivityMessagePrefabData> prefabs;
 
-        public Canvas canvas;
-        public bool startVisible = false;
+        [ReadOnly, PropertySpace(4,0)] public List<ActivityMessageUi> activeMessages;
 
         private bool isVisible = true;
 
@@ -40,10 +44,11 @@ namespace KairoEngine.UI.ActivityMessages
 
         private void OnEnable()
         {
-            UiManager.RegisterElement("ActivityMessages", this, this.transform, isVisible);
+            UiManager.RegisterElement(elementTitle, this, this.transform, isVisible);
             ActivityMessageEvents.OnActivityMessage += NewActivityMessage;
             ActivityMessageEvents.OnTimedActivityMessage += NewTimedActivityMessage;
             ActivityMessageEvents.OnStickyActivityMessage += NewStickyActivityMessage;
+            ActivityMessageEvents.OnFullMessage += NewFullMessage;
             ActivityMessageEvents.OnUpdateActivityMessage += UpdateActivityMessage;
             ActivityMessageEvents.OnRemoveActivityMessage += RemoveActivityMessage;
         }
@@ -54,6 +59,7 @@ namespace KairoEngine.UI.ActivityMessages
             ActivityMessageEvents.OnActivityMessage -= NewActivityMessage;
             ActivityMessageEvents.OnTimedActivityMessage -= NewTimedActivityMessage;
             ActivityMessageEvents.OnStickyActivityMessage -= NewStickyActivityMessage;
+            ActivityMessageEvents.OnFullMessage -= NewFullMessage;
             ActivityMessageEvents.OnUpdateActivityMessage -= UpdateActivityMessage;
             ActivityMessageEvents.OnRemoveActivityMessage -= RemoveActivityMessage;
         }
@@ -75,29 +81,42 @@ namespace KairoEngine.UI.ActivityMessages
         private void NewActivityMessage(string msg)
         {
             ActivityMessage message = new ActivityMessage(msg);
-            CreateMessage(message).Setup(this, message);
+            CreateMessage(message, defaultGroupIndex, defaultPrefabIndex).Setup(this, message);
         }
 
         private void NewTimedActivityMessage(string msg, float time)
         {
-            ActivityMessage message = new ActivityMessage(msg);
-            CreateMessage(message).Setup(this, message, time);
+            ActivityMessage message = new ActivityMessage(msg, "", "", "", null, time, false, true, null);
+            CreateMessage(message, defaultGroupIndex, defaultPrefabIndex).Setup(this, message);
         }
 
         private void NewStickyActivityMessage(string msg, bool sticky)
         {
-            ActivityMessage message = new ActivityMessage(msg);
-            CreateMessage(message).Setup(this, message, sticky);
+            ActivityMessage message = new ActivityMessage(msg, "", "", "", null, 0f, true, true, null);
+            CreateMessage(message, defaultGroupIndex, defaultPrefabIndex).Setup(this, message);
         }
 
-        private void UpdateActivityMessage(string oldText, string newText, float time, bool sticky)
+        private void NewFullMessage(string text, string id, string group, string prefab, Sprite icon, float time, bool sticky, bool hideOnClick, Action action)
+        {
+            ActivityMessage message = new ActivityMessage(text, id, group, prefab, icon, time, sticky, hideOnClick,action);
+            int groupIndex = GetGroupIndexByTitle(group);
+            int prefabIndex = GetPrefabIndexByTitle(prefab);
+            CreateMessage(message, groupIndex, prefabIndex).Setup(this, message);
+        }
+
+        private void UpdateActivityMessage(string id, string newText, Sprite newSprite, float time, bool sticky, bool hideOnClick, Action action)
         {
             for (int i = 0; i < activeMessages.Count; i++)
             {
-                if(activeMessages[i].message.text == oldText)
+                if(activeMessages[i].message.text == id || activeMessages[i].message.id == id)
                 {
                     activeMessages[i].message.text = newText;
-                    activeMessages[i].Setup(this, activeMessages[i].message, time, sticky);
+                    if(newSprite != null) activeMessages[i].message.icon = newSprite;
+                    activeMessages[i].message.time = time;
+                    activeMessages[i].message.sticky = sticky;
+                    activeMessages[i].message.hideOnClick = hideOnClick;
+                    if(action != null) activeMessages[i].message.action = action;
+                    activeMessages[i].Setup(this, activeMessages[i].message);
                     return;
                 }
             }
@@ -107,7 +126,7 @@ namespace KairoEngine.UI.ActivityMessages
         {
             for (int i = 0; i < activeMessages.Count; i++)
             {
-                if(activeMessages[i].message.text == text)
+                if(activeMessages[i].message.text == text || activeMessages[i].message.id == text)
                 {
                     activeMessages[i].Remove(this);
                     return;
@@ -115,13 +134,49 @@ namespace KairoEngine.UI.ActivityMessages
             }
         }
 
-        private ActivityMessageUi CreateMessage(ActivityMessage message)
+        private ActivityMessageUi CreateMessage(ActivityMessage message, int groupIndex, int prefabIndex)
         {
-            messages.Add(message);
-            GameObject obj = Instantiate(activityMessageUiPrefab, activityMessagesContainer);
+            groups[groupIndex].messages.Add(message);
+            GameObject obj = Instantiate(prefabs[prefabIndex].prefab, groups[groupIndex].container);
             ActivityMessageUi msgUi = obj.GetComponent<ActivityMessageUi>();
             activeMessages.Add(msgUi);
             return msgUi;
         }
+
+        public bool GroupExits(string title)
+        {
+            for (int i = 0; i < groups.Count; i++)
+            {
+                if(groups[i].title == title) return true;
+            }
+            return false;
+        }
+
+        public int GetGroupIndexByTitle(string title)
+        {
+            for (int i = 0; i < groups.Count; i++)
+            {
+                if(groups[i].title == title) return i;
+            }
+            return defaultGroupIndex;
+        }
+
+        public bool PrefabExits(string title)
+        {
+            for (int i = 0; i < prefabs.Count; i++)
+            {
+                if(prefabs[i].title == title) return true;
+            }
+            return false;
+        }
+
+        public int GetPrefabIndexByTitle(string title)
+        {
+            for (int i = 0; i < prefabs.Count; i++)
+            {
+                if(prefabs[i].title == title) return i;
+            }
+            return defaultPrefabIndex;
+        }
     }
 }

+ 18 - 0
Runtime/ActivityMessages/ActivityMessageGroup.cs

@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using Sirenix.OdinInspector;
+
+namespace KairoEngine.UI.ActivityMessages
+{
+    [System.Serializable]
+    public class ActivityMessageGroup
+    {
+        [FoldoutGroup("@title")]
+        public string title = "Group 1";
+
+        [FoldoutGroup("@title"), Tooltip("The container that will hold the activity message GameObjects in this group.")]
+        public Transform container;
+        [FoldoutGroup("@title"), PropertySpace(4,0)] public List<ActivityMessage> messages;
+    }
+}

+ 11 - 0
Runtime/ActivityMessages/ActivityMessageGroup.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8cd8e454b3ad508419d959554d7eabc3
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 15 - 0
Runtime/ActivityMessages/ActivityMessagePrefabData.cs

@@ -0,0 +1,15 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using Sirenix.OdinInspector;
+
+namespace KairoEngine.UI.ActivityMessages
+{
+    [System.Serializable]
+    public class ActivityMessagePrefabData
+    {
+        [HorizontalGroup("prefab", 0.4f), HideLabel] public string title;
+        [HorizontalGroup("prefab", 0.6f), HideLabel] public GameObject prefab;
+    }
+}
+

+ 11 - 0
Runtime/ActivityMessages/ActivityMessagePrefabData.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: dc6d7fb15af57c14cb404f7b64724654
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 13
Runtime/ActivityMessages/ActivityMessageUi.cs

@@ -19,6 +19,7 @@ namespace KairoEngine.UI.ActivityMessages
 
         public bool fadeIn = true;
         public bool fadeOut = true;
+        public bool hideOnClick = true;
 
         public float fadeTimer = 0.5f;
         private float fadeCounter = 0f;
@@ -63,7 +64,7 @@ namespace KairoEngine.UI.ActivityMessages
                     fadeCounter = 0f;
                     if(controller != null)
                     {
-                        controller.messages.Remove(message);
+                        //controller.messages.Remove(message);
                         controller.activeMessages.Remove(this);
                     }
                     Destroy(this.gameObject);
@@ -73,24 +74,18 @@ namespace KairoEngine.UI.ActivityMessages
 
         public void OnClick()
         {
-            isFading = true;
+            if(message.action != null) message.action();
+            if(hideOnClick) isFading = true;
         }
 
-        public void Setup(ActivityMessageController controller, ActivityMessage newMessage, bool sticky = false)
+        public void Setup(ActivityMessageController controller, ActivityMessage newMessage)
         {
             this.controller = controller;
             message = newMessage;
             textUi.text = message.text;
-            autoHide = !sticky;
-        }
-
-        public void Setup(ActivityMessageController controller, ActivityMessage newMessage, float time, bool sticky = false)
-        {
-            this.controller = controller;
-            message = newMessage;
-            textUi.text = message.text;
-            hideTimer = time;
-            autoHide = !sticky;
+            hideTimer = message.time;
+            autoHide = !message.sticky;
+            hideOnClick = message.hideOnClick;
         }
 
         public void Remove(ActivityMessageController controller)