// ***********************************************************************
// Assembly : Game
// Author : Kimch
// Created : 2021-04-12
// Description :
// Last Modified By :
// Last Modified On :
// ***********************************************************************
//
//
// ***********************************************************************
using DG.Tweening;
using Spine.Unity;
using System.Collections;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace G.UI
{
///
///
///
public class BeautyDetailPanel : KUIWidget
{
#region Field
#pragma warning disable CS0649 // 从未对字段赋值,字段将一直保持其默认值 null
[KUIFlag]
Button _btnMeet;
[KUIFlag]
Button _btnGift;
[KUIFlag]
Button _btnSkill;
[KUIFlag]
Button _btnSkin;
[KUIFlag]
TextMeshProUGUI _tmpName;
[KUIFlag]
Image _imgPicture;
[KUIFlag]
TextMeshProUGUI _tmpDescription;
[KUIFlag]
TextMeshProUGUI _tmpTalk;
[KUIFlag]
TextMeshProUGUI _tmpLevel;
[KUIFlag]
TextMeshProUGUI _tmpExp;
[KUIFlag]
GameObject _goSkeleton;
#pragma warning restore CS0649 // 从未对字段赋值,字段将一直保持其默认值 null
//[KUIFlag]
SkeletonGraphic _skeleton;
#endregion
#region Method
public override void Refresh()
{
if (this.data is BeautyProxy.BeautyInfo beautyInfo)
{
_tmpName.text = beautyInfo.item.name;
_tmpDescription.text = beautyInfo.item.description;
_tmpTalk.text = beautyInfo.item.talk;
_tmpLevel.text = "亲密度:" + beautyInfo.level;
_tmpExp.text = "红颜经验:" + beautyInfo.exp;
StartCoroutine(LoadBeautySkin2(beautyInfo.skinItem, _imgPicture, _goSkeleton));
//_skeleton.raycastTarget = true;
_clicking = false;
}
}
private void Refresh2()
{
if (this.data is BeautyProxy.BeautyInfo beautyInfo)
{
_tmpLevel.text = beautyInfo.level.ToString();
_tmpExp.text = beautyInfo.exp.ToString();
}
}
public IEnumerator LoadBeautySkin2(ItemBeautySkin skin, Image picture, GameObject skeletonRoot)
{
if (string.IsNullOrEmpty(skin.asset))
{
picture.gameObject.SetActive(true);
skeletonRoot.SetActive(false);
var handle = AssetProxy.Instance.TryGetTemporaryAssetAsync($"{skin.picture}/pic.png");
yield return handle;
if (handle.Status == UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationStatus.Succeeded)
picture.sprite = handle.Result;
}
else
{
picture.gameObject.SetActive(false);
skeletonRoot.SetActive(true);
var skinAsset = skin.asset;
var rootTr = skeletonRoot.transform;
if (rootTr.childCount > 0)
{
var child = rootTr.GetChild(0);
if (child.name == skinAsset)
{
skinAsset = "";
yield break;
}
AssetProxy.Instance.ReleaseInstance(child.gameObject);
}
if (!string.IsNullOrEmpty(skinAsset))
{
var handle = AssetProxy.Instance.InstantiateAsync(skin.asset, rootTr);
yield return handle;
handle.Result.name = skin.asset;
_skeleton = handle.Result.GetComponent();
}
}
}
private void OnMeetBtnClick()
{
PostNotification(GlobalDefine.EVENT_BEAUTY_WINDOW, this.data, "gift1");
SoundProxy.PlayFxAsync(GlobalDefine.BUTTON_CLICK_SOUND);
}
private void OnGiftBtnClick()
{
PostNotification(GlobalDefine.EVENT_BEAUTY_WINDOW, this.data, "gift1");
SoundProxy.PlayFxAsync(GlobalDefine.BUTTON_CLICK_SOUND);
}
private void OnEffectBtnClick()
{
PostNotification(GlobalDefine.EVENT_BEAUTY_WINDOW, this.data, "skill");
SoundProxy.PlayFxAsync(GlobalDefine.BUTTON_CLICK_SOUND);
}
private void OnSkinBtnClick()
{
PostNotification(GlobalDefine.EVENT_BEAUTY_WINDOW, this.data, "skin");
SoundProxy.PlayFxAsync(GlobalDefine.BUTTON_CLICK_SOUND);
}
private bool _clicking;
private void OnSkinClick()
{
if (_clicking)
return;
_clicking = true;
_skeleton.AnimationState.Complete += OnAnimComp;
_skeleton.AnimationState.SetAnimation(0, "haixiu", false);
if (this.data is BeautyProxy.BeautyInfo beautyInfo)
{
_tmpTalk.transform.parent.gameObject.SetActive(true);
_tmpTalk.text = "";
if (!string.IsNullOrEmpty(beautyInfo.skinItem.talk))
_tmpTalk.DOText(beautyInfo.skinItem.talk, 2f);
if (!string.IsNullOrEmpty(beautyInfo.skinItem.sound))
SoundProxy.PlayFxAsync(beautyInfo.skinItem.sound + ".mp3");
//StartCoroutine(PlaySound(beautyInfo.skinItem.sound));
}
}
private void OnAnimComp(Spine.TrackEntry trackEntry)
{
_tmpTalk.transform.parent.gameObject.SetActive(false);
_skeleton.AnimationState.Complete -= OnAnimComp;
if (trackEntry.Animation.Name == "haixiu")
{
Debug.Log("OnAnimComp");
_skeleton.AnimationState.SetAnimation(0, "idle", true);
}
_clicking = false;
}
#endregion
#region Unity
///
///
///
private void Awake()
{
SetViewData();
_btnMeet.onClick.AddListener(this.OnMeetBtnClick);
_btnGift.onClick.AddListener(this.OnGiftBtnClick);
_btnSkill.onClick.AddListener(this.OnEffectBtnClick);
_btnSkin.onClick.AddListener(this.OnSkinBtnClick);
_goSkeleton.GetComponent