X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fgame%2Fg_textures.pas;h=6f239e4df78266d2ca749f9588727224a1004b7f;hb=2ecb174fde318b06ec0e7dbb3cc9e66d1543e2a0;hp=af3b29ff8e464f1fe8467a2b804ea384bd8d0ba5;hpb=ff152ddb08bd84058c4162fcee523a2864a26368;p=d2df-sdl.git diff --git a/src/game/g_textures.pas b/src/game/g_textures.pas index af3b29f..6f239e4 100644 --- a/src/game/g_textures.pas +++ b/src/game/g_textures.pas @@ -19,7 +19,9 @@ unit g_textures; interface uses - e_graphics, MAPDEF, BinEditor, ImagingTypes, Imaging, ImagingUtility; + SysUtils, Classes, + mempool, + e_graphics, MAPDEF, ImagingTypes, Imaging, ImagingUtility; Type TLevelTexture = record @@ -35,7 +37,7 @@ Type TLevelTextureArray = Array of TLevelTexture; - TAnimation = class(TObject) + TAnimation = class(TPoolObject) private ID: DWORD; FAlpha: Byte; @@ -62,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; @@ -114,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 @@ -184,7 +186,7 @@ begin end else begin - e_WriteLog(Format('Error loading texture %s', [Resource]), MSG_WARNING); + e_WriteLog(Format('Error loading texture %s', [Resource]), TMsgType.Warning); //e_WriteLog(Format('WAD Reader error: %s', [WAD.GetLastErrorStr]), MSG_WARNING); end; WAD.Free(); @@ -195,7 +197,7 @@ begin Result := True; if not e_CreateTexture(FileName, ID) then begin - e_WriteLog(Format('Error loading texture %s', [FileName]), MSG_WARNING); + e_WriteLog(Format('Error loading texture %s', [FileName]), TMsgType.Warning); Result := False; end; end; @@ -232,7 +234,7 @@ begin begin if showmsg then begin - e_WriteLog(Format('Error loading texture %s', [Resource]), MSG_WARNING); + e_WriteLog(Format('Error loading texture %s', [Resource]), TMsgType.Warning); end; //e_WriteLog(Format('WAD Reader error: %s', [WAD.GetLastErrorStr]), MSG_WARNING); result := false; @@ -263,7 +265,7 @@ begin e_GetTextureSize(TexturesArray[find_id].ID, @TexturesArray[find_id].Width, @TexturesArray[find_id].Height); end - else e_WriteLog(Format('Error loading texture %s', [FileName]), MSG_WARNING); + else e_WriteLog(Format('Error loading texture %s', [FileName]), TMsgType.Warning); end; function g_Texture_Get(TextureName: ShortString; var ID: DWORD): Boolean; @@ -487,7 +489,7 @@ begin if not WAD.GetResource(g_ExtractFilePathName(Resource), TextureData, ResourceLength) then begin WAD.Free(); - e_WriteLog(Format('Error loading texture %s', [Resource]), MSG_WARNING); + e_WriteLog(Format('Error loading texture %s', [Resource]), TMsgType.Warning); //e_WriteLog(Format('WAD Reader error: %s', [WAD.GetLastErrorStr]), MSG_WARNING); Exit; end; @@ -683,15 +685,15 @@ procedure DumpTextureNames(); var i: Integer; begin - e_WriteLog('BEGIN Textures:', MSG_NOTIFY); + e_WriteLog('BEGIN Textures:', TMsgType.Notify); for i := 0 to High(TexturesArray) do - e_WriteLog(' '+IntToStr(i)+'. '+TexturesArray[i].Name, MSG_NOTIFY); - e_WriteLog('END Textures.', MSG_NOTIFY); + e_WriteLog(' '+IntToStr(i)+'. '+TexturesArray[i].Name, TMsgType.Notify); + e_WriteLog('END Textures.', TMsgType.Notify); - e_WriteLog('BEGIN Frames:', MSG_NOTIFY); + e_WriteLog('BEGIN Frames:', TMsgType.Notify); for i := 0 to High(FramesArray) do - e_WriteLog(' '+IntToStr(i)+'. '+FramesArray[i].Name, MSG_NOTIFY); - e_WriteLog('END Frames.', MSG_NOTIFY); + e_WriteLog(' '+IntToStr(i)+'. '+FramesArray[i].Name, TMsgType.Notify); + e_WriteLog('END Frames.', TMsgType.Notify); end; { TAnimation } @@ -820,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;