// 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; }