using System.Linq; using Code.Game.Entities; using Code.Infrastructure.Utils; using Code.OfficeGame.BattleMode.Actions.Deciders; using Code.OfficeGame.BattleMode.Timeline; using UnityEngine; namespace Code.OfficeGame.BattleMode.Actions { public class BattleActionStugger : BattleAction { private int EntryStateHash => Animator.StringToHash("WalkBlend"); private int StuggerStateHash => Animator.StringToHash("Stugger"); private BattleActionParameters _actionParameters; public BattleActionStugger(MultipleConfig actionData) { _actionParameters = actionData.Configs.SingleOrDefault(x => x.ActionType == ActionType); } public override BattleActionType ActionType => BattleActionType.Stugger; public override DeciderType DeciderType => DeciderType.AsIs; public override BattleActionData MountAndGetFrames(EntityProperties entity, BattleActionDecisionResult result) { return new StuggerActionData { TotalFrames = _actionParameters.TotalFrames, Finished = false}; } public override void Finish(EntityProperties entity, BattleActionData actionData, BattleActionDecisionResult result) { } public override void Tick(float tickDelta, EntityProperties entity, BattleActionDecisionResult battleActionDecisionResult, BattleActionData battleActionData) { if (battleActionData is not StuggerActionData stuggerActionData) { Debug.Log("WrongData"); battleActionData.Finished = true; return; } if (stuggerActionData.CurrentFrame == 0) { var transitionTime = stuggerActionData.TransitionFrames * BattleTimeline.TickDelta; entity.SyncRootMotionToMotor(); entity.animator.CrossFadeInFixedTime(StuggerStateHash, transitionTime); } stuggerActionData.CurrentFrame++; if (stuggerActionData.CurrentFrame >= _actionParameters.TotalFrames) { Debug.Log("Frame last"); battleActionData.Finished = true; } } } }