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<FairySiegeActModel>(); } }
|
|
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<FairySiegeSummonDragonFrameWin>();
|
}));
|
}
|
}
|
}
|
|
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;
|
}
|
}
|
}
|
}
|