using DG.Tweening; using System.Linq; using UnityEngine; namespace vnxbqy.UI { public class FairySiegeSummonDragonFrameWin : Window { [SerializeField] RectTransform rectStart; [SerializeField] RectTransform rectMiddle; [SerializeField] RectTransform rectEnd; [SerializeField] EmblemCell emblemSkill; [SerializeField] ImageEx imgSkillIcon; [SerializeField] ImageEx imgSkillName; [SerializeField] TextEx txtFairyNameSkill; [SerializeField] TextEx txtPlayerNameSkill; [SerializeField] RectTransform rectSkill; FairySiegeActModel model { get { return ModelCenter.Instance.GetModel(); } } protected override void BindController() { } protected override void AddListeners() { } protected override void OnPreOpen() { model.UpdateSummonDragonFrameAction += OnUpdateSummonDragonFrameAction; nowState = AnimeState.In; rectSkill.SetActive(false); rectSkill.anchoredPosition = rectStart.anchoredPosition; seqIn.Append(rectSkill.DOAnchorPos(rectMiddle.anchoredPosition, 0.5f).SetEase(Ease.OutCubic).OnStart(() => { UpdateSkillFrame(); rectSkill.SetActive(true); }).OnComplete(() => { nowState = AnimeState.Wait; timer = 0; })); } protected override void OnPreClose() { model.UpdateSummonDragonFrameAction -= OnUpdateSummonDragonFrameAction; } private void OnUpdateSummonDragonFrameAction() { if (nowState == AnimeState.Wait) { seqOut?.Kill(false); seqOut = DOTween.Sequence(); rectSkill.anchoredPosition = rectMiddle.anchoredPosition; UpdateSkillFrame(); timer = 0; nowState = AnimeState.Wait; } else if (nowState == AnimeState.In) { UpdateSkillFrame(); } else if (nowState == AnimeState.Out) { seqOut?.Kill(false); seqOut = DOTween.Sequence(); rectSkill.anchoredPosition = rectMiddle.anchoredPosition; UpdateSkillFrame(); timer = 0; nowState = AnimeState.Wait; } } protected override void OnAfterOpen() { } protected override void OnAfterClose() { } private enum AnimeState { In, Wait, Out, } AnimeState nowState = AnimeState.In; Sequence seqIn = DOTween.Sequence(); Sequence seqOut = DOTween.Sequence(); private float waitTime = 1.0f; // 等待时间 private float timer = 0f; // 计时器 protected override void LateUpdate() { if (nowState == AnimeState.Wait) { timer += Time.deltaTime; if (timer >= waitTime) { nowState = AnimeState.Out; timer = 0; seqOut.Append(rectSkill.DOAnchorPos(rectEnd.anchoredPosition, 0.5f).SetEase(Ease.OutCubic).OnComplete(() => { WindowCenter.Instance.Close(); })); } } } private void UpdateSkillFrame() { var info = model.nowInfo; imgSkillIcon.SetSprite(model.GetSkillIcon((int)info.AtkType)); imgSkillIcon.SetNativeSize(); imgSkillName.SetSprite(model.GetSkillNameIcon((int)info.AtkType)); imgSkillName.SetNativeSize(); if (info.BatScenePlayerInfoDict.TryGetValue(info.AtkPlayerID, out var batScenePlayerInfo) && model.TryGetFairySiegeFamilyInfo(batScenePlayerInfo.FamilyID, out FairySiegeFamilyInfo fairySiegeFamilyInfo)) { emblemSkill.SetActive(true); emblemSkill.InitUI(EmblemHelper.GetOtherEmblemModel((int)fairySiegeFamilyInfo.EmblemID)); txtFairyNameSkill.text = fairySiegeFamilyInfo.Name; txtPlayerNameSkill.text = batScenePlayerInfo.Name; } else { emblemSkill.SetActive(false); txtFairyNameSkill.text = string.Empty; txtPlayerNameSkill.text = string.Empty; } } } }