Exemplo n.º 1
0
        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
        }
Exemplo n.º 2
0
        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;
                    }
                }
            }
        }
Exemplo n.º 3
0
        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);
                }
            }
        }