DEADSOFTWARE

holmes: added outline for map position
[d2df-sdl.git] / src / game / g_holmes.pas
index f4fe415cbf97a6f499b01b65e342e0ae1b12136e..34fac81284217c51e8303d09c2a0ffd89f2d9855 100644 (file)
@@ -48,8 +48,9 @@ var
 implementation
 
 uses
+  {$INCLUDE ../nogl/noGLuses.inc}
   {rttiobj,} typinfo, e_texture,
-  SysUtils, Classes, GL, SDL2,
+  SysUtils, Classes, SDL2,
   MAPDEF, g_main, g_options,
   utils, hashtable, xparser;
 
@@ -974,21 +975,13 @@ procedure plrDebugDraw ();
 
   procedure hilightBodyCells (proxyId: Integer);
   var
-    pmark: PoolMark;
-    hitcount: Integer;
+    it: CellCoordIter;
     pcellxy: PGridCellCoord;
   begin
     //monsGrid.forEachBodyCell(mon.proxyId, hilightCell);
-    pmark := framePool.mark();
-    hitcount := monsGrid.forEachBodyCell(proxyId);
-    pcellxy := PGridCellCoord(framePool.getPtr(pmark));
-    while (hitcount > 0) do
-    begin
-      hilightCell(pcellxy^.x, pcellxy^.y);
-      Inc(pcellxy);
-      Dec(hitcount);
-    end;
-    framePool.release(pmark);
+    it := monsGrid.forEachBodyCell(proxyId);
+    for pcellxy in it do hilightCell(pcellxy^.x, pcellxy^.y);
+    it.release();
   end;
 
   procedure hilightCell1 (cx, cy: Integer);
@@ -1252,12 +1245,13 @@ procedure plrDebugDraw ();
 
 var
   mon: TMonster;
+  mit: PMonster;
+  it: TMonsterGrid.Iter;
   mx, my, mw, mh: Integer;
   //pan: TPanel;
   //ex, ey: Integer;
-  pmark: PoolMark;
-  hitcount: Integer;
-  pmon: PMonster;
+  s: AnsiString;
+  dx, dy: Integer;
 begin
   if (gPlayer1 = nil) then exit;
 
@@ -1282,16 +1276,9 @@ begin
     if (laserSet) then
     begin
       //g_Mons_AlongLine(laserX0, laserY0, laserX1, laserY1, monsCollector, true);
-      pmark := framePool.mark();
-      hitcount := monsGrid.forEachAlongLine(laserX0, laserY0, laserX1, laserY1, -1, true);
-      pmon := PMonster(framePool.getPtr(pmark));
-      while (hitcount > 0) do
-      begin
-        monsCollector(pmon^);
-        Inc(pmon);
-        Dec(hitcount);
-      end;
-      framePool.release(pmark);
+      it := monsGrid.forEachAlongLine(laserX0, laserY0, laserX1, laserY1, -1, true);
+      for mit in it do monsCollector(mit^);
+      it.release();
     end;
 
     if (monMarkedUID <> -1) then
@@ -1339,10 +1326,19 @@ begin
 
   if showMapCurPos then
   begin
+    s := Format('mappos:(%d,%d)', [pmsCurMapX, pmsCurMapY]);
     gxSetContext(hlmContext);
     hlmContext.font := 'win8';
+    hlmContext.color := TGxRGBA.Create(0, 0, 0);
+    for dy := -1 to 1 do
+    begin
+      for dx := -1 to 1 do
+      begin
+        if (dx <> 0) or (dy <> 0) then hlmContext.drawText(4+dx, gWinSizeY-10+dy, s);
+      end;
+    end;
     hlmContext.color := TGxRGBA.Create(255, 255, 0);
-    hlmContext.drawText(4, gWinSizeY-10, Format('mappos:(%d,%d)', [pmsCurMapX, pmsCurMapY]));
+    hlmContext.drawText(4, gWinSizeY-10, s);
     gxSetContext(nil);
   end;
 end;
@@ -1562,9 +1558,8 @@ procedure cbAtcurSelectMonster ();
 var
   plr: TPlayer;
   x, y, w, h: Integer;
-  pmark: PoolMark;
-  hitcount: Integer;
-  pmon: PMonster;
+  mit: PMonster;
+  it: TMonsterGrid.Iter;
 begin
   monMarkedUID := -1;
   if (Length(gPlayers) > 0) then
@@ -1580,16 +1575,9 @@ begin
     end;
   end;
   //e_WriteLog('===========================', MSG_NOTIFY);
-  pmark := framePool.mark();
-  hitcount := monsGrid.forEachAtPoint(pmsCurMapX, pmsCurMapY);
-  pmon := PMonster(framePool.getPtr(pmark));
-  while (hitcount > 0) do
-  begin
-    monsAtDump(pmon^);
-    Inc(pmon);
-    Dec(hitcount);
-  end;
-  framePool.release(pmark);
+  it := monsGrid.forEachAtPoint(pmsCurMapX, pmsCurMapY);
+  for mit in it do monsAtDump(mit^);
+  it.release();
   //e_WriteLog('---------------------------', MSG_NOTIFY);
 end;
 
@@ -1600,25 +1588,17 @@ procedure cbAtcurDumpMonsters ();
     e_WriteLog(Format('monster #%d (UID:%u) (proxyid:%d)', [mon.arrIdx, mon.UID, mon.proxyId]), TMsgType.Notify);
   end;
 var
-  pmark: PoolMark;
-  hitcount: Integer;
-  pmon: PMonster;
+  mit: PMonster;
+  it: TMonsterGrid.Iter;
 begin
-  pmark := framePool.mark();
-  hitcount := monsGrid.forEachAtPoint(pmsCurMapX, pmsCurMapY);
-  if (hitcount > 0) then
+  it := monsGrid.forEachAtPoint(pmsCurMapX, pmsCurMapY);
+  if (it.length > 0) then
   begin
     e_WriteLog('===========================', TMsgType.Notify);
-    pmon := PMonster(framePool.getPtr(pmark));
-    while (hitcount > 0) do
-    begin
-      monsAtDump(pmon^);
-      Inc(pmon);
-      Dec(hitcount);
-    end;
+    for mit in it do monsAtDump(mit^);
     e_WriteLog('---------------------------', TMsgType.Notify);
   end;
-  framePool.release(pmark);
+  it.release();
 end;
 
 procedure cbAtcurDumpWalls ();
@@ -1633,26 +1613,18 @@ var
   hasTrigs: Boolean = false;
   f: Integer;
   trig: PTrigger;
-  pmark: PoolMark;
-  hitcount: Integer;
-  ppan: PPanel;
+  mwit: PPanel;
+  it: TPanelGrid.Iter;
 begin
   platMarkedGUID := -1;
-  pmark := framePool.mark();
-  hitcount := mapGrid.forEachAtPoint(pmsCurMapX, pmsCurMapY, (GridTagWall or GridTagDoor));
-  if (hitcount > 0) then
+  it := mapGrid.forEachAtPoint(pmsCurMapX, pmsCurMapY, (GridTagWall or GridTagDoor));
+  if (it.length > 0) then
   begin
     e_WriteLog('=== TOGGLE WALL ===', TMsgType.Notify);
-    ppan := PPanel(framePool.getPtr(pmark));
-    while (hitcount > 0) do
-    begin
-      wallToggle(ppan^);
-      Inc(ppan);
-      Dec(hitcount);
-    end;
+    for mwit in it do wallToggle(mwit^);
     e_WriteLog('--- toggle wall ---', TMsgType.Notify);
   end;
-  framePool.release(pmark);
+  it.release();
   if showTriggers then
   begin
     for f := 0 to High(gTriggers) do
@@ -1676,22 +1648,14 @@ procedure cbAtcurToggleWalls ();
     if pan.Enabled then g_Map_DisableWallGUID(pan.guid) else g_Map_EnableWallGUID(pan.guid);
   end;
 var
-  pmark: PoolMark;
-  hitcount: Integer;
-  ppan: PPanel;
+  mwit: PPanel;
+  it: TPanelGrid.Iter;
 begin
   //e_WriteLog('=== TOGGLE WALL ===', MSG_NOTIFY);
   //e_WriteLog('--- toggle wall ---', MSG_NOTIFY);
-  pmark := framePool.mark();
-  hitcount := mapGrid.forEachAtPoint(pmsCurMapX, pmsCurMapY, (GridTagWall or GridTagDoor));
-  ppan := PPanel(framePool.getPtr(pmark));
-  while (hitcount > 0) do
-  begin
-    wallToggle(ppan^);
-    Inc(ppan);
-    Dec(hitcount);
-  end;
-  framePool.release(pmark);
+  it := mapGrid.forEachAtPoint(pmsCurMapX, pmsCurMapY, (GridTagWall or GridTagDoor));
+  for mwit in it do wallToggle(mwit^);
+  it.release();
 end;