X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_holmes.pas;h=a2a55ad87bb0664ec651338a1b396a0994b7b77d;hb=08e3dd168587e3c1f65cc9b2b93d917c7617c0ce;hp=f4fe415cbf97a6f499b01b65e342e0ae1b12136e;hpb=ad4f5ec68b851b9b2dba627e3b199b93f529dc86;p=d2df-sdl.git diff --git a/src/game/g_holmes.pas b/src/game/g_holmes.pas index f4fe415..a2a55ad 100644 --- a/src/game/g_holmes.pas +++ b/src/game/g_holmes.pas @@ -2,8 +2,7 @@ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * the Free Software Foundation, version 3 of the License ONLY. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -48,8 +47,9 @@ var implementation uses - {rttiobj,} typinfo, e_texture, - SysUtils, Classes, GL, SDL2, + {$INCLUDE ../nogl/noGLuses.inc} + {rttiobj,} typinfo, e_texture, e_res, + SysUtils, Classes, SDL2, MAPDEF, g_main, g_options, utils, hashtable, xparser; @@ -974,21 +974,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 +1244,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 +1275,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 +1325,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 +1557,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 +1574,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 +1587,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 +1612,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 +1647,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; @@ -1777,7 +1740,7 @@ begin // load bindings from file try - st := openDiskFileRO(GameDir+'holmes.rc'); + st := e_OpenResourceRO(ConfigDirs, 'holmes.rc'); pr := TFileTextParser.Create(st); conwriteln('parsing "holmes.rc"...'); while (pr.tokType <> pr.TTEOF) do