FlatRedBall.Gui.TimeLine.DrawSelfAndChildren C# (CSharp) Method

DrawSelfAndChildren() private method

private DrawSelfAndChildren ( Camera camera ) : void
camera Camera
return void
        internal override void DrawSelfAndChildren(Camera camera)
		{
            if (GuiManagerDrawn == false) return;


            base.DrawSelfAndChildren(camera);

            float xToUse = WorldUnitX;
			float yToUse = positionBar.WorldUnitY;

            #region Set the color and Z of the vertices once since they'll always remain the same.
            StaticVertices[0].Color = StaticVertices[1].Color = StaticVertices[2].Color = StaticVertices[3].Color = StaticVertices[4].Color = StaticVertices[5].Color = mColor;

			StaticVertices[0].Position.Z = StaticVertices[1].Position.Z = StaticVertices[2].Position.Z = 
                StaticVertices[3].Position.Z = StaticVertices[4].Position.Z = StaticVertices[5].Position.Z = 
                camera.Z + FlatRedBall.Math.MathFunctions.ForwardVector3.Z * 100;
            #endregion


            // give the window a 1 unit border for the elements


			#region draw the horizontal bar
			StaticVertices[0].Position.X = xToUse - ScaleX+1;
			StaticVertices[0].Position.Y = yToUse - .1f;
			StaticVertices[0].TextureCoordinate.X = .59f;
			StaticVertices[0].TextureCoordinate.Y = .84f;

			StaticVertices[1].Position.X = xToUse - ScaleX + 1;
			StaticVertices[1].Position.Y = yToUse + .1f;
			StaticVertices[1].TextureCoordinate.X = .59f;
			StaticVertices[1].TextureCoordinate.Y = .835f;

			StaticVertices[2].Position.X = xToUse + this.ScaleX - 1;
			StaticVertices[2].Position.Y = yToUse + .1f;
			StaticVertices[2].TextureCoordinate.X = .591f;
			StaticVertices[2].TextureCoordinate.Y = .835f;
			
			StaticVertices[3] = StaticVertices[0];
			StaticVertices[4] = StaticVertices[2];
			
            StaticVertices[5].Position.X = xToUse + this.ScaleX - 1;
			StaticVertices[5].Position.Y = yToUse - .1f;
			StaticVertices[5].TextureCoordinate.X = .591f;
			StaticVertices[5].TextureCoordinate.Y = .84f;

            GuiManager.WriteVerts(StaticVertices);

			#endregion

			#region draw the larger increments
			double incrementsPassed = mStart/mVerticalBarIncrement;
			if(incrementsPassed != (int)mStart/mVerticalBarIncrement)
				incrementsPassed = (int)incrementsPassed + 1;

			double xPosOfVerticalBar = incrementsPassed * mVerticalBarIncrement;

			// now that we know where the first xPosOfVerticalBar is, we can calculate how many large increment lines/values we'll have.

			float offset = (float)((incrementsPassed * mVerticalBarIncrement) - mStart);

			if(mLargeIncrementPositions.Length !=  1 + (int)((mValueWidth-offset)/mVerticalBarIncrement))
                mLargeIncrementPositions = new float[ 1 + (int)((mValueWidth-offset)/mVerticalBarIncrement)];

            // This is handled in the 
            //if( mLargeIncrementValues.Length !=  1 + (int)((mValueWidth-offset)/mVerticalBarIncrement))
            //    mLargeIncrementValues = new float[ 1 + (int)((mValueWidth-offset)/mVerticalBarIncrement)];

			int i = 0;

			float barX;

            float barY = yToUse;

			while(xPosOfVerticalBar <= mStart + mValueWidth && i < mLargeIncrementPositions.Length)
			{
				barX = WorldUnitX + ValueToPositionRelative(xPosOfVerticalBar);


				StaticVertices[0].Position.X = barX - .2f;
				StaticVertices[0].Position.Y = barY - .7f;
				StaticVertices[0].TextureCoordinate.X = .59f;
				StaticVertices[0].TextureCoordinate.Y = .84f;

				StaticVertices[1].Position.X = barX - .2f;
				StaticVertices[1].Position.Y = barY + .7f;
				StaticVertices[1].TextureCoordinate.X = .59f;
				StaticVertices[1].TextureCoordinate.Y = .835f;

				StaticVertices[2].Position.X = barX + .2f;
				StaticVertices[2].Position.Y = barY + .7f;
				StaticVertices[2].TextureCoordinate.X = .591f;
				StaticVertices[2].TextureCoordinate.Y = .835f;

				StaticVertices[3] = StaticVertices[0];
				StaticVertices[4] = StaticVertices[2];

				StaticVertices[5].Position.X = barX + .2f;
				StaticVertices[5].Position.Y = barY - .7f;
				StaticVertices[5].TextureCoordinate.X = .591f;
				StaticVertices[5].TextureCoordinate.Y = .84f;

                GuiManager.WriteVerts(StaticVertices);

				mLargeIncrementPositions[i] = barX;

				switch(this.mTimeUnitDisplayed)
				{
					case TimeUnit.Millisecond:
						mLargeIncrementValues[i] = (float)(xPosOfVerticalBar * 1000);
						break;
					case TimeUnit.Second:
						mLargeIncrementValues[i] = (float)(xPosOfVerticalBar);
						break;
			
				}
				xPosOfVerticalBar += mVerticalBarIncrement;
				i++;
			}

			#endregion

			#region draw the small increments
			incrementsPassed = mStart/mSmallVerticalBarIncrement;
			if(incrementsPassed != (int)mStart/mSmallVerticalBarIncrement)
				incrementsPassed = (int)incrementsPassed + 1;


            barY = yToUse;


			xPosOfVerticalBar = incrementsPassed * mSmallVerticalBarIncrement;
			while(xPosOfVerticalBar <= mStart + mValueWidth)
			{
                barX = WorldUnitX + ValueToPositionRelative(xPosOfVerticalBar);

				StaticVertices[0].Position.X = barX - .1f;
				StaticVertices[0].Position.Y = barY - .5f;
				StaticVertices[0].TextureCoordinate.X = .59f;
				StaticVertices[0].TextureCoordinate.Y = .84f;

				StaticVertices[1].Position.X = barX - .1f;
				StaticVertices[1].Position.Y = barY + .5f;
				StaticVertices[1].TextureCoordinate.X = .59f;
				StaticVertices[1].TextureCoordinate.Y = .835f;

				StaticVertices[2].Position.X = barX + .1f;
				StaticVertices[2].Position.Y = barY + .5f;
				StaticVertices[2].TextureCoordinate.X = .591f;
				StaticVertices[2].TextureCoordinate.Y = .835f;

				StaticVertices[3] = StaticVertices[0];
				StaticVertices[4] = StaticVertices[2];

				StaticVertices[5].Position.X = barX + .1f;
				StaticVertices[5].Position.Y = barY - .5f;
				StaticVertices[5].TextureCoordinate.X = .591f;
				StaticVertices[5].TextureCoordinate.Y = .84f;

                GuiManager.WriteVerts(StaticVertices);

				xPosOfVerticalBar += mSmallVerticalBarIncrement;

			}
			#endregion

			#region draw the large increment text

            if (mShowValues)
            {
                float yPos = WorldUnitY + ScaleY + GuiManager.TextHeight / 2.0f - .2f;

                TextManager.mYForVertexBuffer = yPos;

#if FRB_MDX
            TextManager.mZForVertexBuffer = camera.Position.Z + 100;
            TextManager.mRedForVertexBuffer = 20;
            TextManager.mGreenForVertexBuffer = 20;
            TextManager.mBlueForVertexBuffer = 20;
            TextManager.mAlphaForVertexBuffer = 255;

#else
                TextManager.mZForVertexBuffer = camera.Position.Z - 100;
                TextManager.mRedForVertexBuffer = .1f;
                TextManager.mGreenForVertexBuffer = .1f;
                TextManager.mBlueForVertexBuffer = .1f;
                TextManager.mAlphaForVertexBuffer = 1;


#endif
                TextManager.mSpacingForVertexBuffer = GuiManager.TextSpacing;
                TextManager.mScaleForVertexBuffer = GuiManager.TextHeight / 2.0f;

                for (i = 0; i < this.mCachedIncrementValues.Count; i++)
                {
                    TextManager.mXForVertexBuffer = mLargeIncrementPositions[i];
                    TextManager.mRedForVertexBuffer = TextManager.mGreenForVertexBuffer =
                        TextManager.mBlueForVertexBuffer = 20;

                    string asString = mCachedIncrementValues[i];

                    TextManager.Draw(ref asString);

                }
            }
			#endregion

//			if(CurrentValue >= Start && CurrentValue <= Start + ValueWidth)
  //              positionBar.Draw(camera);

        }