private void OnGUI() { // blueTexture = EditorGUILayout.ObjectField("Texture", blueTexture, typeof(Texture), true) as Texture; // if(GUILayout.Button(blueTexture)) // { // } //making sure the everything is in the right spot based on the blending tree, so data is not lost currentTree = EditorGUILayout.ObjectField("Blend Tree", currentTree, typeof(BlendingTree), true) as BlendingTree; if (currentTree == null) { GUILayout.Label("You need a new tree, create a new scriptable object in assets", EditorStyles.boldLabel); } if (currentTree != null) { if (currentTree.getRoot() == null) { currentTree.SetRoot(new BlendNode(blendType.BLEND_INVALID)); currentNodeType = blendType.BLEND_INVALID; } else { if (currentNode == -1) { currentNode = currentTree.getRoot().currentIndex; } //if root is an invalid node-> create a new node if (currentTree.getRoot().nodeType == blendType.BLEND_INVALID) { //currentNodeType = (blendType)EditorGUILayout.EnumPopup("root blend node type", currentNodeType); if (currentNodeType != blendType.BLEND_INVALID && currentNodeType != currentTree.getRoot().nodeType) { currentTree.SetRoot(changeNewNode(currentNodeType)); currentNode = currentTree.getRoot().currentIndex; } } else { nodeWorkings(); } } } }
public blendPoseData useBlendTree(BlendingTree tree, int keyFrameIndex) { return(NodeTree[0].blendOperation(tree, keyFrameIndex)); }
public virtual blendPoseData blendOperation(BlendingTree parentTree, int currentFrameID) { blendPoseData firstPose = new blendPoseData(); blendPoseData secondPose = new blendPoseData(); int length = 0; switch (nodeType) { case blendType.BLEND_LERP: firstPose = parentTree.getIndexedNode(nextID1).blendOperation(parentTree, currentFrameID); secondPose = parentTree.getIndexedNode(nextID2).blendOperation(parentTree, currentFrameID); length = firstPose.size; for (int i = 0; i < length; i++) { animationTransformData transformData; transformData = blendStatic.lerp(firstPose.getPoseData(i), secondPose.getPoseData(i), parameter1, true); firstPose.setPoseData(transformData, i); } return(firstPose); case blendType.BLEND_ADD: firstPose = parentTree.getIndexedNode(nextID1).blendOperation(parentTree, currentFrameID); secondPose = parentTree.getIndexedNode(nextID2).blendOperation(parentTree, currentFrameID); length = firstPose.size; for (int i = 0; i < length; i++) { animationTransformData transformData; transformData = blendStatic.add(firstPose.getPoseData(i), secondPose.getPoseData(i), true); firstPose.setPoseData(transformData, i); } return(firstPose); case blendType.BLEND_SCALE: firstPose = parentTree.getIndexedNode(nextID1).blendOperation(parentTree, currentFrameID); length = firstPose.size; for (int i = 0; i < length; i++) { animationTransformData transformData = firstPose.getPoseData(i); identity newIdentity = new identity(); transformData = blendStatic.scale(newIdentity, transformData, parameter1, true); firstPose.setPoseData(transformData, i); } return(firstPose); case blendType.BLEND_AVG: firstPose = parentTree.getIndexedNode(nextID1).blendOperation(parentTree, currentFrameID); secondPose = parentTree.getIndexedNode(nextID2).blendOperation(parentTree, currentFrameID); length = firstPose.size; for (int i = 0; i < length; i++) { animationTransformData transformData; identity nIdentity = new identity(); transformData = blendStatic.average(nIdentity, firstPose.getPoseData(i), secondPose.getPoseData(i), parameter1, parameter2, true); firstPose.setPoseData(transformData, i); } return(firstPose); case blendType.BLEND_END: blendPoseData newPoseData = new blendPoseData(); newPoseData.setData(clip, currentFrameID); return(newPoseData); default: return(firstPose); } }