/* * @Author: 白哉 * @Description: * @Date: 2025年07月01日 星期二 14:07:05 * @Modify: */ using Logic.Audio; using RuntimeData; using TH1_Anim.UnitAtomAnim; using TH1_DataAssetsScript; using TH1_Logic.Core; using TH1_Renderer.UnitAtomAnim; using TH1Renderer; using UnityEngine; namespace TH1_Anim.Fragments { //用于探索者Explorer的每一次单次移动 public class FragmentMoveExplorer : FragmentBase { public FragmentMoveExplorerData Data; private bool _step1_move; private bool _step2_update; private float _step1_time; private float _step2_time; public FragmentMoveExplorer(FragmentMoveExplorerData data) : base() { Data = data; if (Data.Explorer == null || Data.OriginGrid == null || Data.TargetGrid == null) { State = FragmentState.Wrong; return; }; _step1_move = false; _step1_time = Data.MoveType == FragmentMoveExplorerType.FirstMove ? 0.1f : 0.2f; _step2_time = _step1_time + Table.Instance.AnimDataAssets.MoveAnimTime; Duration = _step2_time; State = FragmentState.Prepare; } public override bool CheckDone(float progressTime) { if (!_step1_move || !_step2_update) return false; if (progressTime <= Duration) return false; return true; } public override void OnFinished() { } public override void OnUpdate(float progressTime) { //Step #0 处理超时情况,2倍时长 if (progressTime > Duration + 10f) { _step1_move = true; _step2_update = true; return; } //Step #1 第一个动画,播放move if (progressTime >= _step1_time && !_step1_move) { _step1_move = true; MapRenderer.Instance.CameraController.CameraFocusOnGrid(Data.TargetGrid); if(Data.MoveType == FragmentMoveExplorerType.FirstMove) Data.OriginGrid.Renderer(Main.MapData)?.PlayVFX(new GridVFXParams(GridVFXType.Fog)); //AUDIO 播放移动音效 AudioManager.Instance.PlayAudio("SFX/UNIT_move"); return; } //Step #1.5 渲染explorer的移动 if (progressTime >= 0 && progressTime < _step2_time && _step1_move) { float t = (progressTime - _step1_time) / (_step2_time - _step1_time); if(Data.Explorer?.transform != null) Data.Explorer.transform.position = Vector3.Lerp(Data.OriginGrid.V3(),Data.TargetGrid.V3(), t); } //Step #2 第二个动画(瞬时) update表现 if (progressTime >= _step2_time && !_step2_update) { _step2_update = true; if (Data.MoveType == FragmentMoveExplorerType.LastMove) { Object.Destroy(Data.Explorer); Data.TargetGrid.Renderer(Main.MapData)?.PlayVFX(new GridVFXParams(GridVFXType.Fog)); } } } } }