X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;ds=inline;f=src%2Fgame%2Fg_textures.pas;h=07ef3be06bfddebd2f592181cef2132b1352cd50;hb=94a927ca673a2d8af4b8449d434f3c70f38b11c1;hp=f18695861cd8007a217f07983c312d10c93af076;hpb=31d174a428ef1235e1708b0738804b47e006cf5c;p=d2df-sdl.git diff --git a/src/game/g_textures.pas b/src/game/g_textures.pas index f186958..07ef3be 100644 --- a/src/game/g_textures.pas +++ b/src/game/g_textures.pas @@ -19,8 +19,9 @@ unit g_textures; interface uses + SysUtils, Classes, mempool, - e_graphics, MAPDEF, BinEditor, ImagingTypes, Imaging, ImagingUtility; + e_graphics, MAPDEF, ImagingTypes, Imaging, ImagingUtility; Type TLevelTexture = record @@ -63,8 +64,8 @@ Type procedure Enable(); procedure Disable(); procedure Revert(r: Boolean); - procedure SaveState(Var Mem: TBinMemoryWriter); - procedure LoadState(Var Mem: TBinMemoryReader); + procedure SaveState(st: TStream); + procedure LoadState(st: TStream); function TotalFrames(): Integer; property Played: Boolean read FPlayed; @@ -115,8 +116,8 @@ function g_Texture_Light(): Integer; implementation uses - g_game, e_log, g_basic, SysUtils, g_console, wadreader, - g_language, GL; + g_game, e_log, g_basic, g_console, wadreader, + g_language, GL, utils, xstreams; type _TTexture = record @@ -821,71 +822,60 @@ begin Reset(); end; -procedure TAnimation.SaveState(Var Mem: TBinMemoryWriter); -var - sig: DWORD; -begin - if Mem = nil then - Exit; - -// Ñèãíàòóðà àíèìàöèè: - sig := ANIM_SIGNATURE; // 'ANIM' - Mem.WriteDWORD(sig); -// Ñ÷åò÷èê îæèäàíèÿ ìåæäó êàäðàìè: - Mem.WriteByte(FCounter); -// Òåêóùèé êàäð: - Mem.WriteInt(FCurrentFrame); -// Ïðîèãðàíà ëè àíèìàöèÿ öåëèêîì: - Mem.WriteBoolean(FPlayed); -// Alpha-êàíàë âñåé òåêñòóðû: - Mem.WriteByte(FAlpha); -// Ðàçìûòèå òåêñòóðû: - Mem.WriteBoolean(FBlending); -// Âðåìÿ îæèäàíèÿ ìåæäó êàäðàìè: - Mem.WriteByte(FSpeed); -// Çàöèêëåíà ëè àíèìàöèÿ: - Mem.WriteBoolean(FLoop); -// Âêëþ÷åíà ëè: - Mem.WriteBoolean(FEnabled); -// Îæèäàíèå ïîñëå ïðîèãðûâàíèÿ: - Mem.WriteByte(FMinLength); -// Îáðàòíûé ëè ïîðÿäîê êàäðîâ: - Mem.WriteBoolean(FRevert); -end; - -procedure TAnimation.LoadState(Var Mem: TBinMemoryReader); -var - sig: DWORD; -begin - if Mem = nil then - Exit; - -// Ñèãíàòóðà àíèìàöèè: - Mem.ReadDWORD(sig); - if sig <> ANIM_SIGNATURE then // 'ANIM' - begin - raise EBinSizeError.Create('TAnimation.LoadState: Wrong Animation Signature'); - end; -// Ñ÷åò÷èê îæèäàíèÿ ìåæäó êàäðàìè: - Mem.ReadByte(FCounter); -// Òåêóùèé êàäð: - Mem.ReadInt(FCurrentFrame); -// Ïðîèãðàíà ëè àíèìàöèÿ öåëèêîì: - Mem.ReadBoolean(FPlayed); -// Alpha-êàíàë âñåé òåêñòóðû: - Mem.ReadByte(FAlpha); -// Ðàçìûòèå òåêñòóðû: - Mem.ReadBoolean(FBlending); -// Âðåìÿ îæèäàíèÿ ìåæäó êàäðàìè: - Mem.ReadByte(FSpeed); -// Çàöèêëåíà ëè àíèìàöèÿ: - Mem.ReadBoolean(FLoop); -// Âêëþ÷åíà ëè: - Mem.ReadBoolean(FEnabled); -// Îæèäàíèå ïîñëå ïðîèãðûâàíèÿ: - Mem.ReadByte(FMinLength); -// Îáðàòíûé ëè ïîðÿäîê êàäðîâ: - Mem.ReadBoolean(FRevert); +procedure TAnimation.SaveState (st: TStream); +begin + if (st = nil) then exit; + + utils.writeSign(st, 'ANIM'); + utils.writeInt(st, Byte(0)); // version + // Ñ÷åò÷èê îæèäàíèÿ ìåæäó êàäðàìè + utils.writeInt(st, Byte(FCounter)); + // Òåêóùèé êàäð + utils.writeInt(st, LongInt(FCurrentFrame)); + // Ïðîèãðàíà ëè àíèìàöèÿ öåëèêîì + utils.writeBool(st, FPlayed); + // Alpha-êàíàë âñåé òåêñòóðû + utils.writeInt(st, Byte(FAlpha)); + // Ðàçìûòèå òåêñòóðû + utils.writeInt(st, Byte(FBlending)); + // Âðåìÿ îæèäàíèÿ ìåæäó êàäðàìè + utils.writeInt(st, Byte(FSpeed)); + // Çàöèêëåíà ëè àíèìàöèÿ + utils.writeBool(st, FLoop); + // Âêëþ÷åíà ëè + utils.writeBool(st, FEnabled); + // Îæèäàíèå ïîñëå ïðîèãðûâàíèÿ + utils.writeInt(st, Byte(FMinLength)); + // Îáðàòíûé ëè ïîðÿäîê êàäðîâ + utils.writeBool(st, FRevert); +end; + +procedure TAnimation.LoadState (st: TStream); +begin + if (st = nil) then exit; + + if not utils.checkSign(st, 'ANIM') then raise XStreamError.Create('animation chunk expected'); + if (utils.readByte(st) <> 0) then raise XStreamError.Create('invalid animation chunk version'); + // Ñ÷åò÷èê îæèäàíèÿ ìåæäó êàäðàìè + FCounter := utils.readByte(st); + // Òåêóùèé êàäð + FCurrentFrame := utils.readLongInt(st); + // Ïðîèãðàíà ëè àíèìàöèÿ öåëèêîì + FPlayed := utils.readBool(st); + // Alpha-êàíàë âñåé òåêñòóðû + FAlpha := utils.readByte(st); + // Ðàçìûòèå òåêñòóðû + FBlending := utils.readBool(st); + // Âðåìÿ îæèäàíèÿ ìåæäó êàäðàìè + FSpeed := utils.readByte(st); + // Çàöèêëåíà ëè àíèìàöèÿ + FLoop := utils.readBool(st); + // Âêëþ÷åíà ëè + FEnabled := utils.readBool(st); + // Îæèäàíèå ïîñëå ïðîèãðûâàíèÿ + FMinLength := utils.readByte(st); + // Îáðàòíûé ëè ïîðÿäîê êàäðîâ + FRevert := utils.readBool(st); end;