// *********************************************************************** // 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