Esempio n. 1
0
 public AnimatorStateTransition(VirtualSerializedFile file, AnimatorController controller, TransitionConstant transition,
                                IReadOnlyList <AnimatorState> states) :
     this(file, controller, transition)
 {
     if (!transition.IsExit)
     {
         DstState = PPtr <AnimatorState> .CreateVirtualPointer(states[transition.DestinationState]);
     }
 }
Esempio n. 2
0
        public ChildAnimatorState(AnimatorState state, Vector3f position)
        {
            if (state == null)
            {
                throw new ArgumentNullException(nameof(state));
            }
            State = PPtr <AnimatorState> .CreateVirtualPointer(state);

            Position = position;
        }
Esempio n. 3
0
        public AnimatorState(VirtualSerializedFile file, AnimatorController controller, int stateMachineIndex, int stateIndex, Vector3f position) :
            base(file.CreateAssetInfo(ClassIDType.AnimatorState))
        {
            ObjectHideFlags = 1;

            IReadOnlyDictionary <uint, string> TOS = controller.TOS;
            StateMachineConstant stateMachine      = controller.Controller.StateMachineArray[stateMachineIndex].Instance;
            StateConstant        state             = stateMachine.StateConstantArray[stateIndex].Instance;

            Name = TOS[state.NameID];

            Speed       = state.Speed;
            CycleOffset = state.CycleOffset;

            m_transitions = new PPtr <AnimatorStateTransition> [state.TransitionConstantArray.Count];
            for (int i = 0; i < state.TransitionConstantArray.Count; i++)
            {
                TransitionConstant      transitionConstant = state.TransitionConstantArray[i].Instance;
                AnimatorStateTransition transition         = new AnimatorStateTransition(file, controller, transitionConstant);
                m_transitions[i] = PPtr <AnimatorStateTransition> .CreateVirtualPointer(transition);
            }

            m_stateMachineBehaviours = controller.GetStateBeahviours(stateMachineIndex, stateIndex);
            Position                   = position;
            IKOnFeet                   = state.IKOnFeet;
            WriteDefaultValues         = state.GetWriteDefaultValues(controller.File.Version);
            Mirror                     = state.Mirror;
            SpeedParameterActive       = state.SpeedParamID > 0;
            MirrorParameterActive      = state.MirrorParamID > 0;
            CycleOffsetParameterActive = state.CycleOffsetParamID > 0;
            TimeParameterActive        = state.TimeParamID > 0;

            Motion = state.CreateMotion(file, controller, 0);

            Tag                  = TOS[state.TagID];
            SpeedParameter       = TOS[state.SpeedParamID];
            MirrorParameter      = TOS[state.MirrorParamID];
            CycleOffsetParameter = TOS[state.CycleOffsetParamID];
            TimeParameter        = TOS[state.TimeParamID];

            file.AddAsset(this);
        }
Esempio n. 4
0
        public StateBehavioursPair(AnimatorState state, MonoBehaviour[] behaviours)
        {
            if (state == null)
            {
                throw new ArgumentNullException(nameof(state));
            }
            if (behaviours == null || behaviours.Length == 0)
            {
                throw new ArgumentNullException(nameof(behaviours));
            }

            State = PPtr <AnimatorState> .CreateVirtualPointer(state);

            m_stateMachineBehaviours = new PPtr <MonoBehaviour> [behaviours.Length];
            for (int i = 0; i < behaviours.Length; i++)
            {
                MonoBehaviour        behaviour    = behaviours[i];
                PPtr <MonoBehaviour> behaviourPtr = new PPtr <MonoBehaviour>(behaviour);
                m_stateMachineBehaviours[i] = behaviourPtr;
            }
        }
        public AnimatorControllerLayers(AnimatorStateMachine stateMachine, AnimatorController controller, int layerIndex)
        {
            LayerConstant layer = controller.Controller.LayerArray[layerIndex].Instance;

            stateMachine.ParentStateMachinePosition = new Vector3f(800.0f, 20.0f, 0.0f);

            Name = controller.TOS[layer.Binding];

            StateMachine = PPtr <AnimatorStateMachine> .CreateVirtualPointer(stateMachine);

#warning TODO: animator
            Mask = default;

            m_motions                = new StateMotionPair[0];
            m_behaviours             = new StateBehavioursPair[0];
            BlendingMode             = layer.LayerBlendingMode;
            SyncedLayerIndex         = layer.StateMachineMotionSetIndex == 0 ? -1 : layer.StateMachineIndex;
            DefaultWeight            = layer.DefaultWeight;
            IKPass                   = layer.IKPass;
            SyncedLayerAffectsTiming = layer.SyncedLayerAffectsTiming;
            Controller               = new PPtr <AnimatorController>(controller);
        }
Esempio n. 6
0
 public                                                    PPtr <AnimatorTransition>[] GetEntryTransitions(VirtualSerializedFile file,
                                                                                                           AnimatorController controller, uint ID, IReadOnlyList <AnimatorState> states)
 {
     if (IsReadConstantArray(controller.File.Version))
     {
         foreach (OffsetPtr <SelectorStateConstant> selectorPtr in SelectorStateConstantArray)
         {
             SelectorStateConstant selector = selectorPtr.Instance;
             if (selector.FullPathID == ID && selector.IsEntry)
             {
                 PPtr <AnimatorTransition>[] transitions = new PPtr <AnimatorTransition> [selector.TransitionConstantArray.Count - 1];
                 for (int i = 0; i < selector.TransitionConstantArray.Count - 1; i++)
                 {
                     SelectorTransitionConstant selectorTrans = selector.TransitionConstantArray[i].Instance;
                     AnimatorTransition         transition    = new AnimatorTransition(file, controller, selectorTrans, states);
                     transitions[i] = PPtr <AnimatorTransition> .CreateVirtualPointer(transition);
                 }
                 return(transitions);
             }
         }
     }
     return(new PPtr <AnimatorTransition> [0]);
 }
Esempio n. 7
0
        public AnimatorStateMachine(VirtualSerializedFile file, AnimatorController controller, int stateMachineIndex) :
            base(file.CreateAssetInfo(ClassIDType.AnimatorStateMachine))
        {
            ObjectHideFlags = 1;

            LayerConstant layer = controller.Controller.GetLayerByStateMachineIndex(stateMachineIndex);

            Name = controller.TOS[layer.Binding];

            StateMachineConstant stateMachine = controller.Controller.StateMachineArray[stateMachineIndex].Instance;

            int stateCount        = stateMachine.StateConstantArray.Count;
            int stateMachineCount = 0;
            int count             = stateCount + stateMachineCount;
            int side = (int)Math.Ceiling(Math.Sqrt(count));

            List <AnimatorState> states = new List <AnimatorState>();

            m_childStates = new ChildAnimatorState[stateCount];
            for (int y = 0, stateIndex = 0; y < side && stateIndex < stateCount; y++)
            {
                for (int x = 0; x < side && stateIndex < stateCount; x++, stateIndex++)
                {
                    Vector3f           position   = new Vector3f(x * StateOffset, y * StateOffset, 0.0f);
                    AnimatorState      state      = new AnimatorState(file, controller, stateMachineIndex, stateIndex, position);
                    ChildAnimatorState childState = new ChildAnimatorState(state, position);
                    m_childStates[stateIndex] = childState;
                    states.Add(state);
                }
            }
            m_childStateMachines = new ChildAnimatorStateMachine[stateMachineCount];

            // set destination state for transitions here because all states has become valid only now
            for (int i = 0; i < stateMachine.StateConstantArray.Count; i++)
            {
                AnimatorState state         = states[i];
                StateConstant stateConstant = stateMachine.StateConstantArray[i].Instance;
                for (int j = 0; j < stateConstant.TransitionConstantArray.Count; j++)
                {
                    long stateTransitionPath                   = state.Transitions[j].PathID;
                    AnimatorStateTransition transition         = (AnimatorStateTransition)file.GetAsset(stateTransitionPath);
                    TransitionConstant      transitionConstant = stateConstant.TransitionConstantArray[j].Instance;
                    if (!transitionConstant.IsExit)
                    {
                        AnimatorState destState = states[transitionConstant.DestinationState];
                        transition.DstState = PPtr <AnimatorState> .CreateVirtualPointer(destState);
                    }
                }
            }

            m_anyStateTransitions = new PPtr <AnimatorStateTransition> [stateMachine.AnyStateTransitionConstantArray.Count];
            for (int i = 0; i < stateMachine.AnyStateTransitionConstantArray.Count; i++)
            {
                TransitionConstant      transitionConstant = stateMachine.AnyStateTransitionConstantArray[i].Instance;
                AnimatorStateTransition transition         = new AnimatorStateTransition(file, controller, transitionConstant, states);
                m_anyStateTransitions[i] = PPtr <AnimatorStateTransition> .CreateVirtualPointer(transition);
            }

            m_entryTransitions       = stateMachine.GetEntryTransitions(file, controller, layer.Binding, states);
            m_stateMachineBehaviours = new PPtr <MonoBehaviour> [0];

            AnyStatePosition           = new Vector3f(0.0f, -StateOffset, 0.0f);
            EntryPosition              = new Vector3f(StateOffset, -StateOffset, 0.0f);
            ExitPosition               = new Vector3f(2.0f * StateOffset, -StateOffset, 0.0f);
            ParentStateMachinePosition = new Vector3f(0.0f, -2.0f * StateOffset, 0.0f);

            DefaultState = ChildStates.Count > 0 ? ChildStates[stateMachine.DefaultState].State : default;

            file.AddAsset(this);
        }