DEADSOFTWARE

bye-bye, bineditor, we won't miss you
[d2df-sdl.git] / src / game / g_textures.pas
index f18695861cd8007a217f07983c312d10c93af076..07ef3be06bfddebd2f592181cef2132b1352cd50 100644 (file)
@@ -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;