DEADSOFTWARE

more tree/grid debug commands
[d2df-sdl.git] / src / game / g_game.pas
index f966e26229eeac837a2e2536655b547d2a8a10f2..e69bde9bdc4ce3537c932b585560bb4daf7c1b2a 100644 (file)
@@ -312,6 +312,8 @@ var
 
   g_profile_frame_update: Boolean = false;
   g_profile_frame_draw: Boolean = false;
+  g_profile_collision: Boolean = false;
+  g_profile_history_size: Integer = 1000;
 
 procedure g_ResetDynlights ();
 procedure g_AddDynLight (x, y, radius: Integer; r, g, b, a: Single);
@@ -460,17 +462,27 @@ end;
 *)
 
 
-procedure drawProfiles (x, y: Integer; prof: TProfiler);
+function calcProfilesHeight (prof: TProfiler): Integer;
+begin
+  result := 0;
+  if (prof = nil) then exit;
+  if (length(prof.bars) = 0) then exit;
+  result := length(prof.bars)*(16+2);
+end;
+
+// returns width
+function drawProfiles (x, y: Integer; prof: TProfiler): Integer;
 var
   wdt, hgt: Integer;
   yy: Integer;
-  ii, idx: Integer;
+  ii: Integer;
 begin
+  result := 0;
   if (prof = nil) then exit;
   // gScreenWidth
   if (length(prof.bars) = 0) then exit;
   wdt := 192;
-  hgt := length(prof.bars)*(16+2);
+  hgt := calcProfilesHeight(prof);
   if (x < 0) then x := gScreenWidth-(wdt-1)+x;
   if (y < 0) then y := gScreenHeight-(hgt-1)+y;
   // background
@@ -483,6 +495,7 @@ begin
     e_TextureFontPrintEx(x+2+4*prof.bars[ii].level, yy, Format('%s: %d', [prof.bars[ii].name, prof.bars[ii].value]), gStdFont, 255, 255, 0, 1, false);
     Inc(yy, 16+2);
   end;
+  result := wdt;
 end;
 
 
@@ -2737,7 +2750,7 @@ begin
     Exit;
   end;
 
-  if (profileFrameDraw = nil) then profileFrameDraw := TProfiler.Create('MAP RENDER');
+  if (profileFrameDraw = nil) then profileFrameDraw := TProfiler.Create('MAP RENDER', g_profile_history_size);
   profileFrameDraw.mainBegin(g_profile_frame_draw);
 
   gPlayerDrawn := p;
@@ -2997,6 +3010,14 @@ begin
   p.DrawGUI();
 end;
 
+procedure drawProfilers ();
+var
+  px: Integer = -1;
+begin
+  if g_profile_frame_draw then px := px-drawProfiles(px, -1, profileFrameDraw);
+  if g_profile_collision then px := px-drawProfiles(px, -1, profMapCollision);
+end;
+
 procedure g_Game_Draw();
 var
   ID: DWORD;
@@ -3319,7 +3340,7 @@ begin
                      Format('%d:%.2d:%.2d', [gTime div 1000 div 3600, (gTime div 1000 div 60) mod 60, gTime div 1000 mod 60]),
                      gStdFont);
 
-  if g_profile_frame_draw then drawProfiles(-1, -1, profileFrameDraw); //drawProfiles(-1, -1, 'MAP RENDER');
+  drawProfilers();
 end;
 
 procedure g_Game_Quit();
@@ -4996,34 +5017,69 @@ var
 begin
   //if not gDebugMode then exit;
   cmd := LowerCase(P[0]);
-  if cmd = 'dpp' then
+
+  if cmd = 'pf_draw_frame' then
   begin
     g_profile_frame_draw := not g_profile_frame_draw;
     exit;
   end;
-  if cmd = 'dpu' then
+
+  if cmd = 'pf_update_frame' then
   begin
     g_profile_frame_update := not g_profile_frame_update;
     exit;
   end;
-  if cmd = 'r_draw_grid' then
+
+  if cmd = 'pf_coldet' then
+  begin
+    g_profile_collision := not g_profile_collision;
+    exit;
+  end;
+
+  if cmd = 'r_sq_draw' then
   begin
     case getBool(1) of
       -1: begin end;
        0: gdbg_map_use_grid_render := false;
        1: gdbg_map_use_grid_render := true;
     end;
-    if gdbg_map_use_grid_render then g_Console_Add('grid rendering: tan') else g_Console_Add('grid rendering: ona');
+    if gdbg_map_use_grid_render then g_Console_Add('accelerated rendering: tan') else g_Console_Add('accelerated rendering: ona');
     exit;
   end;
-  if cmd = 'dbg_coldet_grid' then
+
+  if cmd = 'dbg_sq_coldet' then
   begin
     case getBool(1) of
       -1: begin end;
        0: gdbg_map_use_grid_coldet := false;
        1: gdbg_map_use_grid_coldet := true;
     end;
-    if gdbg_map_use_grid_coldet then g_Console_Add('grid coldet: tan') else g_Console_Add('grid coldet: ona');
+    if gdbg_map_use_grid_coldet then g_Console_Add('accelerated coldet: tan') else g_Console_Add('accelerated coldet: ona');
+    exit;
+  end;
+
+  if (cmd = 'sq_use_grid') or (cmd = 'sq_use_tree') then
+  begin
+    gdbg_map_use_tree_coldet := (cmd = 'sq_use_tree');
+    if gdbg_map_use_tree_coldet then g_Console_Add('coldet acceleration: tree') else g_Console_Add('coldet acceleration: grid');
+    exit;
+  end;
+
+  if (cmd = 'r_sq_use_grid') or (cmd = 'r_sq_use_tree') then
+  begin
+    gdbg_map_use_tree_draw := (cmd = 'r_sq_use_tree');
+    if gdbg_map_use_tree_draw then g_Console_Add('render acceleration: tree') else g_Console_Add('render acceleration: grid');
+    exit;
+  end;
+
+  if (cmd = 't_dump_node_queries') then
+  begin
+    case getBool(1) of
+      -1: begin end;
+       0: gdbg_map_dump_coldet_tree_queries := false;
+       1: gdbg_map_dump_coldet_tree_queries := true;
+    end;
+    if gdbg_map_dump_coldet_tree_queries then g_Console_Add('grid coldet tree queries: tan') else g_Console_Add('grid coldet tree queries: ona');
     exit;
   end;
 end;
@@ -6853,6 +6909,9 @@ begin
   s := Find_Param_Value(pars, '--profile-frame');
   if (s <> '') then g_profile_frame_draw := true;
 
+  s := Find_Param_Value(pars, '--profile-coldet');
+  if (s <> '') then g_profile_collision := true;
+
 // Debug mode:
   s := Find_Param_Value(pars, '--debug');
   if (s <> '') then
@@ -6878,6 +6937,12 @@ begin
     Exit;
   end;
 
+  s := LowerCase(Find_Param_Value(pars, '-dbg-mainwad'));
+  if (s <> '') then
+  begin
+    gDefaultMegawadStart := s;
+  end;
+
 // Start map when game loads:
   map := LowerCase(Find_Param_Value(pars, '-map'));
   if isWadPath(map) then