123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using Sirenix.OdinInspector;
- using KairoEngine.Core;
- using KairoEngine.UI;
- namespace KairoEngine.UI.ActivityMessages
- {
- //* This is the simplest possible implementation of this controller
- // Todo: Add icons to activity messages
- // Todo: Add autohide prorperty to messages
- // Todo: Cleanup list of activeMessages that have been destroyed
- /// <summary>
- /// Controller for showing activity messages to the player.
- /// Use the ActivityMessageEvents.Send() to send a message to this controller.
- /// </summary>
- public class ActivityMessageController : MonoBehaviour , IUiSystemElement
- {
- [Tooltip("The container that will hold all the activity message GameObjects.")]
- [LabelText("MSG Container")] public Transform activityMessagesContainer;
- [Tooltip("The GameObject prefab for the ActivityMessage.")]
- [LabelText("MSG Prefab")] public GameObject activityMessageUiPrefab;
- public List<ActivityMessage> messages;
- public List<ActivityMessageUi> activeMessages;
- public Canvas canvas;
- public bool startVisible = false;
- private bool isVisible = true;
- private void Start()
- {
- if(startVisible) UiManager.ShowElement(this);
- else UiManager.HideElement(this);
- }
- private void OnEnable()
- {
- UiManager.RegisterElement("ActivityMessages", this, this.transform, isVisible);
- ActivityMessageEvents.OnActivityMessage += NewActivityMessage;
- ActivityMessageEvents.OnTimedActivityMessage += NewTimedActivityMessage;
- ActivityMessageEvents.OnStickyActivityMessage += NewStickyActivityMessage;
- ActivityMessageEvents.OnUpdateActivityMessage += UpdateActivityMessage;
- ActivityMessageEvents.OnRemoveActivityMessage += RemoveActivityMessage;
- }
- private void OnDisable()
- {
- UiManager.UnregisterElement(this);
- ActivityMessageEvents.OnActivityMessage -= NewActivityMessage;
- ActivityMessageEvents.OnTimedActivityMessage -= NewTimedActivityMessage;
- ActivityMessageEvents.OnStickyActivityMessage -= NewStickyActivityMessage;
- ActivityMessageEvents.OnUpdateActivityMessage -= UpdateActivityMessage;
- ActivityMessageEvents.OnRemoveActivityMessage -= RemoveActivityMessage;
- }
- public void Hide()
- {
- isVisible = false;
- canvas.gameObject.SetActive(false);
- }
- public void Show()
- {
- isVisible = true;
- canvas.gameObject.SetActive(true);
- }
- public bool IsVisible() => isVisible;
- private void NewActivityMessage(string msg)
- {
- ActivityMessage message = new ActivityMessage(msg);
- CreateMessage(message).Setup(this, message);
- }
- private void NewTimedActivityMessage(string msg, float time)
- {
- ActivityMessage message = new ActivityMessage(msg);
- CreateMessage(message).Setup(this, message, time);
- }
- private void NewStickyActivityMessage(string msg, bool sticky)
- {
- ActivityMessage message = new ActivityMessage(msg);
- CreateMessage(message).Setup(this, message, sticky);
- }
- private void UpdateActivityMessage(string oldText, string newText, float time, bool sticky)
- {
- for (int i = 0; i < activeMessages.Count; i++)
- {
- if(activeMessages[i].message.text == oldText)
- {
- activeMessages[i].message.text = newText;
- activeMessages[i].Setup(this, activeMessages[i].message, time, sticky);
- return;
- }
- }
- }
- private void RemoveActivityMessage(string text)
- {
- for (int i = 0; i < activeMessages.Count; i++)
- {
- if(activeMessages[i].message.text == text)
- {
- activeMessages[i].Remove(this);
- return;
- }
- }
- }
- private ActivityMessageUi CreateMessage(ActivityMessage message)
- {
- messages.Add(message);
- GameObject obj = Instantiate(activityMessageUiPrefab, activityMessagesContainer);
- ActivityMessageUi msgUi = obj.GetComponent<ActivityMessageUi>();
- activeMessages.Add(msgUi);
- return msgUi;
- }
- }
- }
|