internal override void DrawSelfAndChildren(Camera camera) { if (Visible == false) { return; } float xToUse = mWorldUnitX; float yToUse = mWorldUnitY; float edgeWidth = .2f; #region draw the basic button 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; StaticVertices[0].Color = StaticVertices[1].Color = StaticVertices[2].Color = StaticVertices[3].Color = StaticVertices[4].Color = StaticVertices[5].Color = mColor; if (mDrawBase) { #region state == "down" if (ButtonPushedState == ButtonPushedState.Down) { #region Top Left of the Window StaticVertices[0].Position.X = xToUse - ScaleX; StaticVertices[0].Position.Y = yToUse + ScaleY - edgeWidth; StaticVertices[0].TextureCoordinate.X = .179688f; StaticVertices[0].TextureCoordinate.Y = .64453125f; StaticVertices[1].Position.X = xToUse - ScaleX; StaticVertices[1].Position.Y = yToUse + ScaleY; StaticVertices[1].TextureCoordinate.X = .179688f; StaticVertices[1].TextureCoordinate.Y = .640625f; StaticVertices[2].Position.X = xToUse - ScaleX + edgeWidth; StaticVertices[2].Position.Y = yToUse + ScaleY; StaticVertices[2].TextureCoordinate.X = .18359375f; StaticVertices[2].TextureCoordinate.Y = .640625f; StaticVertices[3] = StaticVertices[0]; StaticVertices[4] = StaticVertices[2]; StaticVertices[5].Position.X = xToUse - ScaleX + edgeWidth; StaticVertices[5].Position.Y = yToUse + ScaleY - edgeWidth; StaticVertices[5].TextureCoordinate.X = .18359375f; StaticVertices[5].TextureCoordinate.Y = .64453125f; GuiManager.WriteVerts(StaticVertices); #endregion #region Top Border StaticVertices[0].Position.X = xToUse - ScaleX + edgeWidth; StaticVertices[0].Position.Y = yToUse + ScaleY - edgeWidth; StaticVertices[0].TextureCoordinate.X = .1796875f; StaticVertices[0].TextureCoordinate.Y = .64453125f; StaticVertices[1].Position.X = xToUse - ScaleX + edgeWidth; StaticVertices[1].Position.Y = yToUse + ScaleY; StaticVertices[1].TextureCoordinate.X = .1796875f; StaticVertices[1].TextureCoordinate.Y = .640625f; StaticVertices[2].Position.X = xToUse + ScaleX - edgeWidth; StaticVertices[2].Position.Y = yToUse + ScaleY; StaticVertices[2].TextureCoordinate.X = .18359375f; StaticVertices[2].TextureCoordinate.Y = .640625f; StaticVertices[3] = StaticVertices[0]; StaticVertices[4] = StaticVertices[2]; StaticVertices[5].Position.X = xToUse + ScaleX - edgeWidth; StaticVertices[5].Position.Y = yToUse + ScaleY - edgeWidth; StaticVertices[5].TextureCoordinate.X = .18359375f; StaticVertices[5].TextureCoordinate.Y = .64453125f; GuiManager.WriteVerts(StaticVertices); #endregion #region Top Right of the Window StaticVertices[0].Position.X = xToUse + ScaleX - edgeWidth; StaticVertices[0].Position.Y = yToUse + ScaleY - edgeWidth; StaticVertices[0].TextureCoordinate.X = .17578125f; StaticVertices[0].TextureCoordinate.Y = .640625f; StaticVertices[1].Position.X = xToUse + ScaleX - edgeWidth; StaticVertices[1].Position.Y = yToUse + ScaleY; StaticVertices[1].TextureCoordinate.X = .17578125f; StaticVertices[1].TextureCoordinate.Y = .63671875f; StaticVertices[2].Position.X = xToUse + ScaleX; StaticVertices[2].Position.Y = yToUse + ScaleY; StaticVertices[2].TextureCoordinate.X = .1796875f; StaticVertices[2].TextureCoordinate.Y = .63671875f; StaticVertices[3] = StaticVertices[0]; StaticVertices[4] = StaticVertices[2]; StaticVertices[5].Position.X = xToUse + ScaleX; StaticVertices[5].Position.Y = yToUse + ScaleY - edgeWidth; StaticVertices[5].TextureCoordinate.X = .1796875f; StaticVertices[5].TextureCoordinate.Y = .640625f; GuiManager.WriteVerts(StaticVertices); #endregion #region RightBorder StaticVertices[0].Position.X = xToUse + ScaleX - edgeWidth; StaticVertices[0].Position.Y = yToUse - ScaleY + edgeWidth; StaticVertices[0].TextureCoordinate.X = .17578125f; StaticVertices[0].TextureCoordinate.Y = .63671875f; StaticVertices[1].Position.X = xToUse + ScaleX - edgeWidth; StaticVertices[1].Position.Y = yToUse + ScaleY - edgeWidth; StaticVertices[1].TextureCoordinate.X = .17578125f; StaticVertices[1].TextureCoordinate.Y = .6328125f; StaticVertices[2].Position.X = xToUse + ScaleX; StaticVertices[2].Position.Y = yToUse + ScaleY - edgeWidth; StaticVertices[2].TextureCoordinate.X = .1796875f; StaticVertices[2].TextureCoordinate.Y = .6328125f; StaticVertices[3] = StaticVertices[0]; StaticVertices[4] = StaticVertices[2]; StaticVertices[5].Position.X = xToUse + ScaleX; StaticVertices[5].Position.Y = yToUse - ScaleY + edgeWidth; StaticVertices[5].TextureCoordinate.X = .1796875f; StaticVertices[5].TextureCoordinate.Y = .63671875f; GuiManager.WriteVerts(StaticVertices); #endregion #region Bottom Border StaticVertices[0].Position.X = xToUse - ScaleX + edgeWidth; StaticVertices[0].Position.Y = yToUse - ScaleY; StaticVertices[0].TextureCoordinate.X = .1796875f; StaticVertices[0].TextureCoordinate.Y = .63671875f; StaticVertices[1].Position.X = xToUse - ScaleX + edgeWidth; StaticVertices[1].Position.Y = yToUse - ScaleY + edgeWidth; StaticVertices[1].TextureCoordinate.X = .1796875f; StaticVertices[1].TextureCoordinate.Y = .6328125f; StaticVertices[2].Position.X = xToUse + ScaleX - edgeWidth; StaticVertices[2].Position.Y = yToUse - ScaleY + edgeWidth; StaticVertices[2].TextureCoordinate.X = .18359375f; StaticVertices[2].TextureCoordinate.Y = .6328125f; StaticVertices[3] = StaticVertices[0]; StaticVertices[4] = StaticVertices[2]; StaticVertices[5].Position.X = xToUse + ScaleX - edgeWidth; StaticVertices[5].Position.Y = yToUse - ScaleY; StaticVertices[5].TextureCoordinate.X = .18359375f; StaticVertices[5].TextureCoordinate.Y = .63671875f; GuiManager.WriteVerts(StaticVertices); #endregion #region LeftBorder StaticVertices[0].Position.X = xToUse - ScaleX; StaticVertices[0].Position.Y = yToUse - ScaleY + edgeWidth; StaticVertices[0].TextureCoordinate.X = .18359375f; StaticVertices[0].TextureCoordinate.Y = .640625f; StaticVertices[1].Position.X = xToUse - ScaleX; StaticVertices[1].Position.Y = yToUse + ScaleY - edgeWidth; StaticVertices[1].TextureCoordinate.X = .18359375f; StaticVertices[1].TextureCoordinate.Y = .63671875f; StaticVertices[2].Position.X = xToUse - ScaleX + edgeWidth; StaticVertices[2].Position.Y = yToUse + ScaleY - edgeWidth; StaticVertices[2].TextureCoordinate.X = .1875f; StaticVertices[2].TextureCoordinate.Y = .63671875f; StaticVertices[3] = StaticVertices[0]; StaticVertices[4] = StaticVertices[2]; StaticVertices[5].Position.X = xToUse - ScaleX + edgeWidth; StaticVertices[5].Position.Y = yToUse - ScaleY + edgeWidth; StaticVertices[5].TextureCoordinate.X = .1875f; StaticVertices[5].TextureCoordinate.Y = .640625f; GuiManager.WriteVerts(StaticVertices); #endregion #region Bottom Left of the Window StaticVertices[0].Position.X = xToUse - ScaleX; StaticVertices[0].Position.Y = yToUse - ScaleY; StaticVertices[0].TextureCoordinate.X = .179688f; StaticVertices[0].TextureCoordinate.Y = .63671875f; StaticVertices[1].Position.X = xToUse - ScaleX; StaticVertices[1].Position.Y = yToUse - ScaleY + edgeWidth; StaticVertices[1].TextureCoordinate.X = .179688f; StaticVertices[1].TextureCoordinate.Y = .6328125f; StaticVertices[2].Position.X = xToUse - ScaleX + edgeWidth; StaticVertices[2].Position.Y = yToUse - ScaleY + edgeWidth; StaticVertices[2].TextureCoordinate.X = .18359375f; StaticVertices[2].TextureCoordinate.Y = .6328125f; StaticVertices[3] = StaticVertices[0]; StaticVertices[4] = StaticVertices[2]; StaticVertices[5].Position.X = xToUse - ScaleX + edgeWidth; StaticVertices[5].Position.Y = yToUse - ScaleY; StaticVertices[5].TextureCoordinate.X = .18359375f; StaticVertices[5].TextureCoordinate.Y = .63671875f; GuiManager.WriteVerts(StaticVertices); #endregion #region Center StaticVertices[0].Position.X = xToUse - ScaleX + edgeWidth; StaticVertices[0].Position.Y = yToUse - ScaleY + edgeWidth; StaticVertices[0].TextureCoordinate.X = .10938f; StaticVertices[0].TextureCoordinate.Y = .63719f; StaticVertices[1].Position.X = xToUse - ScaleX + edgeWidth; StaticVertices[1].Position.Y = yToUse + ScaleY - edgeWidth; StaticVertices[1].TextureCoordinate.X = .10938f; StaticVertices[1].TextureCoordinate.Y = .6953125f; StaticVertices[2].Position.X = xToUse + ScaleX - edgeWidth; StaticVertices[2].Position.Y = yToUse + ScaleY - edgeWidth; StaticVertices[2].TextureCoordinate.X = .10998f; StaticVertices[2].TextureCoordinate.Y = .6953125f; StaticVertices[3] = StaticVertices[0]; StaticVertices[4] = StaticVertices[2]; StaticVertices[5].Position.X = xToUse + ScaleX - edgeWidth; StaticVertices[5].Position.Y = yToUse - ScaleY + edgeWidth; StaticVertices[5].TextureCoordinate.X = .10998f; StaticVertices[5].TextureCoordinate.Y = .63719f; GuiManager.WriteVerts(StaticVertices); #endregion #region Bottom Right of the Window StaticVertices[0].Position.X = xToUse + ScaleX - edgeWidth; StaticVertices[0].Position.Y = yToUse - ScaleY; StaticVertices[0].TextureCoordinate.X = .17578125f; StaticVertices[0].TextureCoordinate.Y = .63671875f; StaticVertices[1].Position.X = xToUse + ScaleX - edgeWidth; StaticVertices[1].Position.Y = yToUse - ScaleY + edgeWidth; StaticVertices[1].TextureCoordinate.X = .17578125f; StaticVertices[1].TextureCoordinate.Y = .6328125f; StaticVertices[2].Position.X = xToUse + ScaleX; StaticVertices[2].Position.Y = yToUse - ScaleY + edgeWidth; StaticVertices[2].TextureCoordinate.X = .1796875f; StaticVertices[2].TextureCoordinate.Y = .6328125f; StaticVertices[3] = StaticVertices[0]; StaticVertices[4] = StaticVertices[2]; StaticVertices[5].Position.X = xToUse + ScaleX; StaticVertices[5].Position.Y = yToUse - ScaleY; StaticVertices[5].TextureCoordinate.X = .1796875f; StaticVertices[5].TextureCoordinate.Y = .63671875f; GuiManager.WriteVerts(StaticVertices); #endregion } #endregion #region state == "up" else { #region Top Left of the Window StaticVertices[0].Position.X = xToUse - ScaleX; StaticVertices[0].Position.Y = yToUse + ScaleY - edgeWidth; StaticVertices[0].TextureCoordinate.X = .17578125f; StaticVertices[0].TextureCoordinate.Y = .63671875f; StaticVertices[1].Position.X = xToUse - ScaleX; StaticVertices[1].Position.Y = yToUse + ScaleY; StaticVertices[1].TextureCoordinate.X = .17578125f; StaticVertices[1].TextureCoordinate.Y = .6328125f; StaticVertices[2].Position.X = xToUse - ScaleX + edgeWidth; StaticVertices[2].Position.Y = yToUse + ScaleY; StaticVertices[2].TextureCoordinate.X = .1796875f; StaticVertices[2].TextureCoordinate.Y = .6328125f; StaticVertices[3] = StaticVertices[0]; StaticVertices[4] = StaticVertices[2]; StaticVertices[5].Position.X = xToUse - ScaleX + edgeWidth; StaticVertices[5].Position.Y = yToUse + ScaleY - edgeWidth; StaticVertices[5].TextureCoordinate.X = .1796875f; StaticVertices[5].TextureCoordinate.Y = .63671875f; GuiManager.WriteVerts(StaticVertices); #endregion #region Top Border StaticVertices[0].Position.X = xToUse - ScaleX + edgeWidth; StaticVertices[0].Position.Y = yToUse + ScaleY - edgeWidth; StaticVertices[0].TextureCoordinate.X = .1796875f; StaticVertices[0].TextureCoordinate.Y = .63671875f; StaticVertices[1].Position.X = xToUse - ScaleX + edgeWidth; StaticVertices[1].Position.Y = yToUse + ScaleY; StaticVertices[1].TextureCoordinate.X = .1796875f; StaticVertices[1].TextureCoordinate.Y = .6328125f; StaticVertices[2].Position.X = xToUse + ScaleX - edgeWidth; StaticVertices[2].Position.Y = yToUse + ScaleY; StaticVertices[2].TextureCoordinate.X = .18359375f; StaticVertices[2].TextureCoordinate.Y = .6328125f; StaticVertices[3] = StaticVertices[0]; StaticVertices[4] = StaticVertices[2]; StaticVertices[5].Position.X = xToUse + ScaleX - edgeWidth; StaticVertices[5].Position.Y = yToUse + ScaleY - edgeWidth; StaticVertices[5].TextureCoordinate.X = .18359375f; StaticVertices[5].TextureCoordinate.Y = .63671875f; GuiManager.WriteVerts(StaticVertices); #endregion #region Top Right of the Window StaticVertices[0].Position.X = xToUse + ScaleX - edgeWidth; StaticVertices[0].Position.Y = yToUse + ScaleY - edgeWidth; StaticVertices[0].TextureCoordinate.X = .179688f; StaticVertices[0].TextureCoordinate.Y = .63671875f; StaticVertices[1].Position.X = xToUse + ScaleX - edgeWidth; StaticVertices[1].Position.Y = yToUse + ScaleY; StaticVertices[1].TextureCoordinate.X = .179688f; StaticVertices[1].TextureCoordinate.Y = .6328125f; StaticVertices[2].Position.X = xToUse + ScaleX; StaticVertices[2].Position.Y = yToUse + ScaleY; StaticVertices[2].TextureCoordinate.X = .18359375f; StaticVertices[2].TextureCoordinate.Y = .6328125f; StaticVertices[3] = StaticVertices[0]; StaticVertices[4] = StaticVertices[2]; StaticVertices[5].Position.X = xToUse + ScaleX; StaticVertices[5].Position.Y = yToUse + ScaleY - edgeWidth; StaticVertices[5].TextureCoordinate.X = .18359375f; StaticVertices[5].TextureCoordinate.Y = .63671875f; GuiManager.WriteVerts(StaticVertices); #endregion #region RightBorder StaticVertices[0].Position.X = xToUse + ScaleX - edgeWidth; StaticVertices[0].Position.Y = yToUse - ScaleY + edgeWidth; StaticVertices[0].TextureCoordinate.X = .18359375f; StaticVertices[0].TextureCoordinate.Y = .640625f; StaticVertices[1].Position.X = xToUse + ScaleX - edgeWidth; StaticVertices[1].Position.Y = yToUse + ScaleY - edgeWidth; StaticVertices[1].TextureCoordinate.X = .18359375f; StaticVertices[1].TextureCoordinate.Y = .63671875f; StaticVertices[2].Position.X = xToUse + ScaleX; StaticVertices[2].Position.Y = yToUse + ScaleY - edgeWidth; StaticVertices[2].TextureCoordinate.X = .1875f; StaticVertices[2].TextureCoordinate.Y = .63671875f; StaticVertices[3] = StaticVertices[0]; StaticVertices[4] = StaticVertices[2]; StaticVertices[5].Position.X = xToUse + ScaleX; StaticVertices[5].Position.Y = yToUse - ScaleY + edgeWidth; StaticVertices[5].TextureCoordinate.X = .1875f; StaticVertices[5].TextureCoordinate.Y = .640625f; GuiManager.WriteVerts(StaticVertices); #endregion #region Bottom Right of the Window StaticVertices[0].Position.X = xToUse + ScaleX - edgeWidth; StaticVertices[0].Position.Y = yToUse - ScaleY; StaticVertices[0].TextureCoordinate.X = .179688f; StaticVertices[0].TextureCoordinate.Y = .64453125f; StaticVertices[1].Position.X = xToUse + ScaleX - edgeWidth; StaticVertices[1].Position.Y = yToUse - ScaleY + edgeWidth; StaticVertices[1].TextureCoordinate.X = .179688f; StaticVertices[1].TextureCoordinate.Y = .640625f; StaticVertices[2].Position.X = xToUse + ScaleX; StaticVertices[2].Position.Y = yToUse - ScaleY + edgeWidth; StaticVertices[2].TextureCoordinate.X = .18359375f; StaticVertices[2].TextureCoordinate.Y = .640625f; StaticVertices[3] = StaticVertices[0]; StaticVertices[4] = StaticVertices[2]; StaticVertices[5].Position.X = xToUse + ScaleX; StaticVertices[5].Position.Y = yToUse - ScaleY; StaticVertices[5].TextureCoordinate.X = .18359375f; StaticVertices[5].TextureCoordinate.Y = .64453125f; GuiManager.WriteVerts(StaticVertices); #endregion #region Bottom Border StaticVertices[0].Position.X = xToUse - ScaleX + edgeWidth; StaticVertices[0].Position.Y = yToUse - ScaleY; StaticVertices[0].TextureCoordinate.X = .1796875f; StaticVertices[0].TextureCoordinate.Y = .64453125f; StaticVertices[1].Position.X = xToUse - ScaleX + edgeWidth; StaticVertices[1].Position.Y = yToUse - ScaleY + edgeWidth; StaticVertices[1].TextureCoordinate.X = .1796875f; StaticVertices[1].TextureCoordinate.Y = .640625f; StaticVertices[2].Position.X = xToUse + ScaleX - edgeWidth; StaticVertices[2].Position.Y = yToUse - ScaleY + edgeWidth; StaticVertices[2].TextureCoordinate.X = .18359375f; StaticVertices[2].TextureCoordinate.Y = .640625f; StaticVertices[3] = StaticVertices[0]; StaticVertices[4] = StaticVertices[2]; StaticVertices[5].Position.X = xToUse + ScaleX - edgeWidth; StaticVertices[5].Position.Y = yToUse - ScaleY; StaticVertices[5].TextureCoordinate.X = .18359375f; StaticVertices[5].TextureCoordinate.Y = .64453125f; GuiManager.WriteVerts(StaticVertices); #endregion #region LeftBorder StaticVertices[0].Position.X = xToUse - ScaleX; StaticVertices[0].Position.Y = yToUse - ScaleY + edgeWidth; StaticVertices[0].TextureCoordinate.X = .17578125f; StaticVertices[0].TextureCoordinate.Y = .63671875f; StaticVertices[1].Position.X = xToUse - ScaleX; StaticVertices[1].Position.Y = yToUse + ScaleY - edgeWidth; StaticVertices[1].TextureCoordinate.X = .17578125f; StaticVertices[1].TextureCoordinate.Y = .6328125f; StaticVertices[2].Position.X = xToUse - ScaleX + edgeWidth; StaticVertices[2].Position.Y = yToUse + ScaleY - edgeWidth; StaticVertices[2].TextureCoordinate.X = .1796875f; StaticVertices[2].TextureCoordinate.Y = .6328125f; StaticVertices[3] = StaticVertices[0]; StaticVertices[4] = StaticVertices[2]; StaticVertices[5].Position.X = xToUse - ScaleX + edgeWidth; StaticVertices[5].Position.Y = yToUse - ScaleY + edgeWidth; StaticVertices[5].TextureCoordinate.X = .1796875f; StaticVertices[5].TextureCoordinate.Y = .63671875f; GuiManager.WriteVerts(StaticVertices); #endregion #region Bottom Left of the Window StaticVertices[0].Position.X = xToUse - ScaleX; StaticVertices[0].Position.Y = yToUse - ScaleY; StaticVertices[0].TextureCoordinate.X = .17578125f; StaticVertices[0].TextureCoordinate.Y = .640625f; StaticVertices[1].Position.X = xToUse - ScaleX; StaticVertices[1].Position.Y = yToUse - ScaleY + edgeWidth; StaticVertices[1].TextureCoordinate.X = .17578125f; StaticVertices[1].TextureCoordinate.Y = .63671875f; StaticVertices[2].Position.X = xToUse - ScaleX + edgeWidth; StaticVertices[2].Position.Y = yToUse - ScaleY + edgeWidth; StaticVertices[2].TextureCoordinate.X = .1796875f; StaticVertices[2].TextureCoordinate.Y = .63671875f; StaticVertices[3] = StaticVertices[0]; StaticVertices[4] = StaticVertices[2]; StaticVertices[5].Position.X = xToUse - ScaleX + edgeWidth; StaticVertices[5].Position.Y = yToUse - ScaleY; StaticVertices[5].TextureCoordinate.X = .1796875f; StaticVertices[5].TextureCoordinate.Y = .640625f; GuiManager.WriteVerts(StaticVertices); #endregion #region Center StaticVertices[0].Position.X = xToUse - ScaleX + edgeWidth; StaticVertices[0].Position.Y = yToUse - ScaleY + edgeWidth; StaticVertices[0].TextureCoordinate.X = .10938f; StaticVertices[0].TextureCoordinate.Y = .6953125f; StaticVertices[1].Position.X = xToUse - ScaleX + edgeWidth; StaticVertices[1].Position.Y = yToUse + ScaleY - edgeWidth; StaticVertices[1].TextureCoordinate.X = .10938f; StaticVertices[1].TextureCoordinate.Y = .63719f; StaticVertices[2].Position.X = xToUse + ScaleX - edgeWidth; StaticVertices[2].Position.Y = yToUse + ScaleY - edgeWidth; StaticVertices[2].TextureCoordinate.X = .10998f; StaticVertices[2].TextureCoordinate.Y = .63719f; StaticVertices[3] = StaticVertices[0]; StaticVertices[4] = StaticVertices[2]; StaticVertices[5].Position.X = xToUse + ScaleX - edgeWidth; StaticVertices[5].Position.Y = yToUse - ScaleY + edgeWidth; StaticVertices[5].TextureCoordinate.X = .10998f; StaticVertices[5].TextureCoordinate.Y = .6953125f; GuiManager.WriteVerts(StaticVertices); #endregion } #endregion } #endregion #region draw overlay texture if it is an icon in our Gui texture #if FRB_MDX uint colorBefore = mColor; #else Color colorBefore = mColor; #endif if (ButtonPushedState == ButtonPushedState.Down && mHighlightOnDown) { // This will only have an impact on the button if it is using an overlay texture. #if FRB_MDX StaticVertices[0].Color = StaticVertices[1].Color = StaticVertices[2].Color = StaticVertices[3].Color = StaticVertices[4].Color = StaticVertices[5].Color = 0xff333333; #else StaticVertices[0].Color.PackedValue = StaticVertices[1].Color.PackedValue = StaticVertices[2].Color.PackedValue = StaticVertices[3].Color.PackedValue = StaticVertices[4].Color.PackedValue = StaticVertices[5].Color.PackedValue = 0xff333333; #endif } if (ButtonPushedState == ButtonPushedState.Down && downOverlayTL.X != -1) { StaticVertices[0].Position.X = xToUse - ScaleX + edgeWidth; StaticVertices[0].Position.Y = yToUse - ScaleY + edgeWidth; StaticVertices[0].TextureCoordinate.X = (float)downOverlayBL.X; StaticVertices[0].TextureCoordinate.Y = (float)downOverlayBL.Y; StaticVertices[1].Position.X = xToUse - ScaleX + edgeWidth; StaticVertices[1].Position.Y = yToUse + ScaleY - edgeWidth; StaticVertices[1].TextureCoordinate.X = (float)downOverlayTL.X; StaticVertices[1].TextureCoordinate.Y = (float)downOverlayTL.Y; StaticVertices[2].Position.X = xToUse + ScaleX - edgeWidth; StaticVertices[2].Position.Y = yToUse + ScaleY - edgeWidth; StaticVertices[2].TextureCoordinate.X = (float)downOverlayTR.X; StaticVertices[2].TextureCoordinate.Y = (float)downOverlayTR.Y; StaticVertices[3] = StaticVertices[0]; StaticVertices[4] = StaticVertices[2]; StaticVertices[5].Position.X = xToUse + ScaleX - edgeWidth; StaticVertices[5].Position.Y = yToUse - ScaleY + edgeWidth; StaticVertices[5].TextureCoordinate.X = (float)downOverlayBR.X; StaticVertices[5].TextureCoordinate.Y = (float)downOverlayBR.Y; GuiManager.WriteVerts(StaticVertices); #if FRB_MDX mColor = 0xff000000; #else mColor.PackedValue = 0xff000000; #endif } else if (overlayTL.X != -1) { StaticVertices[0].Position.X = xToUse - ScaleX + edgeWidth; StaticVertices[0].Position.Y = yToUse - ScaleY + edgeWidth; StaticVertices[0].TextureCoordinate.X = (float)overlayBL.X; StaticVertices[0].TextureCoordinate.Y = (float)overlayBL.Y; StaticVertices[1].Position.X = xToUse - ScaleX + edgeWidth; StaticVertices[1].Position.Y = yToUse + ScaleY - edgeWidth; StaticVertices[1].TextureCoordinate.X = (float)overlayTL.X; StaticVertices[1].TextureCoordinate.Y = (float)overlayTL.Y; StaticVertices[2].Position.X = xToUse + ScaleX - edgeWidth; StaticVertices[2].Position.Y = yToUse + ScaleY - edgeWidth; StaticVertices[2].TextureCoordinate.X = (float)overlayTR.X; StaticVertices[2].TextureCoordinate.Y = (float)overlayTR.Y; StaticVertices[3] = StaticVertices[0]; StaticVertices[4] = StaticVertices[2]; StaticVertices[5].Position.X = xToUse + ScaleX - edgeWidth; StaticVertices[5].Position.Y = yToUse - ScaleY + edgeWidth; StaticVertices[5].TextureCoordinate.X = (float)overlayBR.X; StaticVertices[5].TextureCoordinate.Y = (float)overlayBR.Y; GuiManager.WriteVerts(StaticVertices); } mColor = colorBefore; #endregion #region draw the overlay texture if it is in a different texture if (this.mOverlayTexture != null) { float left = mTextureLeft; float right = mTextureRight; float top = mTextureTop; float bottom = mTextureBottom; if (mFlipHorizontal) { float temporary = left; left = right; right = temporary; } if (mFlipVertical) { float temporary = top; top = bottom; bottom = temporary; } GuiManager.AddTextureSwitch(mOverlayTexture); StaticVertices[0].Position.X = xToUse - ScaleX + edgeWidth; StaticVertices[0].Position.Y = yToUse - ScaleY + edgeWidth; StaticVertices[0].TextureCoordinate.X = left; StaticVertices[0].TextureCoordinate.Y = bottom; StaticVertices[1].Position.X = xToUse - ScaleX + edgeWidth; StaticVertices[1].Position.Y = yToUse + ScaleY - edgeWidth; StaticVertices[1].TextureCoordinate.X = left; StaticVertices[1].TextureCoordinate.Y = top; StaticVertices[2].Position.X = xToUse + ScaleX - edgeWidth; StaticVertices[2].Position.Y = yToUse + ScaleY - edgeWidth; StaticVertices[2].TextureCoordinate.X = right; StaticVertices[2].TextureCoordinate.Y = top; StaticVertices[3] = StaticVertices[0]; StaticVertices[4] = StaticVertices[2]; StaticVertices[5].Position.X = xToUse + ScaleX - edgeWidth; StaticVertices[5].Position.Y = yToUse - ScaleY + edgeWidth; StaticVertices[5].TextureCoordinate.X = right; StaticVertices[5].TextureCoordinate.Y = bottom; GuiManager.WriteVerts(StaticVertices); } #endregion #region Draw the text #if FRB_MDX TextManager.mZForVertexBuffer = camera.Position.Z + 100; #else TextManager.mZForVertexBuffer = camera.Position.Z - 100; #endif TextManager.mScaleForVertexBuffer = GuiManager.TextHeight / 2.0f; TextManager.mSpacingForVertexBuffer = GuiManager.TextHeight / 2.0f; TextManager.mAlignmentForVertexBuffer = HorizontalAlignment.Center; TextManager.mMaxWidthForVertexBuffer = 1000; if (this.overlayTL.X == -1 && this.mOverlayTexture == null && Text != null && Text != "") { TextManager.mXForVertexBuffer = xToUse; TextManager.mYForVertexBuffer = yToUse; int numberOfLines = StringFunctions.GetLineCount(mText); if (numberOfLines > 1) { TextManager.mYForVertexBuffer += TextManager.mSpacingForVertexBuffer * (numberOfLines - 1); } TextManager.mRedForVertexBuffer = TextManager.mGreenForVertexBuffer = TextManager.mBlueForVertexBuffer = 20; if (!Enabled) { TextManager.mAlphaForVertexBuffer = FlatRedBall.Graphics.GraphicalEnumerations.MaxColorComponentValue / 2.0f; } else { TextManager.mAlphaForVertexBuffer = FlatRedBall.Graphics.GraphicalEnumerations.MaxColorComponentValue; } string textToDraw = this.Text; TextManager.Draw(ref textToDraw); } #endregion }
internal void Draw(Camera camera, double startY, double startX, double maxWidth, int numDeep, ref int itemNum, ref int numDrawn, int startAt, int numToDraw, float distanceBetweenLines) { if (itemNum > startAt - 1) { float yForThisRender = (float)(startY - distanceBetweenLines * numDrawn); float xPos = (float)(startX + numDeep * .7); if (icons.Count != 0 && icons[0].ScaleX > .7f) { xPos += icons[0].ScaleX - .7f; } float yPos = yForThisRender; #region draw the icons foreach (ListBoxIcon icon in icons) { if (icon.Texture != null) { GuiManager.AddTextureSwitch(icon.Texture); } v[0].Position.X = xPos - icon.ScaleX; v[0].Position.Y = yPos - icon.ScaleY; v[0].TextureCoordinate.X = icon.Left; v[0].TextureCoordinate.Y = icon.Bottom; v[1].Position.X = xPos - icon.ScaleX; v[1].Position.Y = yPos + icon.ScaleY; v[1].TextureCoordinate.X = icon.Left; v[1].TextureCoordinate.Y = icon.Top; v[2].Position.X = xPos + icon.ScaleX; v[2].Position.Y = yPos + icon.ScaleY; v[2].TextureCoordinate.X = icon.Right; v[2].TextureCoordinate.Y = icon.Top; v[3] = v[0]; v[4] = v[2]; v[5].Position.X = xPos + icon.ScaleX; v[5].Position.Y = yPos - icon.ScaleY; v[5].TextureCoordinate.X = icon.Right; v[5].TextureCoordinate.Y = icon.Bottom; GuiManager.WriteVerts(v); xPos += .1f + 2 * icon.ScaleX; } #endregion if (this.Text != null) { string textToUse = this.Text.Replace('\n', ' '); int numOfChars = TextManager.GetNumberOfCharsIn((float)(maxWidth - numDeep * .7f), textToUse, GuiManager.TextSpacing); // TODO: need to modify this to handle varying text sizes TextManager.mScaleForVertexBuffer = GuiManager.TextHeight / 2.0f; TextManager.mSpacingForVertexBuffer = GuiManager.TextSpacing; TextManager.mYForVertexBuffer = yForThisRender; #if FRB_MDX TextManager.mZForVertexBuffer = (float)camera.Z + 100; #else TextManager.mZForVertexBuffer = (float)camera.Z - 100; #endif if (Enabled) { TextManager.mAlphaForVertexBuffer = 1 * FlatRedBall.Graphics.GraphicalEnumerations.MaxColorComponentValue; } else { TextManager.mAlphaForVertexBuffer = .5f * FlatRedBall.Graphics.GraphicalEnumerations.MaxColorComponentValue; } TextManager.mAlignmentForVertexBuffer = HorizontalAlignment.Left; if (mDrawHighlighted) { TextManager.mRedForVertexBuffer = TextManager.mGreenForVertexBuffer = TextManager.mBlueForVertexBuffer = FlatRedBall.Graphics.GraphicalEnumerations.MaxColorComponentValue; } else { TextManager.mRedForVertexBuffer = TextManager.mGreenForVertexBuffer = TextManager.mBlueForVertexBuffer = 20; } #if FRB_MDX v[0].Position.Z = v[1].Position.Z = v[2].Position.Z = v[3].Position.Z = v[4].Position.Z = v[5].Position.Z = camera.Z + 100; #else v[0].Position.Z = v[1].Position.Z = v[2].Position.Z = v[3].Position.Z = v[4].Position.Z = v[5].Position.Z = camera.Z - 100; #endif TextManager.mXForVertexBuffer = xPos; if (numOfChars != 0) { if (numOfChars == textToUse.Length) { TextManager.Draw(ref textToUse); } else { string asString = textToUse.Substring(0, numOfChars); TextManager.Draw(ref asString); } } } numDrawn++; } itemNum++; if (numDrawn > numToDraw - 1) { return; } if (mExpanded) { for (int i = 0; i < mItems.Count; i++) { mItems[i].Draw(camera, startY, startX, maxWidth, numDeep + 1, ref itemNum, ref numDrawn, startAt, numToDraw, distanceBetweenLines); if (numDrawn > numToDraw - 1) { return; } } } }
internal override void DrawSelfAndChildren(Camera camera) { #region Draw the base base.DrawSelfAndChildren(camera); #endregion #region Prepare variables for the loop float yToUse = mWorldUnitY; float xToUse; 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; StaticVertices[0].Color = StaticVertices[1].Color = StaticVertices[2].Color = StaticVertices[3].Color = StaticVertices[4].Color = StaticVertices[5].Color = mColor; #endregion foreach (Marker marker in markerArray) { if (marker.Value >= Start && marker.Value <= Start + ValueWidth) { #region If the marker is using the default texture, set the texture coordinates appropriately if (marker.Texture == null) { StaticVertices[0].TextureCoordinate.X = 0; StaticVertices[0].TextureCoordinate.Y = .875f; StaticVertices[1].TextureCoordinate.X = 0; StaticVertices[1].TextureCoordinate.Y = .876f; StaticVertices[2].TextureCoordinate.X = 0; StaticVertices[2].TextureCoordinate.Y = .875f; StaticVertices[5].TextureCoordinate.X = .001f; StaticVertices[5].TextureCoordinate.Y = .876f; } #endregion #region Else, the marker is using a custom texture, so add a texture switch and set the coordinates appropriately else { GuiManager.AddTextureSwitch(marker.Texture); StaticVertices[0].TextureCoordinate.X = 0; StaticVertices[0].TextureCoordinate.Y = 1; StaticVertices[1].TextureCoordinate.X = 0; StaticVertices[1].TextureCoordinate.Y = 0; StaticVertices[2].TextureCoordinate.X = 1; StaticVertices[2].TextureCoordinate.Y = 0; StaticVertices[5].TextureCoordinate.X = 1f; StaticVertices[5].TextureCoordinate.Y = 1; } #endregion xToUse = (float)GetPosOnBar(marker.Value); StaticVertices[0].Position.X = xToUse - marker.ScaleX; StaticVertices[0].Position.Y = yToUse - marker.ScaleY; StaticVertices[1].Position.X = xToUse - marker.ScaleX; StaticVertices[1].Position.Y = yToUse + marker.ScaleY; StaticVertices[2].Position.X = xToUse + marker.ScaleX; StaticVertices[2].Position.Y = yToUse + marker.ScaleY; StaticVertices[3] = StaticVertices[0]; StaticVertices[4] = StaticVertices[2]; StaticVertices[5].Position.X = xToUse + marker.ScaleX; StaticVertices[5].Position.Y = yToUse - marker.ScaleY; GuiManager.WriteVerts(StaticVertices); } } }