using MEHotFixComp;
using System;
using TMPro;
using UnityEngine;
using EventManager;
using DG.Tweening;
public class FCG_ChangeOptionsDisplayer : HotFixCompDisplayBehavior
{
#region 成员
private bool m_IsUpdate = false;
private SfChartShellLayout m_Shell;
private FCG_ChangeOptionsStyle m_Style = null;
private FCG_ChangeOptionsData m_Data = null;
private RectTransform m_MainView = null;
private Transform option1;
private Transform option2;
private TextMeshProUGUI option1Text;
private TextMeshProUGUI option2Text;
EventTrigger et;//事件触发器
EventTriggerCurrentValueMono etcv;//传值
Sequence option1Seq;//相当于一个Tweener的链表,可以通过执行一个Sequence来执行一串Tweener
#endregion
// 初始化
override public void Awake()
{
this.m_MainView = this.transform.Find("MainView") as RectTransform;
option1Text = this.m_MainView.Find("option1").GetComponent<TextMeshProUGUI>();
option2Text = this.m_MainView.Find("option2").GetComponent<TextMeshProUGUI>();
option1 = this.m_MainView.Find("option1");
option2 = this.m_MainView.Find("option2");
InitSeq();
et = transform.GetCompExt<EventTrigger>();
etcv = transform.GetCompExt<EventTriggerCurrentValueMono>();
UISingleClickListener clickOption1Listener = UISingleClickListener.Get(option1.gameObject);
clickOption1Listener.onClick = OnClickOption1;
UISingleClickListener clickOption2Listener = UISingleClickListener.Get(option2.gameObject);
clickOption2Listener.onClick = OnClickOption2;
}
private void OnClickOption2(GameObject obj)
{
Debug.Log("OnClickOption2");
etcv.currValue = m_Data.m_DataList[1].etcv;
OnClickOption(obj);
option1Seq.Restart();
}
private void OnClickOption1(GameObject obj)
{
Debug.Log("OnClickOption1");
etcv.currValue = m_Data.m_DataList[0].etcv;
OnClickOption(obj);
option1Seq.PlayBackwards();
}
private void InitSeq()//防止频繁的创建动画
{
option1Seq = DOTween.Sequence();
float dura = 0.5f;
float offsetY = option1.localPosition.y - option2.localPosition.y;
Tweener t1 = option1Text.DOFade(0.5f, dura);
Tweener t2 = option1.DOLocalMoveY(option1.localPosition.y + offsetY, dura);
Tweener t3 = option2Text.DOFade(1f, dura);
Tweener t4 = option2.DOLocalMoveY(option2.localPosition.y + offsetY, dura);
option1Seq.Append(t1);
option1Seq.Join(t2);
option1Seq.Join(t3);
option1Seq.Join(t4);
option1Seq.SetAutoKill(false);
option1Seq.Pause();
}
private void OnClickOption(GameObject go)
{
etcv.currValue.currCustomValue["文本名"] = go.GetComponent<TextMeshProUGUI>().text;
et.Trigger("点击文本", go, etcv.currValue);
}
// 组件enter重入时需要做清理工作
override public void ResetComponent()
{
}
// 组件视图主逻辑
private void SetView()
{
// 组件主体大小以MainView为准自适应
Vector2 viewSize = this.m_MainView.sizeDelta;
var data = m_Data.m_DataList;
int count = data.Count;
if (count > 1)
{
option1Text.text = data[0].str1;
option2Text.text = data[1].str1;
}
}
public override void OnDestroy()
{
UISingleClickListener.Get(option2.gameObject).onClick = null;
UISingleClickListener.Get(option2.gameObject).onClick = null;
option1 = null;
option2 = null;
option1Text = null;
option2Text = null;
if (option1Seq != null)
{
option1Seq.Kill(true);
option1Seq = null;
}
if (et != null)
{
et.ClearEvent();
et = null;
}
etcv = null;
base.OnDestroy();
}
#region 流程
override public void StyleInit(HotFixComponentCfgBase compCfg)
{
this.m_Style = compCfg as FCG_ChangeOptionsStyle;
this.SetShell();
}
private void SetShell()
{
// 初始化并设置属性
if (null == this.m_Shell)
{
this.m_Shell = this.transform.GetComponent<SfChartShellLayout>();
}
if (null != this.m_Shell)
{
SfCompCfgBase baseCfg = new SfCompCfgBase();
baseCfg.ShellCfg = this.m_Style.ShellCfg;
//baseCfg.TitleCfg = this.m_Style.TitleCfg;
baseCfg.TitleCfg = null;
baseCfg.LengendCfg = null;
m_Shell.ViewInit(baseCfg);
m_Shell.ReSetMainView(Vector4.zero);
}
}
override public void DataInit(HotFixComponentDataBase compData, bool isUpdate)
{
if (isUpdate)
{
this.m_IsUpdate = true;
this.SetShell();
}
this.m_Data = compData as FCG_ChangeOptionsData;
}
override public void EnterAnimation()
{
this.SetView();
this.animatorFinishFlag = true;
}
override public void UpdateAnimation()
{
if (this.m_IsUpdate)
{
this.m_IsUpdate = false;
this.SetView();
}
animatorFinishFlag = true;
}
override public void ExitAnimation()
{
this.animatorFinishFlag = true;
}
#endregion
}
Dotween
最新推荐文章于 2022-11-28 00:23:00 发布