/* * @Author: 白哉 * @Description: * @Date: 2025年07月01日 星期二 14:07:05 * @Modify: */ 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 { public class FragmentMoveKill : FragmentBase { public FragmentAttackAndCounterData Data; private ProjectileTypeInfo _attackInfo; private bool _step1_attack; private bool _step2_update; private float _step1_start; private float _step2_start; public FragmentMoveKill(FragmentAttackAndCounterData data) : base() { Data = data; var animTable = Table.Instance.AnimDataAssets; if (!Table.Instance.ProjectileTypeDataAssets.GetProjectileTypeInfo(Data.AttackType, out _attackInfo)) { Debug.Log("projectileInfo can't find"); State = FragmentState.Wrong; return; } _step1_start = 0; _step2_start = _step1_start + _attackInfo.AnimTime; Duration = _step2_start; } public override bool CheckDone(float progressTime) { if (!_step1_attack || !_step2_update) return false; if (progressTime <= Duration) return false; return true; } public override void OnUpdate(float progressTime) { //Step #1执行第一步 -> 攻击 if (progressTime >= _step1_start && !_step1_attack) { _step1_attack = true; //近战攻击 if (_attackInfo.ProjectileType == ProjectileType.Melee) { var animData = UnitAtomAnimDataFactory.Create(UnitAtomAnimType.Move,Data.OriginGrid.Pos.V2(), Data.TargetGrid.Pos.V2()); Data.OriginUnitRenderer.AnimManager.EnqueueAnim(UnitAtomAnimType.Move,animData); } else //远战攻击 { var animData = UnitAtomAnimDataFactory.Create(UnitAtomAnimType.Projectile,Data.OriginGrid.Pos.V2(), Data.TargetGrid.Pos.V2()); Data.OriginUnitRenderer.AnimManager.EnqueueAnim(UnitAtomAnimType.Projectile,animData); } return; } //Step #2执行第二步 -> 死亡 + 移动 if (progressTime >= _step2_start && !_step2_update) { _step2_update = true; //让对方死亡 Data.TargetUnitRenderer.Die(); //更新死亡一方所属的城市的城市状态 Data.TargetCity.SetCityRenderer(Main.MapData); //重置周围单位的高亮状态 MapRenderer.Instance.UpdateAroundHighlight(Main.MapData,Data.TargetGrid); //我方移动 //更新我方Unit显示 Data.OriginUnitRenderer.RenderUpdateUnitAll(); //播放特效 Data.TargetGrid.Renderer(Main.MapData)?.PlayVFX(new GridVFXParams(GridVFXType.Hurt)); Data.TargetGrid.Renderer(Main.MapData)?.PlayVFX(new GridVFXParams(GridVFXType.Fog)); Data.TargetGrid.Renderer(Main.MapData)?.PlayVFX(new GridVFXParams(GridVFXType.Die)); Data.TargetGrid.Renderer(Main.MapData)?.PlayVFX(new GridVFXParams(GridVFXType.Damage,Data.AttackDmg)); return; } } } }