X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_map.pas;h=227835321cad0e6916b103de085d75eb0bafef5f;hb=ae58c60b09a12df74e69717546235c3e5bf3c992;hp=b1174c8595ef86a1dafd7b550994b894906e0e06;hpb=17560801e4b1071897d5e87c1fac53443b209596;p=d2df-sdl.git diff --git a/src/game/g_map.pas b/src/game/g_map.pas index b1174c8..2278353 100644 --- a/src/game/g_map.pas +++ b/src/game/g_map.pas @@ -22,7 +22,7 @@ interface uses SysUtils, Classes, e_graphics, g_basic, MAPDEF, g_textures, - g_phys, wadreader, g_panel, g_grid, md5, binheap, xprofiler, xparser, xdynrec; + g_phys, utils, g_panel, g_grid, md5, binheap, xprofiler, xparser, xdynrec; type TMapInfo = record @@ -59,7 +59,7 @@ type function g_Map_Load(Res: String): Boolean; function g_Map_GetMapInfo(Res: String): TMapInfo; -function g_Map_GetMapsList(WADName: String): SArray; +function g_Map_GetMapsList(WADName: String): SSArray; function g_Map_Exist(Res: String): Boolean; procedure g_Map_Free(freeTextures: Boolean=true); procedure g_Map_Update(); @@ -202,6 +202,14 @@ const GridDrawableMask = (GridTagBack or GridTagStep or GridTagWall or GridTagDoor or GridTagAcid1 or GridTagAcid2 or GridTagWater or GridTagFore); +type + TBinHeapPanelDrawCmp = class + public + class function less (const a, b: TPanel): Boolean; inline; + end; + + TBinHeapPanelDraw = specialize TBinaryHeapBase; + var gWalls: TPanelArray; gRenderBackgrounds: TPanelArray; @@ -224,7 +232,7 @@ var gdbg_map_use_accel_render: Boolean = true; gdbg_map_use_accel_coldet: Boolean = true; profMapCollision: TProfiler = nil; //WARNING: FOR DEBUGGING ONLY! - gDrawPanelList: TBinaryHeapObj = nil; // binary heap of all walls we have to render, populated by `g_Map_CollectDrawPanels()` + gDrawPanelList: TBinHeapPanelDraw = nil; // binary heap of all walls we have to render, populated by `g_Map_CollectDrawPanels()` gCurrentMap: TDynRecord = nil; gCurrentMapFileName: AnsiString = ''; // so we can skip texture reloading @@ -247,7 +255,7 @@ uses GL, GLExt, g_weapons, g_game, g_sound, e_sound, CONFIG, g_options, g_triggers, g_player, Math, g_monsters, g_saveload, g_language, g_netmsg, - utils, sfs, xstreams, hashtable, + sfs, xstreams, hashtable, wadreader, ImagingTypes, Imaging, ImagingUtility, ImagingGif, ImagingNetworkGraphics; @@ -506,20 +514,16 @@ begin end; -function dplLess (a, b: TObject): Boolean; -var - pa, pb: TPanel; +class function TBinHeapPanelDrawCmp.less (const a, b: TPanel): Boolean; inline; begin - pa := TPanel(a); - pb := TPanel(b); - if (pa.tag < pb.tag) then begin result := true; exit; end; - if (pa.tag > pb.tag) then begin result := false; exit; end; - result := (pa.arrIdx < pb.arrIdx); + if (a.tag < b.tag) then begin result := true; exit; end; + if (a.tag > b.tag) then begin result := false; exit; end; + result := (a.arrIdx < b.arrIdx); end; procedure dplClear (); begin - if (gDrawPanelList = nil) then gDrawPanelList := TBinaryHeapObj.Create(@dplLess) else gDrawPanelList.clear(); + if (gDrawPanelList = nil) then gDrawPanelList := TBinHeapPanelDraw.Create() else gDrawPanelList.clear(); end; @@ -869,7 +873,7 @@ end; function CreateNullTexture(RecName: String): Integer; begin RecName := toLowerCase1251(RecName); - if (TextNameHash = nil) then TextNameHash := hashNewStrInt(); + if (TextNameHash = nil) then TextNameHash := THashStrInt.Create(); if TextNameHash.get(RecName, result) then exit; // i found her! SetLength(Textures, Length(Textures)+1); @@ -896,7 +900,7 @@ var a, ResLength: Integer; begin RecName := toLowerCase1251(RecName); - if (TextNameHash = nil) then TextNameHash := hashNewStrInt(); + if (TextNameHash = nil) then TextNameHash := THashStrInt.Create(); if TextNameHash.get(RecName, result) then begin // i found her! @@ -984,7 +988,7 @@ begin else // Íåò òàêîãî ðåóñðñà â WAD'å begin //e_WriteLog(Format('SHIT! Error loading texture %s : %s', [RecName, g_ExtractFilePathName(RecName)]), MSG_WARNING); - if (BadTextNameHash = nil) then BadTextNameHash := hashNewStrInt(); + if (BadTextNameHash = nil) then BadTextNameHash := THashStrInt.Create(); if log and (not BadTextNameHash.get(RecName, a)) then begin e_WriteLog(Format('Error loading texture %s', [RecName]), TMsgType.Warning); @@ -1014,7 +1018,7 @@ var f, c, frdelay, frloop: Integer; begin RecName := toLowerCase1251(RecName); - if (TextNameHash = nil) then TextNameHash := hashNewStrInt(); + if (TextNameHash = nil) then TextNameHash := THashStrInt.Create(); if TextNameHash.get(RecName, result) then begin // i found her! @@ -1026,7 +1030,7 @@ begin //e_LogWritefln('*** Loading animated texture "%s"', [RecName]); - if (BadTextNameHash = nil) then BadTextNameHash := hashNewStrInt(); + if (BadTextNameHash = nil) then BadTextNameHash := THashStrInt.Create(); if BadTextNameHash.get(RecName, f) then begin //e_WriteLog(Format('no animation texture %s (don''t worry)', [RecName]), MSG_NOTIFY); @@ -1044,7 +1048,7 @@ begin if not WAD.GetResource(g_ExtractFilePathName(RecName), TextureWAD, ResLength, log) then begin - if (BadTextNameHash = nil) then BadTextNameHash := hashNewStrInt(); + if (BadTextNameHash = nil) then BadTextNameHash := THashStrInt.Create(); if log and (not BadTextNameHash.get(RecName, f)) then begin e_WriteLog(Format('Error loading animation texture %s', [RecName]), TMsgType.Warning); @@ -1138,7 +1142,7 @@ begin end else begin - if (BadTextNameHash = nil) then BadTextNameHash := hashNewStrInt(); + if (BadTextNameHash = nil) then BadTextNameHash := THashStrInt.Create(); if log and (not BadTextNameHash.get(RecName, f)) then begin e_WriteLog(Format('Error loading animation texture %s', [RecName]), TMsgType.Warning); @@ -1230,7 +1234,7 @@ begin end else begin - if (BadTextNameHash = nil) then BadTextNameHash := hashNewStrInt(); + if (BadTextNameHash = nil) then BadTextNameHash := THashStrInt.Create(); if log and (not BadTextNameHash.get(RecName, f)) then begin e_WriteLog(Format('Error loading animation texture "%s" images', [RecName]), TMsgType.Warning); @@ -1749,7 +1753,7 @@ begin g_Game_SetLoadingText(_lc[I_LOAD_TEXTURES], mapTextureList.count-1, False); // find used textures - usedTextures := hashNewStrInt(); + usedTextures := THashStrInt.Create(); try if (panels <> nil) and (panels.count > 0) then begin @@ -2290,11 +2294,11 @@ begin mapReader.Free(); end; -function g_Map_GetMapsList(WADName: string): SArray; +function g_Map_GetMapsList(WADName: string): SSArray; var WAD: TWADFile; a: Integer; - ResList: SArray; + ResList: SSArray; begin Result := nil; WAD := TWADFile.Create(); @@ -2319,7 +2323,7 @@ function g_Map_Exist(Res: string): Boolean; var WAD: TWADFile; FileName, mnn: string; - ResList: SArray; + ResList: SSArray; a: Integer; begin Result := False;