Exemplo n.º 1
0
        /// <summary>
        /// draw up in order every scene node when before drawing and draw scene.
        /// </summary>
        protected void DrawSort(RenderTracer renderTracer, bool ascending)
        {
            int nodeCount = 0;

            //  fill in sort array.
            for (int i = 0; i < ChildCount; i++)
            {
                GameSceneNode child = GetChild(i) as GameSceneNode;

                if (child.Visible)
                {
                    Matrix modelView = child.TransformedMatrix * renderTracer.View;

                    sortArray[nodeCount].node  = child;
                    sortArray[nodeCount].depth = modelView.Translation.Length();

                    nodeCount++;
                }
            }

            //  draw every scene node using quick sort algorithm.
            QuickSort(ref sortArray, 0, nodeCount - 1, ascending);

            //  draw every sorted node in array.
            for (int i = 0; i < nodeCount; i++)
            {
                sortArray[i].node.Draw(renderTracer);
                sortArray[i].Clear();
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// It draws itself and child nodes.
        /// When "Visible" is set to false, it will not get executed.
        /// </summary>
        public virtual void Draw(RenderTracer renderTracer)
        {
            //  If not set to visible, it will not draw.
            if (Visible)
            {
                switch (orderWhenDraw)
                {
                case DrawOrderType.None:
                {
                    //  Draw itself
                    OnDraw(renderTracer);

                    //  Draw each child node
                    if (childList != null)
                    {
                        for (int i = 0; i < childList.Count; i++)
                        {
                            GameSceneNode gameSceneNode =
                                childList[i] as GameSceneNode;

                            if ((gameSceneNode != null) &&
                                gameSceneNode.Visible)
                            {
                                gameSceneNode.Draw(renderTracer);
                            }
                        }
                    }
                }
                break;

                case DrawOrderType.Ascending:
                {
                    //  draw up in order
                    DrawSort(renderTracer, true);
                }
                break;

                case DrawOrderType.Descending:
                {
                    //  draw up in order
                    DrawSort(renderTracer, false);
                }
                break;
                }
            }
        }
Exemplo n.º 3
0
 public void Clear()
 {
     this.node  = null;
     this.depth = 0.0f;
 }