using UnityEngine;
using System.Collections.Generic;
using System;
using System.Text;
public class osToastUIData
{
public string Notice;
public float Duration;
public Vector3 TweenStartPos;
public Vector3 TweenTargetPos;
public Color TextColor;
public osToastUIData ()
{
Duration = 1 f;
TweenStartPos = new Vector3(0 , osNguiRoot.Instance.Height * 0.1 f, 0 );
TweenTargetPos = new Vector3(0 , osNguiRoot.Instance.Height * 0.25 f);
TextColor = Color.white;
}
}
public class osFloatNotice : MonoBehaviour
{
public float TimespanGap = 0.3 f;
public GameObject ItemPrefab;
public Transform Container;
public List<GameObject> m_ItemList;
private const float m_WaiteToHideGap = 5 f;
private Queue<osToastUIData> m_ToastUIDatas = new Queue<osToastUIData>();
private float m_lastShowTime = 0 f;
private float m_currentShowTime = 0 f;
private bool m_IsBeginToHide = false ;
public void Show (osToastUIData toastUIData)
{
m_ToastUIDatas.Enqueue(toastUIData);
gameObject.SetActive(true );
m_IsBeginToHide = false ;
}
private void SetData (osToastUIData toastUIData)
{
GameObject noticeGameObject = GetAvailableItem();
gameObject.SetActive(true );
string textNotice;
if (toastUIData.TextColor != Color.white)
{
string color = CoverColorToX2(toastUIData.TextColor);
textNotice = string .Format("[{0}]{1}[-]" , color, toastUIData.Notice);
}
else
textNotice = toastUIData.Notice;
osFloatNoticeItem noticeitem = noticeGameObject.GetComponent<osFloatNoticeItem>();
noticeitem.Show(textNotice, toastUIData.Duration, toastUIData.TweenStartPos, toastUIData.TweenTargetPos);
m_lastShowTime = Time.realtimeSinceStartup;
}
protected void Update ()
{
if (m_IsBeginToHide && Time.realtimeSinceStartup - m_lastShowTime > m_WaiteToHideGap)
{
gameObject.SetActive(false );
return ;
}
if (m_ToastUIDatas.Count < 1
|| GetAvailableItem() == null
|| !IsTimeToShow())
return ;
osToastUIData currentToastData = m_ToastUIDatas.Dequeue();
SetData(currentToastData);
if (m_ToastUIDatas.Count == 0 )
m_IsBeginToHide = true ;
}
private string CoverColorToX2 (Color color)
{
StringBuilder sb = new StringBuilder();
sb.Append(((int )color.r * 255 ).ToString("X2" ));
sb.Append(((int )color.g * 255 ).ToString("X2" ));
sb.Append(((int )color.b * 255 ).ToString("X2" ));
return sb.ToString();
}
private bool IsTimeToShow ()
{
m_currentShowTime = Time.realtimeSinceStartup;
return m_currentShowTime - m_lastShowTime > TimespanGap;
}
private GameObject GetAvailableItem ()
{
GameObject floatGameObject = null ;
for (int ListIndex = 0 ; ListIndex < m_ItemList.Count; ListIndex++)
{
GameObject itemInList = m_ItemList[ListIndex];
osFloatNoticeItem floatNoticeItem = itemInList.GetComponent<osFloatNoticeItem>();
if (!floatNoticeItem.IsPlaying())
{
return itemInList;
}
}
return floatGameObject;
}
private GameObject CreateNewFloatNoticeGameObject ()
{
GameObject floatNoticeGameObject = Instantiate(ItemPrefab);
mfUtility.AttachAndReset(floatNoticeGameObject.transform, Container);
return floatNoticeGameObject;
}
}
using UnityEngine;
using System.Collections;
using System;
public class osFloatNoticeItem : MonoBehaviour
{
private bool m_IsPlaying = false ;
private bool m_IsInitialized = false ;
private UILabel m_FloatNotice;
private TweenPosition m_TweenPosition;
public void Show (string notice, float duration, Vector3 startPos, Vector3 targetPos)
{
if (!m_IsInitialized)
Initialize();
gameObject.transform.localPosition = startPos;
gameObject.SetActive(true );
m_FloatNotice.text = notice;
m_TweenPosition = TweenPosition.Begin(gameObject, duration, targetPos);
m_TweenPosition.onFinished = OnAnimationFinished;
m_IsPlaying = true ;
}
public bool IsPlaying ()
{
return m_IsPlaying;
}
private void Initialize ()
{
if (m_IsInitialized == true )
return ;
m_FloatNotice = mfUtility.GetComponentByPath<UILabel>(transform, "Label" );
m_TweenPosition = GetComponent<TweenPosition>();
m_IsInitialized = true ;
}
private void OnAnimationFinished (UITweener tween)
{
gameObject.SetActive(false );
m_IsPlaying = false ;
}
}