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