|
@@ -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;
|
|
|
+ }
|
|
|
}
|
|
|
}
|