using System.Collections; using System.Collections.Generic; using Animancer; using AYellowpaper.SerializedCollections; using BITKit; using Unity.Mathematics; using UnityEngine; namespace Project.B.Animation { public class ScriptablePlayerAnimationFactory : ScriptableHumanoidAnimationFactory,IPlayerAnimationFactory { [SerializeField] public AnimationClip[] stepUpAnimations; [SerializeField] private AnimationClip[] slidingAnimations; [SerializeField] private AnimationClip[] climbAnimations; [SerializeField] private AnimationClip[] climbUpAnimations; [SerializeField] private SerializedDictionary climbingAnimations; [SerializeField] private AnimationClip[] openParachuteAnimations; [SerializeField] private SerializedDictionary parachuteAnimations; [SerializeField] private AnimationClip[] parachuteLandAnimations; [SerializeField] private AnimationClip[] freeFallAnimations; [SerializeField] private SerializedDictionary swimmingAnimations; [SerializeField] private AnimationClip[] vaultAnimations; public object CreateStepUpAnimation() => stepUpAnimations.Random(); public object CreateSlidingAnimation() => slidingAnimations.Random(); public object CreateClimbAnimation() => climbAnimations.Random(); public IWrapper CreateClimbingAnimation() { var climbing = new LinearMixerState(); foreach (var (parameter, clip) in climbingAnimations) { climbing.Add(clip, parameter); } return new MixerStateWrapperFloat(climbing); } public object CreateClimbUpAnimation() => climbUpAnimations.Random(); public object CreateOpenParachuteAnimation() => openParachuteAnimations.Random(); public IWrapper CreateParachuteAnimation() { var state = new DirectionalMixerState(); foreach (var (parameter, clip) in parachuteAnimations) { state.Add(clip, parameter); } return new MixerStateWrapperFloat2(state); } public object CreateParachuteLandAnimation() => parachuteLandAnimations.Random(); public object CreateFreeFallAnimation() => freeFallAnimations.Random(); public IWrapper CreateSwimmingAnimation() { var state = new LinearMixerState(); foreach (var (parameter, clip) in swimmingAnimations) { state.Add(clip, parameter); } return new MixerStateWrapperFloat(state); } public object CreateVaultAnimation() => vaultAnimations.Random(); } }