コード例 #1
0
        // Initialize animation tree of the state machine node.
        private static VRage.Animations.MyAnimationTreeNode InitNodeAnimationTree(VRage.Game.ObjectBuilders.MyObjectBuilder_AnimationTreeNode objBuilderNode)
        {
            // ------- tree node track -------
            var objBuilderNodeTrack = objBuilderNode as VRage.Game.ObjectBuilders.MyObjectBuilder_AnimationTreeNodeTrack;

            if (objBuilderNodeTrack != null)
            {
                var     nodeTrack      = new VRage.Animations.AnimationNodes.MyAnimationTreeNodeTrack();
                MyModel modelAnimation = MyModels.GetModelOnlyAnimationData(objBuilderNodeTrack.PathToModel);
                if (modelAnimation != null)
                {
                    VRage.Animations.MyAnimationClip selectedClip = modelAnimation.Animations.Clips.FirstOrDefault(clipItem => clipItem.Name == objBuilderNodeTrack.AnimationName);
                    if (selectedClip == null)
                    {
                        Debug.Fail("File '" + objBuilderNodeTrack.PathToModel + "' does not contain animation clip '"
                                   + objBuilderNodeTrack.AnimationName + "'.");
                    }
                    nodeTrack.SetClip(selectedClip);
                    nodeTrack.Loop        = objBuilderNodeTrack.Loop;
                    nodeTrack.Speed       = objBuilderNodeTrack.Speed;
                    nodeTrack.Interpolate = objBuilderNodeTrack.Interpolate;
                }
                return(nodeTrack);
            }
            // ------ tree node mix -----------------------
            var objBuilderNodeMix1D = objBuilderNode as MyObjectBuilder_AnimationTreeNodeMix1D;

            if (objBuilderNodeMix1D != null)
            {
                var nodeMix1D = new VRage.Animations.AnimationNodes.MyAnimationTreeNodeMix1D();
                if (objBuilderNodeMix1D.Children != null)
                {
                    foreach (var mappingObjBuilder in objBuilderNodeMix1D.Children)
                    {
                        MyAnimationTreeNodeMix1D.MyParameterNodeMapping mapping = new MyAnimationTreeNodeMix1D.MyParameterNodeMapping()
                        {
                            ParamValueBinding = mappingObjBuilder.Param,
                            Child             = InitNodeAnimationTree(mappingObjBuilder.Node)
                        };
                        nodeMix1D.ChildMappings.Add(mapping);
                    }
                    nodeMix1D.ChildMappings.Sort((x, y) => x.ParamValueBinding.CompareTo(y.ParamValueBinding));
                }
                nodeMix1D.ParameterName = MyStringId.GetOrCompute(objBuilderNodeMix1D.ParameterName);
                return(nodeMix1D);
            }
            // ------ tree node add -----------------------
            var objBuilderNodeAdd = objBuilderNode as MyObjectBuilder_AnimationTreeNodeAdd;

            if (objBuilderNodeAdd != null)
            {
                Debug.Fail("Addition node: currently unsupported type of animation tree node.");
            }
            return(null);
        }
 // Initialize animation tree of the state machine node.
 private static VRage.Animations.MyAnimationTreeNode InitNodeAnimationTree(VRage.Game.ObjectBuilders.MyObjectBuilder_AnimationTreeNode objBuilderNode)
 {
     // ------- tree node track -------
     var objBuilderNodeTrack = objBuilderNode as VRage.Game.ObjectBuilders.MyObjectBuilder_AnimationTreeNodeTrack;
     if (objBuilderNodeTrack != null)
     {
         var nodeTrack = new VRage.Animations.AnimationNodes.MyAnimationTreeNodeTrack();
         MyModel modelAnimation = MyModels.GetModelOnlyAnimationData(objBuilderNodeTrack.PathToModel);
         if (modelAnimation != null)
         {
             VRage.Animations.MyAnimationClip selectedClip = modelAnimation.Animations.Clips.FirstOrDefault(clipItem => clipItem.Name == objBuilderNodeTrack.AnimationName);
             if (selectedClip == null)
             {
                 Debug.Fail("File '" + objBuilderNodeTrack.PathToModel + "' does not contain animation clip '" 
                     + objBuilderNodeTrack.AnimationName + "'.");
             }
             nodeTrack.SetClip(selectedClip);
             nodeTrack.Loop = objBuilderNodeTrack.Loop;
             nodeTrack.Speed = objBuilderNodeTrack.Speed;
             nodeTrack.Interpolate = objBuilderNodeTrack.Interpolate;
         }
         return nodeTrack;
     }
     // ------ tree node mix -----------------------
     var objBuilderNodeMix1D = objBuilderNode as MyObjectBuilder_AnimationTreeNodeMix1D;
     if (objBuilderNodeMix1D != null)
     {
         var nodeMix1D = new VRage.Animations.AnimationNodes.MyAnimationTreeNodeMix1D();
         if (objBuilderNodeMix1D.Children != null)
         {
             foreach (var mappingObjBuilder in objBuilderNodeMix1D.Children)
             {
                 MyAnimationTreeNodeMix1D.MyParameterNodeMapping mapping = new MyAnimationTreeNodeMix1D.MyParameterNodeMapping()
                 {
                     ParamValueBinding = mappingObjBuilder.Param,
                     Child = InitNodeAnimationTree(mappingObjBuilder.Node)
                 };
                 nodeMix1D.ChildMappings.Add(mapping);
             }
             nodeMix1D.ChildMappings.Sort((x, y) => x.ParamValueBinding.CompareTo(y.ParamValueBinding));
         }
         nodeMix1D.ParameterName = MyStringId.GetOrCompute(objBuilderNodeMix1D.ParameterName);
         return nodeMix1D;
     }
     // ------ tree node add -----------------------
     var objBuilderNodeAdd = objBuilderNode as MyObjectBuilder_AnimationTreeNodeAdd;
     if (objBuilderNodeAdd != null)
     {
         Debug.Fail("Addition node: currently unsupported type of animation tree node.");
     }
     return null;
 }