diff --git a/src/game/g_map.pas b/src/game/g_map.pas
index 2c2a6b5c1a18c16e16c35cd2f4210eb79c5b6662..d93f0aa8aec41cda0d3b6dc3d3ad5a7253e59ec9 100644 (file)
--- a/src/game/g_map.pas
+++ b/src/game/g_map.pas
TForEachPanelCB = function (pan: TPanel): Boolean; // return `true` to stop
function g_Map_HasAnyPanelAtPoint (x, y: Integer; panelType: Word): Boolean;
+function g_Map_PanelAtPoint (x, y: Integer; tagmask: Integer=-1): TPanel;
// trace liquid, stepping by `dx` and `dy`
// return last seen liquid coords, and `false` if we're started outside of the liquid
-function g_Map_TraceLiquid (x, y, dx, dy: Integer; out topx, topy: Integer): Boolean;
+function g_Map_TraceLiquidNonPrecise (x, y, dx, dy: Integer; out topx, topy: Integer): Boolean;
procedure g_Map_ProfilersBegin ();
TPanelGrid = specialize TBodyGridBase<TPanel>;
var
- mapGrid: TPanelGrid = nil;
+ mapGrid: TPanelGrid = nil; // DO NOT USE! public for debugging only!
implementation
end;
+function g_Map_PanelAtPoint (x, y: Integer; tagmask: Integer=-1): TPanel;
+begin
+ result := nil;
+ if (tagmask = 0) then exit;
+ result := mapGrid.forEachAtPoint(x, y, nil, tagmask);
+end;
+
+
function g_Map_IsSpecialTexture(Texture: String): Boolean;
begin
Result := (Texture = TEXTURE_NAME_WATER) or
calcBoundingBox(gLifts);
calcBoundingBox(gBlockMon);
- e_WriteLog(Format('map dimensions: (%d,%d)-(%d,%d); editor size:(0,0)-(%d,%d)', [mapX0, mapY0, mapX1, mapY1, gMapInfo.Width, gMapInfo.Height]), MSG_WARNING);
+ e_LogWritefln('map dimensions: (%d,%d)-(%d,%d); editor size:(0,0)-(%d,%d)', [mapX0, mapY0, mapX1, mapY1, gMapInfo.Width, gMapInfo.Height]);
if (mapX0 > 0) then mapX0 := 0;
if (mapY0 > 0) then mapY0 := 0;
if (mapY1 < gMapInfo.Height-1) then mapY1 := gMapInfo.Height-1;
mapGrid := TPanelGrid.Create(mapX0-128, mapY0-128, mapX1-mapX0+1+128*2, mapY1-mapY0+1+128*2);
+ //mapGrid := TPanelGrid.Create(0, 0, gMapInfo.Width, gMapInfo.Height);
addPanelsToGrid(gWalls);
addPanelsToGrid(gRenderBackgrounds);
PAMem.LoadFromMemory(Mem);
for i := 0 to Length(panels)-1 do
+ begin
if panels[i].SaveIt then
begin
// ID ïàíåëè:
end;
// Çàãðóæàåì ïàíåëü:
panels[i].LoadState(PAMem);
+ panels[i].arrIdx := i;
end;
+ end;
// Ýòîò ñïèñîê ïàíåëåé çàãðóæåí:
PAMem.Free();
// Îáíîâëÿåì êàðòó ñòîëêíîâåíèé è ñåòêó:
g_GFX_Init();
- mapCreateGrid();
+ //mapCreateGrid();
///// Çàãðóæàåì ìóçûêó: /////
// Ñèãíàòóðà ìóçûêè:
// trace liquid, stepping by `dx` and `dy`
// return last seen liquid coords, and `false` if we're started outside of the liquid
-function g_Map_TraceLiquid (x, y, dx, dy: Integer; out topx, topy: Integer): Boolean;
+function g_Map_TraceLiquidNonPrecise (x, y, dx, dy: Integer; out topx, topy: Integer): Boolean;
const
MaskLiquid = GridTagWater or GridTagAcid1 or GridTagAcid2;
begin