DEADSOFTWARE

gl: make hud fully usable on 640x400
[d2df-sdl.git] / src / game / renders / opengl / r_render.pas
index 18b14209101baf408fb40ff20c023eb0a0145220..202500d6170fbe92ddd1416d47811ce01e071656 100644 (file)
@@ -73,6 +73,12 @@ interface
   procedure r_Render_StepLoading (incval: Integer);
   procedure r_Render_DrawLoading (force: Boolean);
 
+  {$IFDEF ENABLE_HOLMES}
+    function pmsCurMapX (): Integer;
+    function pmsCurMapY (): Integer;
+    function r_Render_HolmesViewIsSet (): Boolean;
+  {$ENDIF}
+
 implementation
 
   uses
@@ -88,7 +94,7 @@ implementation
       g_system,
     {$ENDIF}
     {$IFDEF ENABLE_HOLMES}
-      g_holmes,
+      r_holmes,
     {$ENDIF}
     SysUtils, Classes, Math,
     g_basic,
@@ -280,12 +286,14 @@ implementation
   end;
 
   procedure r_Render_DrawHUDArea (x, y, w, h: Integer; p: TPlayer);
-    var s: AnsiString;
+    var s: AnsiString; oldy: Integer;
   begin
     r_Common_DrawTexture(hudbg, x, y, w, h, TBasePoint.BP_LEFTUP);
 
     if p <> nil then
     begin
+      oldy := y;
+      if h < 239 then y := y - 32; (* hack: hide nickname on 640x400 *)
       r_Render_DrawHUD(x + w - 196 + 2, y, p);
       if p.Spectator then
       begin
@@ -295,6 +303,7 @@ implementation
         if p.NoRespawn then
           r_Common_DrawText(_lc[I_PLAYER_SPECT1S], x + 4, y + 290, 255, 255, 255, 255, stdfont, TBasePoint.BP_LEFTUP);
       end;
+      y := oldy;
     end;
 
     if gShowPing and g_Game_IsClient then
@@ -386,7 +395,7 @@ implementation
   end;
 
   procedure r_Render_DrawView (x, y, w, h: Integer; p: TPlayer);
-    var l, t, r, b, xx, yy: Integer;
+    var l, t, r, b, xx, yy, cx, cy: Integer;
   begin
     r_Draw_GetRect(l, t, r, b);
     r_Draw_SetRect(x, y, x + w, y + h);
@@ -394,32 +403,32 @@ implementation
     r_Common_GetCameraPos(p, true, xx, yy);
     if p <> nil then
     begin
+      r_Map_Draw(x, y, w, h, xx, yy, p, cx, cy);
       {$IFDEF ENABLE_HOLMES}
         if p = gPlayer1 then
         begin
-          g_Holmes_plrViewPos(x, y);
-          g_Holmes_plrViewSize(w, h);
+          r_Holmes_plrViewPos(cx, cy);
+          r_Holmes_plrViewSize(h, w);
         end;
       {$ENDIF}
-      r_Map_Draw(x, y, w, h, xx, yy, p);
       r_Render_DrawStatsView(x, y, w, h, p);
       if p.Spectator and p.NoRespawn then
         r_Common_DrawText(_lc[I_PLAYER_SPECT4], x div 2 + w div 2, y div 2 + h div 2, 255, 255, 255, 255, stdfont, TBasePoint.BP_CENTER);
     end
     else
     begin
-      r_Map_Draw(x, y, w, h, xx, yy, nil);
+      r_Map_Draw(x, y, w, h, xx, yy, nil, cx, cy);
     end;
 
     r_Draw_SetRect(l, t, r, b);
   end;
 
   procedure r_Render_DrawMapView (x, y, w, h, camx, camy: Integer);
-    var l, t, r, b: Integer;
+    var l, t, r, b, cx, cy: Integer;
   begin
     r_Draw_GetRect(l, t, r, b);
     r_Draw_SetRect(x, y, x + w, y + h);
-    r_Map_Draw(x, y, w, h, camx, camy, nil);
+    r_Map_Draw(x, y, w, h, camx, camy, nil, cx, cy);
     r_Draw_SetRect(l, t, r, b);
   end;
 
@@ -1050,7 +1059,7 @@ implementation
       FPSTime := time;
     end;
 
-    r_Draw_Setup(gScreenWidth, gScreenHeight);
+    r_Draw_Setup(gWinSizeX, gWinSizeY, gScreenWidth, gScreenHeight);
 
     glClearColor(0.0, 0.0, 0.0, 0.0);
     glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
@@ -1118,8 +1127,7 @@ implementation
         r_Render_DrawMiniMap(0, 0, 160);
 
       {$IFDEF ENABLE_HOLMES}
-        if g_holmes_enabled then
-          g_Holmes_Draw;
+        r_Holmes_Draw;
       {$ENDIF}
 
       if MessageText <> '' then
@@ -1229,7 +1237,7 @@ implementation
     // TODO draw profilers
 
     {$IFDEF ENABLE_HOLMES}
-      g_Holmes_DrawUI;
+      r_Holmes_DrawUI;
     {$ENDIF}
 
     // TODO draw touch screen controls
@@ -1243,8 +1251,8 @@ implementation
     gWinSizeY := h;
     gRC_Width := w;
     gRC_Height := h;
-    gScreenWidth := w;
-    gScreenHeight := h;
+    gScreenWidth := Round(w / r_pixel_scale);
+    gScreenHeight := Round(h / r_pixel_scale);
   end;
 
   procedure r_Render_Apply;
@@ -1333,4 +1341,21 @@ implementation
     r_Common_DrawLoading(force);
   end;
 
+{$IFDEF ENABLE_HOLMES}
+  function pmsCurMapX (): Integer;
+  begin
+    result := r_holmes.pmsCurMapX();
+  end;
+
+  function pmsCurMapY (): Integer;
+  begin
+    result := r_holmes.pmsCurMapY();
+  end;
+
+  function r_Render_HolmesViewIsSet (): Boolean;
+  begin
+    result := vpSet;
+  end;
+{$ENDIF}
+
 end.