コード例 #1
0
    // Create a new window to represent the passed node
    void AddWindowForNode(AT_Node node)
    {
        if (node == null)
        {
            //Debug.LogError ("AnimationTreeEditor: Trying to add window for null node");
            return;
        }

        NodeWindow win = null;

        switch (node.NodeType)
        {
        case AT_NodeType.kOutput:
            AT_OutputNode resNode = (AT_OutputNode)node;
            win = new ResultNodeWindow (new Rect (resNode.EditorProperties.Position.x, resNode.EditorProperties.Position.y, 150, 50), node);
            break;

            case AT_NodeType.kAnimation:
            AT_Animation animNode = (AT_Animation)node;
            win = new AnimationNodeWindow (new Rect (node.EditorProperties.Position.x, node.EditorProperties.Position.y, 200, 60), animNode.m_animationName, node);
            break;

            case AT_NodeType.kPose:
            AT_Pose poseNode = (AT_Pose)node;
            win = new PoseNodeWindow (new Rect (node.EditorProperties.Position.x, node.EditorProperties.Position.y, 200, 60), poseNode.m_animationName, node);
            break;

            case AT_NodeType.kAnimationState:
            AT_AnimationState animState = (AT_AnimationState)node;
            win = new AnimationStateWindow (new Rect (node.EditorProperties.Position.x, node.EditorProperties.Position.y, 150, 60), animState.m_animation.m_animationName, node);
            break;

            case AT_NodeType.kBlendGraph:
            win = new BlendGraphWindow (new Rect (node.EditorProperties.Position.x, node.EditorProperties.Position.y, 150, 60), node);
            break;

            case AT_NodeType.kBlend:
            win = new BlendNodeWindow (new Rect (node.EditorProperties.Position.x, node.EditorProperties.Position.y, 150, 100), node);
            break;

            case AT_NodeType.kStateMachine:
            win = new StateMachineWindow (new Rect (node.EditorProperties.Position.x, node.EditorProperties.Position.y, 150, 60), node);
            break;

            case AT_NodeType.kBlendContainer:
            win = new BlendContainerWindow (new Rect (node.EditorProperties.Position.x, node.EditorProperties.Position.y, 200, 60), node);
            break;

            case AT_NodeType.kAdditiveBlend:
            win = new AdditiveBlendNodeWindow (new Rect (node.EditorProperties.Position.x, node.EditorProperties.Position.y, 150, 100), node);
            break;

            case AT_NodeType.kBlendStateMachine:
            win = new BlendSMWindow (new Rect (node.EditorProperties.Position.x, node.EditorProperties.Position.y, 200, 60), node);
            break;

        case AT_NodeType.kRoot:
            Debug.LogError ("AnimationTreeEditor: Trying to add a window for the root node");
            /*AT_StateMachine sm = node as AT_StateMachine;
            if (sm != null)
            {
                Debug.Log (sm.m_stateName);
            }*/

            Debug.Log(node.GetType());

            break;
        }

        if (win != null)
        {
            m_Windows.Add (win);
        }

        // If this is a contianer, create new windows for all of its children
        AT_ContainerNode cont = node as AT_ContainerNode;
        if ( cont != null && !cont.Expandable)
        {
            foreach ( AT_Node cNode in cont.Children )
            {
                //for ( int i = 0; i < cont.Children.Count; i++ )
                //{
                    AddWindowForNode( cNode );//cont.Children[i] );
                //}
            }

            for (int i = 0; i < cont.UnassignedChildren.Count; i++)
            {
                AddWindowForNode(cont.UnassignedChildren[i]);
            }
        }
    }