Health/Assets/Scripts/UI/GuideUI.cs

140 lines
4.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class GuideUI : UIPanelBase
{
private GameObject _guide;
private Animator _effectAnimator;
private Transform _content;
public GudieAnimationManager GuideMgr => _guide.GetComponent<GudieAnimationManager>();
private void Awake()
{
_guide = GameObject.FindWithTag("Guide");
if (_guide == null)
{
Debug.LogError("Guide is null");
}
_effectAnimator = transform.Find("Content").GetComponentInChildren<Animator>();
_content = transform.Find("Content");
}
private void OnEnable()
{
EventManager.Instance.AddEventListener(YogaEventType.PlayAnimation, PlayAnimation);
EventManager.Instance.AddEventListener(YogaEventType.ActionSuccess, ShowSuccessEffect);
EventManager.Instance.AddEventListener(YogaEventType.UpdateProgress, UpdateSuccessCount);
EventManager.Instance.AddEventListener(YogaEventType.ActionFailed, ShowFailEffect);
}
private void OnDisable()
{
EventManager.Instance.RemoveEventListener(YogaEventType.PlayAnimation, PlayAnimation);
EventManager.Instance.RemoveEventListener(YogaEventType.ActionSuccess, ShowSuccessEffect);
EventManager.Instance.RemoveEventListener(YogaEventType.UpdateProgress, UpdateSuccessCount);
EventManager.Instance.RemoveEventListener(YogaEventType.ActionFailed, ShowFailEffect);
}
#region Event Func
private void PlayAnimation(params object[] args)
{
var animeType = args.FirstOrDefault();
if (animeType == null)
{
Debug.LogError("PlayAnimation animeType is null");
return;
}
GuideMgr.Play(Enum.GetName(typeof(AvatarAction), animeType));
}
private void UpdateSuccessCount(params object[] args)
{
//args[0] = successCount args[1] = excutedCount args[2] = totalCount
if (args.Length < 3)
{
Debug.LogError("UpdateSuccessCount args is not enough");
return;
}
var successCount = (int)args[0];
var excutedCount = (int)args[1];
var totalCount = (int)args[2];
var totalProgress = (float)excutedCount / totalCount;
var radial = _content.Find("Radial");
var img = radial.Find("Background/Loading Bar").GetComponent<Image>();
if (img != null)
{
if (totalCount > excutedCount)
img.fillAmount = totalProgress;
else
img.fillAmount = 1;
}
var text = radial.Find("Text").GetComponent<TextMeshProUGUI>();
if (text != null)
{
if (totalCount > excutedCount)
text.text = $"{(int)(totalProgress * 100)}%";
else
text.text = "100%";
}
var successDisplay = _content.Find("SuccessDisplay");
var successText = successDisplay.Find("SuccessCount").GetComponent<TextMeshProUGUI>();
if (successText != null)
{
successText.text = successCount.ToString();
}
var totalText = successDisplay.Find("TotalCount").GetComponent<TextMeshProUGUI>();
if (totalText != null)
{
totalText.text = $"/ {totalCount}";
}
}
private void ShowFailEffect()
{
_effectAnimator.Play("WindowEffectError", 0, 0f);//<2F>߿<EFBFBD><DFBF><EFBFBD>˸
}
private void ShowSuccessEffect()
{
_effectAnimator.Play("WindowEffectCorrect", 0, 0f);//<2F>߿<EFBFBD><DFBF><EFBFBD>˸
}
#endregion
public override void Init(object[] pageData)
{
base.Init(pageData);
if (_guide == null)
_guide = GameObject.FindWithTag("Guide");
}
public override void OnEnter()
{
base.OnEnter();
_guide.SetActive(true);
EventManager.Instance.Dispatch(YogaEventType.StartMotionCapture);
EventManager.Instance.Dispatch(YogaEventType.PlayAnimation, YogaManager.Instance.Action.Action);
}
public override void OnExit()
{
base.OnExit();
_guide.SetActive(false);
GuideMgr.Stop();
EventManager.Instance.Dispatch(YogaEventType.StopMotionCapture);
}
}