Files
ft/Client/Assets/Scripts/MatchGame/UI/MatchHat.cs
2026-06-29 21:18:33 +08:00

122 lines
3.3 KiB
C#

using Spine.Unity;
using System;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.UI;
public class MatchHat : MonoBehaviour
{
int index;
public Button btn;
public Image image_prop;
public Transform fx_break;
GameObject fx;
public Animation ani;
public SkeletonGraphic spine;
public Action<int> OnClickItem;
[Space(10)]
// 动画/Spine 名称常量
public string AniInitial = "eventMatchEasterOuterInitial";
public string AniUp = "eventMatchEasterOuterUp";
public string AniDown = "eventMatchEasterOuterDown";
public string AniDisappear = "eventMatchEasterOuterDisappear";
public string AniDisappearUp = "eventMatchEasterOuterSpecialDisappear";
public string AniShow = "eventMatchEasterSpecialShow";
public string AniSpDisappear = "eventMatchEasterSpecialDisappear";
public string AniTip = "eventMatchEasterOuterTip";
[Space(10)]
public string SpineDisappear = "match_easter_special_disappear";
public string SpineShow = "match_easter_special_show";
private void Start()
{
btn.onClick.AddListener(() =>
{
OnClickItem?.Invoke(index);
});
}
/// <summary>
/// 帽子的状态
/// </summary>
/// <param name="state">状态值 0:未开启 1:开启中 2:已开启</param>
public void Init(int index, int state, string fxName)
{
this.index = index;
btn.gameObject.SetActive(state == 0);
ani.gameObject.SetActive(state != 2);
spine.gameObject.SetActive(false);
if (state != 2)
{
if (state == 1)
{
ani.Play(AniUp);
}
else if (state == 0)
{
ani.Play(AniInitial);
}
LoadFx(fxName);
}
}
async void LoadFx(string fxName)
{
if (fx != null)
{
Addressables.ReleaseInstance(fx);
}
fx = await Addressables.InstantiateAsync(fxName, fx_break).Task;
}
/// 原地盖回帽子
public void PlayDown()
{
btn.gameObject.SetActive(true);
ani.Play(AniDown);
}
public void PlayInitial()
{
ani.Play(AniInitial);
}
/// <summary>
/// 播放翻开动画
/// </summary>
public void PlayUp()
{
btn.gameObject.SetActive(false);
ani.Play(AniUp);
}
/// - 帽子消失,物品放大,微微晃动,物品缩小 + 透明
public void PlayDisappear()
{
ani.Play(AniDisappear);
}
/// - 套索消失,物品放大,微微晃动,物品缩小 + 透明
public void PlayDisappearUp()
{
ani.Play(AniDisappearUp);
}
/// <summary>
/// - 随机套走 两对物品匹配的帽子(共 4 顶)- 物品放大,微微晃动,物品缩小 + 透明
/// </summary>
public void PlaySpShow()
{
btn.gameObject.SetActive(false);
spine.gameObject.SetActive(true);
spine.AnimationState.SetAnimation(0, SpineShow, false);
ani.Play(AniShow);
}
public void PlaySpDisappear()
{
spine.AnimationState.SetAnimation(0, SpineDisappear, false);
ani.Play(AniSpDisappear);
}
public void ShowTips()
{
ani.Play(AniTip);
}
}