diff --git a/src/game/g_holmes.pas b/src/game/g_holmes.pas
index c4eba8b2ee4e718b58e16d8d78ab13c719ca11ee..96c1c01fe676b667b37f0c14d1746c08c211f448 100644 (file)
--- a/src/game/g_holmes.pas
+++ b/src/game/g_holmes.pas
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;
hlmContext.fillRect(cx, cy, monsGrid.tileSize, monsGrid.tileSize);
end;
+ procedure hilightBodyCells (proxyId: Integer);
+ var
+ it: CellCoordIter;
+ pcellxy: PGridCellCoord;
+ begin
+ //monsGrid.forEachBodyCell(mon.proxyId, hilightCell);
+ it := monsGrid.forEachBodyCell(proxyId);
+ for pcellxy in it do hilightCell(pcellxy^.x, pcellxy^.y);
+ it.release();
+ end;
+
procedure hilightCell1 (cx, cy: Integer);
begin
//e_WriteLog(Format('h1: (%d,%d)', [cx, cy]), MSG_NOTIFY);
hlmContext.fillRect(pan.X, pan.Y, pan.Width, pan.Height);
end;
- function monsCollector (mon: TMonster; tag: Integer): Boolean;
+ procedure monsCollector (mon: TMonster);
var
ex, ey: Integer;
mx, my, mw, mh: Integer;
begin
- result := false;
mon.getMapBox(mx, my, mw, mh);
hlmContext.color := TGxRGBA.Create(255, 255, 0, 160);
hlmContext.rect(mx, my, mw, mh);
mon.getMapBox(mx, my, mw, mh);
//mx += mw div 2;
- monsGrid.forEachBodyCell(mon.proxyId, hilightCell);
+ //monsGrid.forEachBodyCell(mon.proxyId, hilightCell);
+ hilightBodyCells(mon.proxyId);
if showMonsInfo then
begin
function highlightAllMonsterCells (mon: TMonster): Boolean;
begin
result := false; // don't stop
- monsGrid.forEachBodyCell(mon.proxyId, hilightCell);
+ //monsGrid.forEachBodyCell(mon.proxyId, hilightCell);
+ hilightBodyCells(mon.proxyId);
end;
procedure drawSelectedPlatformCells ();
if not showGrid then exit;
pan := g_Map_PanelByGUID(platMarkedGUID);
if (pan = nil) then exit;
- mapGrid.forEachBodyCell(pan.proxyId, hilightCell);
+ //mapGrid.forEachBodyCell(pan.proxyId, hilightCell);
+ hilightBodyCells(pan.proxyId);
hlmContext.color := TGxRGBA.Create(0, 200, 0, 200);
hlmContext.rect(pan.x, pan.y, pan.width, pan.height);
end;
var
mon: TMonster;
+ mit: PMonster;
+ it: TMonsterGrid.Iter;
mx, my, mw, mh: Integer;
//pan: TPanel;
//ex, ey: Integer;
if (showGrid) then drawTileGrid();
drawOutlines();
- if (laserSet) then g_Mons_AlongLine(laserX0, laserY0, laserX1, laserY1, monsCollector, true);
+ if (laserSet) then
+ begin
+ //g_Mons_AlongLine(laserX0, laserY0, laserX1, laserY1, monsCollector, true);
+ it := monsGrid.forEachAlongLine(laserX0, laserY0, laserX1, laserY1, -1, true);
+ for mit in it do monsCollector(mit^);
+ it.release();
+ end;
if (monMarkedUID <> -1) then
begin
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
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;
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 ();
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
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;