コード例 #1
0
        public void Populate()
        {
            foreach (var entry in _intermediateToCombo)
            {
                var behavior             = entry.Key;
                var transitionConditions = entry.Value;

                switch (behavior.Nature())
                {
                case AnimatedBehaviorNature.Single:
                    var sab = (SingleAnimatedBehavior)behavior;
                    ForSingle(sab, transitionConditions);
                    break;

                case AnimatedBehaviorNature.Analog:
                    AnalogAnimatedBehavior aab = (AnalogAnimatedBehavior)behavior;
                    ForAnalog(transitionConditions, aab.Squeezing.Clip, aab.Resting.Clip, aab.HandSide);
                    break;

                case AnimatedBehaviorNature.PuppetToAnalog:
                    PuppetToAnalogAnimatedBehavior ptaab = (PuppetToAnalogAnimatedBehavior)behavior;
                    ForAnalog(transitionConditions, ptaab.Squeezing.Clip, ptaab.Resting, ptaab.HandSide);
                    break;

                case AnimatedBehaviorNature.DualAnalog:
                    DualAnalogAnimatedBehavior daab = (DualAnalogAnimatedBehavior)behavior;
                    ForDualAnalog(transitionConditions, daab.BothSqueezing.Clip, daab.Resting.Clip, daab.LeftSqueezing.Clip, daab.RightSqueezing.Clip);
                    break;

                case AnimatedBehaviorNature.PuppetToDualAnalog:
                    PuppetToDualAnalogAnimatedBehavior ptdaab = (PuppetToDualAnalogAnimatedBehavior)behavior;
                    ForDualAnalog(transitionConditions, ptdaab.BothSqueezing.Clip, ptdaab.Resting, ptdaab.LeftSqueezing.Clip, ptdaab.RightSqueezing.Clip);
                    break;

                case AnimatedBehaviorNature.Puppet:
                    var pab = (PuppetAnimatedBehavior)behavior;
                    ForPuppet(transitionConditions, pab);
                    break;

                case AnimatedBehaviorNature.SimpleMassiveBlend:
                    SimpleMassiveBlendAnimatedBehavior smbab = (SimpleMassiveBlendAnimatedBehavior)behavior;
                    ForSimpleMassiveBlend(transitionConditions, smbab.Zero, smbab.One, smbab.ParameterName);
                    break;

                case AnimatedBehaviorNature.TwoDirectionsMassiveBlend:
                    TwoDirectionsMassiveBlendAnimatedBehavior tdmb = (TwoDirectionsMassiveBlendAnimatedBehavior)behavior;
                    ForTwoDirectionsMassiveBlend(transitionConditions, tdmb.Zero, tdmb.One, tdmb.MinusOne, tdmb.ParameterName);
                    break;

                case AnimatedBehaviorNature.ComplexMassiveBlend:
                    ComplexMassiveBlendAnimatedBehavior cbtmbab = (ComplexMassiveBlendAnimatedBehavior)behavior;
                    ForComplexMassiveBlend(transitionConditions, cbtmbab.Behaviors, cbtmbab.OriginalBlendTreeTemplate);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
        }
コード例 #2
0
        private static IAnimatedBehavior OfTwoDirections(MassiveBlendManifest manifest, Permutation currentPermutation)
        {
            var zero     = manifest.EquatedManifests[0].Poses[currentPermutation];
            var one      = manifest.EquatedManifests[1].Poses[currentPermutation];
            var minusOne = manifest.EquatedManifests[2].Poses[currentPermutation];

            return(TwoDirectionsMassiveBlendAnimatedBehavior.Maybe(zero, one, minusOne, manifest.SimpleParameterName));
        }