X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_saveload.pas;h=e6a1ca293344ca1b603ff026a4fbc514c0ee7f54;hb=fb2545cc618f2ffe256ab3bc0173b063382c8887;hp=aaf01b5efd86bcac97a56a56f64787127644bc6d;hpb=7722f998fcc4984ad63c84975955eddc4ba7a2a9;p=d2df-sdl.git diff --git a/src/game/g_saveload.pas b/src/game/g_saveload.pas index aaf01b5..e6a1ca2 100644 --- a/src/game/g_saveload.pas +++ b/src/game/g_saveload.pas @@ -27,6 +27,16 @@ function g_LoadGame(n: Integer): Boolean; procedure Obj_SaveState(o: PObj; var Mem: TBinMemoryWriter); procedure Obj_LoadState(o: PObj; var Mem: TBinMemoryReader); +type + TLoadSaveHook = procedure (); + +procedure g_SetPreLoadHook (ahook: TLoadSaveHook); +procedure g_SetPostLoadHook (ahook: TLoadSaveHook); + +procedure g_CallPreLoadHooks (); +procedure g_CallPostLoadHooks (); + + implementation uses @@ -42,6 +52,44 @@ const PLAYER_VIEW_SIGNATURE = $57564C50; // 'PLVW' OBJ_SIGNATURE = $4A424F5F; // '_OBJ' + +var + preloadHooks: array of TLoadSaveHook = nil; + postloadHooks: array of TLoadSaveHook = nil; + + +procedure g_SetPreLoadHook (ahook: TLoadSaveHook); +begin + if not assigned(ahook) then exit; + SetLength(preloadHooks, Length(preloadHooks)+1); + preloadHooks[High(preloadHooks)] := ahook; +end; + + +procedure g_SetPostLoadHook (ahook: TLoadSaveHook); +begin + if not assigned(ahook) then exit; + SetLength(postloadHooks, Length(postloadHooks)+1); + postloadHooks[High(postloadHooks)] := ahook; +end; + + +procedure g_CallPreLoadHooks (); +var + f: Integer; +begin + for f := 0 to High(preloadHooks) do preloadHooks[f](); +end; + + +procedure g_CallPostLoadHooks (); +var + f: Integer; +begin + for f := 0 to High(postloadHooks) do postloadHooks[f](); +end; + + procedure Obj_SaveState(o: PObj; var Mem: TBinMemoryWriter); var sig: DWORD; @@ -359,6 +407,8 @@ begin g_Game_SetLoadingText(_lc[I_LOAD_SAVE_FILE], 0, False); gLoadGameMode := True; + g_CallPreLoadHooks(); + ///// Çàãðóæàåì ñîñòîÿíèå èãðû: ///// bMem := TBinMemoryReader.Create(); bFile.ReadMemory(bMem); @@ -571,6 +621,7 @@ begin // Çàêðûâàåì ôàéë çàãðóçêè: bFile.Close(); gLoadGameMode := False; + g_CallPostLoadHooks(); Result := True; except