示例#1
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();
        }