using System.Collections; using System.Collections.Generic; using UnityEngine; using DG.Tweening; using System; namespace DisComputer { /// /// 光驱动画 /// public class GuangQuAnimation : SpareAnimationBase { [Header("动画路径")] public List pointConfigs; //螺丝 public Transform luosiTran; //显示距离 public Vector3 showDis; [Header("机箱光驱盖")] public Transform jxGaiTran; // Start is called before the first frame update void Start() { } public override void SetLoadState() { mainGo.SetActive(true); if (luosiTran != null) { luosiTran.gameObject.SetActive(true); luosiTran.localPosition = Vector3.zero; } mainGo.transform.localPosition = pointConfigs[0].point; } public override void SetUnloadState() { mainGo.SetActive(false); mainGo.transform.localPosition = pointConfigs[2].point; if (luosiTran != null) { luosiTran.gameObject.SetActive(false); luosiTran.localPosition = showDis; } } public override bool IsCompareTag(object data) { if (GameConfig.state == GameState.Unload) { ToolType toolType = ToolType.Hand; if (luosiTran != null) { toolType = ToolType.BoltDriver; } ToolItem item = (ToolItem)data; if (item.toolType == toolType) { return true; } CoolPointTip("请使用合适的工具"); return false; } else { Grid grid = (Grid)data; if (grid.type == _type) { return true; } CoolPointTip("请选择正确的零件"); return false; } } public override void OnUnLoadAct() { base.OnUnLoadAct(); StartCoroutine(UnloadFocuse()); } public override void OnLoadAct() { base.OnLoadAct(); StartCoroutine(LoadFocuse()); } protected override IEnumerator UnloadFocuse() { if (luosiTran != null) { BoltDriver driver = luosiTran.GetComponent(); luosiTran.gameObject.SetActive(true); yield return StartCoroutine(driver.RotationLouSi()); yield return StartCoroutine(JiXiangGaiAni(0)); luosiTran.DOLocalMove(showDis, 0.35f).SetEase(Ease.Linear).OnComplete(() => { Sequence sequence = DOTween.Sequence(); sequence.Append(mainGo.transform.DOLocalMove(pointConfigs[0].point, 0.4f).SetEase(Ease.Linear)).SetDelay(0.3f) .Append(mainGo.transform.DOLocalMove(pointConfigs[1].point, 0.4f).SetEase(Ease.Linear)).SetDelay(0.2f) .Append(mainGo.transform.DOLocalMove(pointConfigs[2].point, 0.4f).SetEase(Ease.Linear)).OnComplete(() => { StartCoroutine(JiXiangGaiAni(1,()=> { CommonTool.WaitTimeAfterDo(this, .35f, () => { OnUnLoadFinishHandle?.Invoke(); mainGo.SetActive(false); luosiTran.gameObject.SetActive(false); RewindCameraView(); }); })); }); }); } else { yield return StartCoroutine(JiXiangGaiAni(0)); Sequence sequence = DOTween.Sequence(); sequence.Append(mainGo.transform.DOLocalMove(pointConfigs[0].point, 0.4f).SetEase(Ease.Linear)).SetDelay(0.3f) .Append(mainGo.transform.DOLocalMove(pointConfigs[1].point, 0.4f).SetEase(Ease.Linear)).SetDelay(0.2f) .Append(mainGo.transform.DOLocalMove(pointConfigs[2].point, 0.4f).SetEase(Ease.Linear)).OnComplete(() => { CommonTool.WaitTimeAfterDo(this, .35f, () => { OnUnLoadFinishHandle?.Invoke(); mainGo.SetActive(false); RewindCameraView(); }); }); } } protected override IEnumerator LoadFocuse() { yield return StartCoroutine(JiXiangGaiAni(0)); mainGo.SetActive(true); Sequence sequence = DOTween.Sequence(); sequence.Append(mainGo.transform.DOLocalMove(pointConfigs[2].point, 0.4f).SetEase(Ease.Linear)) .Append(mainGo.transform.DOLocalMove(pointConfigs[1].point, 0.4f).SetEase(Ease.Linear)) .Append(mainGo.transform.DOLocalMove(pointConfigs[0].point, 0.4f).SetEase(Ease.Linear)).OnComplete(() => { if (luosiTran != null) { luosiTran.gameObject.SetActive(true); luosiTran.DOLocalMove(Vector3.zero, 0.35f).SetEase(Ease.Linear).SetDelay(0.3f).OnComplete(() => { }); } }); yield return new WaitForSeconds(1.8f); yield return StartCoroutine(JiXiangGaiAni(1)); if (luosiTran != null) { BoltDriver driver = luosiTran.GetComponent(); luosiTran.gameObject.SetActive(true); yield return StartCoroutine(driver.RotationLouSi()); } OnLoadFinishHandle?.Invoke(); LzFramework.UI.TTUIPage.ShowPage(); RewindCameraView(); } /// /// 机箱盖动画 /// /// 0向上1向下 /// public IEnumerator JiXiangGaiAni(int dir,Action finish = null) { yield return new WaitForEndOfFrame(); if (jxGaiTran != null) { if(dir == 0) { jxGaiTran.DOLocalMoveY(0.24f, 0.75f).SetEase(Ease.Linear) ; yield return new WaitForSeconds(1.0f); } else { jxGaiTran.DOLocalMoveY(0.0f, 0.75f).SetEase(Ease.Linear); yield return new WaitForSeconds(1.0f); } finish?.Invoke(); }else { finish?.Invoke(); yield break; } } } }