Exemple #1
0
        public override void Render(DXGui gui)
        {
            bool sel = gui.sel == nro_item ? true : false;
            Color clr = Color.FromArgb(Math.Min(gui.alpha, c_fondo.A), c_fondo);
            switch (borde)
            {
                case frameBorder.sin_borde:
                    // dibujo solo interior
                    gui.DrawRect(rc.X, rc.Y, rc.X + rc.Width, rc.Y + rc.Height, 1, clr, true);
                    break;

                case frameBorder.redondeado:
                    // Interior
                    gui.RoundRect(rc.X, rc.Y, rc.X + rc.Width, rc.Y + rc.Height, 30, 6, clr, true);
                    // Contorno
                    gui.RoundRect(rc.X, rc.Y, rc.X + rc.Width, rc.Y + rc.Height, 30, 6, Color.FromArgb(gui.alpha, DXGui.c_frame_border));
                    break;

                case frameBorder.solapa:
                    {
                        float r = 40;
                        TGCVector2[] pt = new TGCVector2[10];
                        pt[0].X = rc.X;
                        pt[0].Y = rc.Y + rc.Height;
                        pt[1].X = rc.X;
                        pt[1].Y = rc.Y;
                        pt[2].X = rc.X + rc.Width - r;
                        pt[2].Y = rc.Y;
                        pt[3].X = rc.X + rc.Width;
                        pt[3].Y = rc.Y + r;
                        pt[4].X = rc.X + rc.Width;
                        pt[4].Y = rc.Y + rc.Height;
                        pt[5].X = rc.X;
                        pt[5].Y = rc.Y + rc.Height;
                        pt[6] = pt[0];

                        gui.DrawSolidPoly(pt, 7, clr, false);
                        gui.DrawPoly(pt, 5, 6, DXGui.c_frame_border);
                    }

                    break;

                case frameBorder.rectangular:
                default:

                    // interior
                    gui.DrawRect(rc.X, rc.Y, rc.X + rc.Width, rc.Y + rc.Height, 1, Color.FromArgb(gui.alpha, c_fondo), true);
                    // contorno
                    gui.DrawRect(rc.X, rc.Y, rc.X + rc.Width, rc.Y + rc.Height, 6, Color.FromArgb(gui.alpha, DXGui.c_frame_border));
                    break;
            }

            // Texto del frame
            Rectangle rc2 = new Rectangle(rc.X, rc.Y, rc.X + rc.Width, rc.Y + rc.Height);
            rc2.Y += 30;
            rc2.X += 30;
            Color color = sel ? c_selected : c_font;
            gui.font.DrawText(gui.sprite, text, rc2, DrawTextFormat.NoClip | DrawTextFormat.Top, Color.FromArgb(gui.alpha, color));
        }
Exemple #2
0
        public override void Render(DXGui gui)
        {
            bool sel = gui.sel == nro_item ? true : false;

            float rx = rc.Width / 2;
            float ry = rc.Height / 2;
            float x0 = rc.Left + rx;
            float y0 = rc.Top + ry;

            if (sel || marcado)
            {
                rx += 12;
                ry += 12;
                x0 -= 6;
                y0 -= 6;
            }

            TGCVector2[] Q = new TGCVector2[7];
            for (int i = 0; i < 6; ++i)
            {
                Q[i].X = (float)(x0 + rx * Math.Cos(2 * Math.PI / 6 * i));
                Q[i].Y = (float)(y0 + ry * Math.Sin(2 * Math.PI / 6 * i));
            }
            Q[6] = Q[0];

            gui.DrawSolidPoly(Q, 7, c_fondo, false);

            if (sel)
            {
                // boton seleccionado: lleno el interior
                gui.DrawPoly(Q, 7, 4, DXGui.c_buttom_selected);
            }
            else
            if (marcado)
            {
                gui.DrawPoly(Q, 7, 3, Color.FromArgb(240, 245, 245));
            }
            else
            {
                gui.DrawPoly(Q, 7, 1, Color.FromArgb(120, 120, 64));
            }
        }
Exemple #3
0
        // custom draw del menu item
        public override void Render(DXGui gui)
        {
            bool sel = gui.sel == nro_item ? true : false;

            float rx = rc.Height / 2;
            float ry = rc.Height / 2;
            float x0 = rc.Left + rx;
            float y0 = rc.Top + ry;

            if (sel)
            {
                rx += 12;
                ry += 12;
                x0 -= 6;
                y0 -= 6;
            }

            Vector2[] p = new Vector2[20];
            p[0].X = rc.Left + 50;
            p[0].Y = rc.Bottom - 15;
            p[1].X = rc.Left + 50;
            p[1].Y = rc.Top + 15;
            p[2].X = rc.Right;
            p[2].Y = rc.Top + 15;
            p[3].X = rc.Right;
            p[3].Y = rc.Bottom - 15;
            p[4].X = rc.Left + 50;
            p[4].Y = rc.Bottom - 15;
            p[5]   = p[0];

            if (sel)
            {
                gui.DrawGradientPoly(p, 6, Color.White, Color.FromArgb(35, 56, 68));
            }
            else
            {
                gui.DrawSolidPoly(p, 6, Color.FromArgb(42, 71, 90), false);
                gui.DrawPoly(p, 6, 1, Color.FromArgb(50, 75, 240));
            }


            Vector2[] Q = new Vector2[7];
            for (int i = 0; i < 6; ++i)
            {
                Q[i].X = (float)(x0 + rx * Math.Cos(2 * Math.PI / 6 * i));
                Q[i].Y = (float)(y0 + ry * Math.Sin(2 * Math.PI / 6 * i));
            }
            Q[6] = Q[0];

            gui.DrawSolidPoly(Q, 7, c_fondo, false);

            if (sel)
            {
                // boton seleccionado: lleno el interior
                gui.DrawPoly(Q, 7, 4, DXGui.c_buttom_selected);
            }
            else
            {
                gui.DrawPoly(Q, 7, 2, Color.FromArgb(61, 96, 100));
            }


            if (textura != null)
            {
                gui.sprite.Draw(textura, Rectangle.Empty, Vector3.Empty,
                                new Vector3(x0 - image_width / 2, y0 - image_height / 2, 0),
                                Color.FromArgb(gui.alpha, 255, 255, 255));
            }

            // Texto del boton
            Rectangle rc2 = new Rectangle(rc.Left + 90, rc.Top + 3, rc.Width, rc.Height - 3);

            font.DrawText(gui.sprite, text, rc2, DrawTextFormat.VerticalCenter | DrawTextFormat.Left,
                          sel ? Color.Black : Color.WhiteSmoke);
        }
Exemple #4
0
        public override void Render(DXGui gui)
        {
            bool sel = gui.sel == nro_item ? true : false;

            float M_PI = (float)Math.PI;

            TGCVector2[] pt = new TGCVector2[255];
            float        da = M_PI / 8;
            float        alfa;

            float x0 = rc.Left;
            float x1 = rc.Right;
            float y0 = rc.Top;
            float y1 = rc.Bottom;
            float r  = 10;
            int   t  = 0;
            float x  = x0;
            float y  = y0;

            for (alfa = 0; alfa < M_PI / 2; alfa += da)
            {
                pt[t].X = (float)(x - r * Math.Cos(alfa));
                pt[t].Y = (float)(y - r * Math.Sin(alfa));
                ++t;
            }
            pt[t].X = x;
            pt[t].Y = y - r;
            ++t;

            pt[t].X = (x1 + x0) / 2;
            pt[t].Y = y - r;
            ++t;
            pt[t].X = (x1 + x0) / 2 + 50;
            pt[t].Y = y + 20 - r;
            ++t;

            x = x1;
            y = y0 + 20;
            for (alfa = M_PI / 2; alfa < M_PI; alfa += da)
            {
                pt[t].X = (float)(x - r * Math.Cos(alfa));
                pt[t].Y = (float)(y - r * Math.Sin(alfa));
                ++t;
            }
            pt[t].X = x + r;
            pt[t].Y = y;
            ++t;

            x = x1;
            y = y1;
            for (alfa = 0; alfa < M_PI / 2; alfa += da)
            {
                pt[t].X = (float)(x + r * Math.Cos(alfa));
                pt[t].Y = (float)(y + r * Math.Sin(alfa));
                ++t;
            }
            pt[t].X = x;
            pt[t].Y = y + r;
            ++t;

            pt[t].X = x0 + 150;
            pt[t].Y = y + r;

            ++t;
            pt[t].X = x0 + 100;
            pt[t].Y = y - 20 + r;
            ++t;

            x = x0;
            y = y - 20;
            for (alfa = M_PI / 2; alfa < M_PI; alfa += da)
            {
                pt[t].X = (float)(x + r * Math.Cos(alfa));
                pt[t].Y = (float)(y + r * Math.Sin(alfa));
                ++t;
            }
            pt[t++] = pt[0];

            // interior
            gui.DrawSolidPoly(pt, t, c_fondo);

            // contorno
            gui.DrawPoly(pt, t, 6, DXGui.c_frame_border);

            // Texto del frame
            Rectangle rc2 = new Rectangle(rc.Top, rc.Left, rc.Width, rc.Height);

            rc2.Y += 25;
            rc2.X += 30;
            Color color = sel ? c_selected : c_font;

            gui.font.DrawText(gui.sprite, text, rc2, DrawTextFormat.NoClip | DrawTextFormat.Top, color);
        }
Exemple #5
0
        public override void Render(DXGui gui)
        {
            Device d3dDevice    = GuiController.Instance.D3dDevice;
            float  W            = (float)GuiController.Instance.Panel3d.Width;
            float  H            = (float)GuiController.Instance.Panel3d.Height;
            float  aspect_ratio = W / H;
            float  vel          = 5f;     // milimetros x pixel
            float  vel_an       = 0.001f; // radioanes x pixel
            int    dm           = 150;
            float  xm           = gui.kinect.right_hand.position.X;
            float  ym           = gui.kinect.right_hand.position.Y;
            float  zm           = gui.kinect.right_hand.position.Z;

            // Verifico si esta en modo navegacion
            // Para ello la mano izquierda tiene que estar abajo a la derecha
            bool  navegar = false;
            float xmi     = gui.kinect.left_hand.position.X;
            float ymi     = gui.kinect.left_hand.position.Y;

            if (xmi > W / 2 && ymi > H / 2)
            {
                // modo navegacion
                navegar = true;
                //vel = 20f + (0.5f + ymi / H) * 200.0f;
            }


            // si la pos. del mouse esta en el area de interaccion de navegacion
            if (navegar && ant_xm != float.MaxValue)
            {
                // actualizo la posicion de la camara desde el input de la kinect
                if (modo_pan)
                {
                    // modo pan ORTOGONAL
                    Vector3 dp    = new Vector3(xm - ant_xm, 0, ym - ant_ym) * vel;
                    Vector3 LFcam = GuiController.Instance.FpsCamera.getPosition();
                    Vector3 LAcam = GuiController.Instance.FpsCamera.getLookAt();
                    gui.camera.setCamera(LFcam + dp, LAcam + dp);
                }
                else
                {
                    // modo rotar camara y move hacia adelate / atras
                    Vector3 viewDir = gui.camera.getLookAt() - gui.camera.getPosition();
                    float   an      = (xm - ant_xm) * vel_an;
                    viewDir.TransformNormal(Matrix.RotationY(an));
                    Vector3 newPos = GuiController.Instance.FpsCamera.getPosition() +
                                     viewDir * (ant_ym - ym) * vel;
                    gui.camera.setCamera(newPos, newPos + viewDir);
                }
            }

            gui.camera.updateCamera();
            ant_xm = xm;
            ant_ym = ym;
            ant_zm = zm;

            float   fov = (float)Math.PI / 4.0f * aspect_ratio;
            Vector3 LA  = gui.camera.getLookAt();
            Vector3 LF  = gui.camera.getPosition();

            Vector2 lf = new Vector2(LF.X, LF.Z);
            Vector2 la = new Vector2(LA.X, LA.Z);

            // Dibujo un rectangulo que representa toda la cocina
            gui.DrawRect(rc.Left, rc.Top, (int)(rc.X + wdx * ex), (int)(rc.Y + wdz * ey), 4, Color.FromArgb(gui.alpha, 32, 140, 55));
            // Dibujo el look from
            gui.DrawDisc(new Vector2(rc.X + (lf.X - min_x) * ex, rc.Y + (wdz - lf.Y + min_z) * ey), 10, Color.FromArgb(0, 0, 0));


            Vector2[] pt     = new Vector2[100];
            int       cant_p = 1;

            pt[0].X = rc.X + (lf.X - min_x) * ex;
            pt[0].Y = rc.Y + (wdz - lf.Y + min_z) * ey;
            for (int i = 0; i < 50; ++i)
            {
                Matrix  rot = Matrix.RotationY(-fov / 2.0f + (float)i / 50.0f * fov);
                Vector3 A   = LA - LF;
                A.TransformNormal(rot);
                Vector2 a = new Vector2(A.X, A.Z);
                a.Normalize();
                a            = a * 3000 + lf;
                pt[cant_p].X = rc.X + (a.X - min_x) * ex;
                pt[cant_p].Y = rc.Y + (wdz - a.Y + min_z) * ey;
                ++cant_p;
            }
            pt[cant_p++] = pt[0];
            gui.DrawSolidPoly(pt, cant_p, Color.FromArgb(100, 100, 255, 100));
        }
Exemple #6
0
        public void renderHUD()
        {
            Device d3dDevice = D3DDevice.Instance.Device;

            d3dDevice.RenderState.ZBufferEnable = false;
            int W = D3DDevice.Instance.Width;
            int H = D3DDevice.Instance.Height;

            // Elapsed time
            int   an    = (int)(time * 10) % 360;
            float hasta = an / 180.0f * (float)Math.PI;

            gui.DrawArc(new TGCVector2(40, H - 100), 25, 0, hasta, 8, Color.Yellow);
            gui.TextOut(20, H - 140, "Elapsed Time:" + Math.Round(time), Color.LightSteelBlue);

            // dibujo los enemigos
            TGCVector3 pos_personaje = Camera.Position;
            TGCVector3 dir_view      = Camera.LookAt - pos_personaje;
            TGCVector2 dir_v         = new TGCVector2(dir_view.X, dir_view.Z);

            dir_v.Normalize();
            TGCVector2 dir_w = new TGCVector2(dir_v.Y, -dir_v.X);

            int   dx = 1000;
            int   dy = 1000;
            int   dW = 200;
            int   dH = 200;
            float ex = dW / (float)dx;
            float ey = dH / (float)dy;
            int   ox = 10 + dW / 2;
            int   oy = 10 + dH / 2;

            for (int t = 0; t < cant_enemigos; ++t)
            {
                TGCVector3 pos = enemigos[t].Position - pos_personaje;
                TGCVector2 p   = new TGCVector2(pos.X, pos.Z);
                float      x   = TGCVector2.Dot(dir_w, p);
                float      y   = TGCVector2.Dot(dir_v, p);
                int        xm  = (int)(ox + x * ex);
                int        ym  = (int)(oy + y * ey);

                if (Math.Abs(xm - ox) < dW / 2 - 10 && Math.Abs(ym - oy) < dH / 2 - 10)
                {
                    gui.DrawRect(xm - 2, ym - 2, xm + 2, ym + 2, 1, Color.WhiteSmoke);
                }
            }

            TGCVector2[] P = new TGCVector2[20];
            P[0] = new TGCVector2(ox - 5, oy + 5);
            P[1] = new TGCVector2(ox + 5, oy + 5);
            P[2] = new TGCVector2(ox, oy - 10);
            P[3] = P[0];
            gui.DrawSolidPoly(P, 4, Color.Tomato, false);
            gui.DrawCircle(new TGCVector2(ox, oy), 14, 3, Color.Yellow);

            foreach (TgcBoundingAxisAlignBox room in rooms)
            {
                TGCVector2[] Q  = new TGCVector2[4];
                TGCVector2[] Qp = new TGCVector2[5];

                float xm = 0;
                float ym = 0;
                Q[0] = new TGCVector2(room.PMin.X - pos_personaje.X, room.PMin.Z - pos_personaje.Z);
                Q[1] = new TGCVector2(room.PMin.X - pos_personaje.X, room.PMax.Z - pos_personaje.Z);
                Q[2] = new TGCVector2(room.PMax.X - pos_personaje.X, room.PMax.Z - pos_personaje.Z);
                Q[3] = new TGCVector2(room.PMax.X - pos_personaje.X, room.PMin.Z - pos_personaje.Z);
                for (int t = 0; t < 4; ++t)
                {
                    float x = TGCVector2.Dot(dir_w, Q[t]);
                    float y = TGCVector2.Dot(dir_v, Q[t]);
                    Qp[t] = new TGCVector2(ox + x * ex, oy + y * ey);
                    xm   += x * ex;
                    ym   += y * ey;
                }
                Qp[4] = Qp[0];
                xm   /= 4;
                ym   /= 4;

                if (Math.Abs(xm) < dW / 2 - 10 && Math.Abs(ym) < dH / 2 - 10)
                {
                    gui.DrawPoly(Qp, 5, 1, Color.Tomato);
                }
            }

            // posicion X,Z
            float kx = pos_personaje.X * ex;

            P[0] = new TGCVector2(10, H - 10);
            P[1] = new TGCVector2(15, H - 30);
            P[2] = new TGCVector2(5 + kx, H - 30);
            P[3] = new TGCVector2(25 + kx, H - 10);
            P[4] = P[0];
            gui.DrawSolidPoly(P, 5, Color.Tomato);
            gui.DrawPoly(P, 5, 2, Color.HotPink);

            float kz = pos_personaje.Z * ey;

            P[0] = new TGCVector2(10, H - 40);
            P[1] = new TGCVector2(15, H - 60);
            P[2] = new TGCVector2(5 + kz, H - 60);
            P[3] = new TGCVector2(25 + kz, H - 40);
            P[4] = P[0];
            gui.DrawSolidPoly(P, 5, Color.Green);
            gui.DrawPoly(P, 5, 2, Color.YellowGreen);

            d3dDevice.RenderState.ZBufferEnable = true;
            gui.Render();
        }