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