using DG.Tweening; using UnityEngine; namespace ET { [FriendClass(typeof(BattleActionSegment))] public static class BattleActionSegmentFactory { public static BattleActionSegment Create(Entity root, BattleActionSegmentInfo info) { if (info == null) { return null; } if (info.Target == null) { Log.Error("Inavalid Targets"); return null; } var bas = root.AddChild(); bas.Source = info.Source; bas.Target = info.Target; bas.Type = info.Type; var target = bas.Target; switch (info.Type) { case BattleActionSegemntType.MoveToTarget: { bas.TotalTime = 0.5f; Tweener tweener = BattleActionSegmentHelper.CreateAttackerToTargetTweener(info.Source, target, bas.TotalTime); bas.AddComponent().AddTweener(tweener); var animState = BattleActionSegmentHelper.PlayAnim(info.Source, target, BattleAnimName.Run); var bapa = bas.AddComponent(); bapa.AddAnimation(animState); } break; case BattleActionSegemntType.Attack: { BattleViewHelper.ShowBattleUnitStateMsg(info.Source, info.AtkInfo); var config = SkillSonConfigCategory.Instance.Get(info.SonSkillId); string attackAnim = "Battle_" + config.Action; var (animState, time) = BattleActionSegmentHelper.PlayAttackAnim(info.Source, info.Target, info.HurtInfoViews, attackAnim); var bapa = bas.AddComponent(); bapa.AddAnimation(animState); bas.TotalTime = Mathf.Max(bapa.GetMaxTime(), time); } break; case BattleActionSegemntType.MoveBack: { bas.TotalTime = 0f; var moveTime = 0.5f; var bamt = bas.AddComponent(); var bapa = bas.AddComponent(); Tweener tweener; Animancer.AnimancerState animState; if (info.CastPosition != ConstCastPosition.ORIGINAL_POS) { tweener = BattleActionSegmentHelper.CreateMoveBackTweener(info.Source, moveTime); bamt.AddTweener(tweener); animState = BattleActionSegmentHelper.PlayAnim(info.Source, target, BattleAnimName.Run); bapa.AddAnimation(animState); bas.TotalTime =moveTime; } if (info.Intervener != null) { tweener = BattleActionSegmentHelper.CreateMoveBackTweener(info.Intervener, moveTime); bamt.AddTweener(tweener); animState = BattleActionSegmentHelper.PlayAnim(info.Intervener, target, BattleAnimName.Run); bapa.AddAnimation(animState); bas.TotalTime = moveTime; } } break; case BattleActionSegemntType.Intervene: { bas.TotalTime = 0.5f; var bamt = bas.AddComponent(); if (info.CastPosition != ConstCastPosition.ORIGINAL_POS) { var a2TTweener = BattleActionSegmentHelper.CreateAttackerToTargetTweener(info.Source, target, bas.TotalTime); bamt.AddTweener(a2TTweener); } var i2TTweener = BattleActionSegmentHelper.CreateInterveneToTargetTweener(info.Intervener, target, bas.TotalTime); bamt.AddTweener(i2TTweener); } break; } return bas; } } }