X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_holmes.pas;h=96c1c01fe676b667b37f0c14d1746c08c211f448;hb=92c7868df227201d6914f9f07c9a29ba0e2863cb;hp=f4fe415cbf97a6f499b01b65e342e0ae1b12136e;hpb=ad4f5ec68b851b9b2dba627e3b199b93f529dc86;p=d2df-sdl.git diff --git a/src/game/g_holmes.pas b/src/game/g_holmes.pas index f4fe415..96c1c01 100644 --- a/src/game/g_holmes.pas +++ b/src/game/g_holmes.pas @@ -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,11 @@ 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; begin if (gPlayer1 = nil) then exit; @@ -1282,16 +1274,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 @@ -1562,9 +1547,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 +1564,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 +1577,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 +1602,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 +1637,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;