Переглянути джерело

Refactored Activity Message animations

jamesperet 2 роки тому
батько
коміт
f39707b3f3

+ 29 - 0
Prefabs/ActivityMessage.prefab

@@ -193,6 +193,7 @@ GameObject:
   - component: {fileID: 7323877514386933844}
   - component: {fileID: 6758995290570285894}
   - component: {fileID: 892465510631762317}
+  - component: {fileID: 763435978}
   m_Layer: 0
   m_Name: ActivityMessage
   m_TagString: Untagged
@@ -372,6 +373,34 @@ MonoBehaviour:
   fadeOut: 1
   hideOnClick: 1
   fadeTimer: 0.1
+--- !u!114 &763435978
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3358351919906791836}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 66a1c1c2f9d49af44a83c1caf9195d26, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  objectToAnimate: {fileID: 3358351919906791836}
+  objectToDisable: {fileID: 3358351919906791836}
+  animationTime: 0.2
+  animateOnEnable: 1
+  animateOnDisable: 1
+  delay: 0
+  disableDelay: 0
+  disableObjectOnEnd: 1
+  animateScale: 0
+  scaleDuration: 0.3
+  sacelFrom: {x: 0, y: 0, z: 0}
+  scaleTo: {x: 0, y: 0, z: 0}
+  animateAlpha: 1
+  alphaDuration: 0.2
+  alphaFrom: 0
+  alphaTo: 1
 --- !u!1 &5001929249859582541
 GameObject:
   m_ObjectHideFlags: 0

+ 16 - 4
Runtime/ActivityMessages/ActivityMessageController.cs

@@ -50,7 +50,7 @@ namespace KairoEngine.UI.ActivityMessages
             ActivityMessageEvents.OnStickyActivityMessage += NewStickyActivityMessage;
             ActivityMessageEvents.OnFullMessage += NewFullMessage;
             ActivityMessageEvents.OnUpdateActivityMessage += UpdateActivityMessage;
-            ActivityMessageEvents.OnRemoveActivityMessage += RemoveActivityMessage;
+            ActivityMessageEvents.OnRemoveActivityMessage += DestroyActivityMessage;
         }
 
         private void OnDisable()
@@ -61,7 +61,7 @@ namespace KairoEngine.UI.ActivityMessages
             ActivityMessageEvents.OnStickyActivityMessage -= NewStickyActivityMessage;
             ActivityMessageEvents.OnFullMessage -= NewFullMessage;
             ActivityMessageEvents.OnUpdateActivityMessage -= UpdateActivityMessage;
-            ActivityMessageEvents.OnRemoveActivityMessage -= RemoveActivityMessage;
+            ActivityMessageEvents.OnRemoveActivityMessage -= DestroyActivityMessage;
         }
 
         public void Hide()
@@ -122,13 +122,25 @@ namespace KairoEngine.UI.ActivityMessages
             }
         }
 
-        private void RemoveActivityMessage(string text)
+        private void DestroyActivityMessage(string text)
         {
             for (int i = 0; i < activeMessages.Count; i++)
             {
                 if(activeMessages[i].message.text == text || activeMessages[i].message.id == text)
                 {
-                    activeMessages[i].Remove(this);
+                    activeMessages[i].Remove();
+                    return;
+                }
+            }
+        }
+
+        public void RemoveActivityMessageFromList(ActivityMessage message)
+        {
+            for (int i = 0; i < activeMessages.Count; i++)
+            {
+                if(activeMessages[i].message.text == message.text || activeMessages[i].message.id == message.id)
+                {
+                    activeMessages.RemoveAt(i);
                     return;
                 }
             }

+ 67 - 48
Runtime/ActivityMessages/ActivityMessageUi.cs

@@ -4,6 +4,7 @@ using UnityEngine;
 using UnityEngine.UI;
 using TMPro;
 using Sirenix.OdinInspector;
+using KairoEngine.Core;
 
 namespace KairoEngine.UI.ActivityMessages
 {
@@ -29,54 +30,58 @@ namespace KairoEngine.UI.ActivityMessages
         private bool hasFadedIn = false;
         private ActivityMessageController controller;
 
-        private void Update()
-        {
-            if (fadeIn && !hasFadedIn)
-            {
-                fadeCounter += Time.deltaTime;
-                Color color = textUi.color;
-                color.a = fadeCounter / fadeTimer;
-                textUi.color = color;
-                buttonImage.color = color;
-                if (fadeCounter >= fadeTimer)
-                {
-                    fadeCounter = 0f;
-                    hasFadedIn = true;
-                }
-            }
-            if (autoHide && hasFadedIn || fadeIn == false)
-            {
-                hideCounter += Time.deltaTime;
-                if(hideCounter >= hideTimer)
-                {
-                    hideCounter = 0f;
-                    isFading = true;
-                }
-            }
-            if (fadeOut && isFading)
-            {
-                fadeCounter += Time.deltaTime;
-                Color color = textUi.color;
-                color.a = 1f - (fadeCounter / fadeTimer);
-                textUi.color = color;
-                buttonImage.color = color;
-                if (fadeCounter >= fadeTimer)
-                {
-                    fadeCounter = 0f;
-                    if(controller != null)
-                    {
-                        //controller.messages.Remove(message);
-                        controller.activeMessages.Remove(this);
-                    }
-                    Destroy(this.gameObject);
-                }
-            }
-        }
+        // private void Update()
+        // {
+        //     if (fadeIn && !hasFadedIn)
+        //     {
+        //         fadeCounter += Time.deltaTime;
+        //         Color color = textUi.color;
+        //         color.a = fadeCounter / fadeTimer;
+        //         textUi.color = color;
+        //         buttonImage.color = color;
+        //         if (fadeCounter >= fadeTimer)
+        //         {
+        //             fadeCounter = 0f;
+        //             hasFadedIn = true;
+        //         }
+        //     }
+        //     if (autoHide && hasFadedIn || fadeIn == false)
+        //     {
+        //         hideCounter += Time.deltaTime;
+        //         if(hideCounter >= hideTimer)
+        //         {
+        //             hideCounter = 0f;
+        //             isFading = true;
+        //         }
+        //     }
+        //     if (fadeOut && isFading)
+        //     {
+        //         fadeCounter += Time.deltaTime;
+        //         Color color = textUi.color;
+        //         color.a = 1f - (fadeCounter / fadeTimer);
+        //         textUi.color = color;
+        //         buttonImage.color = color;
+        //         if (fadeCounter >= fadeTimer)
+        //         {
+        //             fadeCounter = 0f;
+        //             if(controller != null)
+        //             {
+        //                 //controller.messages.Remove(message);
+        //                 controller.activeMessages.Remove(this);
+        //             }
+        //             Destroy(this.gameObject);
+        //         }
+        //     }
+        // }
 
         public void OnClick()
         {
             if(message.action != null) message.action();
-            if(hideOnClick) isFading = true;
+            if(hideOnClick) 
+            {
+                //isFading = true;
+                Remove();
+            }
         }
 
         public void Setup(ActivityMessageController controller, ActivityMessage newMessage)
@@ -93,13 +98,27 @@ namespace KairoEngine.UI.ActivityMessages
                 iconImage.gameObject.SetActive(true);
             }
             else iconImage.gameObject.SetActive(false);
+            if(!message.sticky)
+            {
+                Timer.ExecuteRealTime(message.time * 1000, () => {
+                    Remove();
+                });
+            }
         }
 
-        public void Remove(ActivityMessageController controller)
+        public void Remove()
         {
-            this.controller = controller;
-            autoHide = true;
-            hideTimer = 0f;
+            controller.RemoveActivityMessageFromList(message);
+            if(this == null) return;
+            UiAnimator uiAnimator = gameObject.GetComponent<UiAnimator>();
+            if(uiAnimator != null) 
+            {
+                uiAnimator.Disable();
+                Timer.ExecuteRealTime(uiAnimator.animationTime * 1000, () => {
+                    if(this != null) Destroy(this.gameObject);
+                });
+            }
+            else if(this != null) Destroy(this.gameObject);
         }
     }
 }

+ 1 - 1
Runtime/UiAnimator.cs

@@ -70,7 +70,7 @@ namespace KairoEngine.UI
                 if(disableObjectOnEnd && !cancelDisable) 
                 {
                     if(objectToDisable != null) objectToDisable.SetActive(false);
-                    else gameObject.SetActive(false);
+                    else if(this != null) gameObject.SetActive(false);
                 }
             });
             // _tweenObject.setDelay(disableDelay).setOnComplete(() => {