DEADSOFTWARE

gl: rotate shots
[d2df-sdl.git] / src / game / g_textures.pas
index ae951fc94258fd3f930fa18e2355a4c7a08155fd..8a215c0e157c2e5ca995b23b81a3ab5c4cb9a05c 100644 (file)
@@ -20,7 +20,7 @@ interface
 uses
   SysUtils, Classes,
   {$IFDEF USE_MEMPOOL}mempool,{$ENDIF}
-  g_base, r_graphics, MAPDEF, ImagingTypes, Imaging, ImagingUtility;
+  g_base, MAPDEF;
 
 type
   TLevelTexture = record
@@ -31,10 +31,8 @@ type
 
   TLevelTextureArray = array of TLevelTexture;
 
-  TAnimationState = class{$IFDEF USE_MEMPOOL}(TPoolObject){$ENDIF}
+  TAnimState = record
   private
-    mAlpha: Byte;
-    mBlending: Boolean;
     mCounter: Byte; // Ñ÷åò÷èê îæèäàíèÿ ìåæäó êàäðàìè
     mSpeed: Byte; // Âðåìÿ îæèäàíèÿ ìåæäó êàäðàìè
     mCurrentFrame: Integer; // Òåêóùèé êàäð (íà÷èíàÿ ñ 0)
@@ -48,7 +46,7 @@ type
 
   public
     constructor Create (aloop: Boolean; aspeed: Byte; len: Integer);
-    destructor  Destroy (); override;
+    procedure Invalidate;
 
     procedure reset ();
     procedure update ();
@@ -56,10 +54,12 @@ type
     procedure disable ();
     procedure revert (r: Boolean);
 
-    procedure saveState (st: TStream);
-    procedure loadState (st: TStream);
+    procedure saveState (st: TStream; mAlpha: Byte; mBlending: Boolean);
+    procedure loadState (st: TStream; out mAlpha: Byte; out mBlending: Boolean);
 
     function totalFrames (): Integer; inline;
+    function IsInvalid (): Boolean;
+    function IsValid (): Boolean;
 
   public
     property played: Boolean read mPlayed;
@@ -71,19 +71,19 @@ type
     property currentFrame: Integer read mCurrentFrame write mCurrentFrame;
     property currentCounter: Byte read mCounter write mCounter;
     property counter: Byte read mCounter;
-    property blending: Boolean read mBlending write mBlending;
-    property alpha: Byte read mAlpha write mAlpha;
     property length: Integer read mLength;
   end;
 
 implementation
 
 uses
-  g_game, e_log, g_basic, g_console, wadreader, r_animations,
+  g_game, e_log, g_basic, g_console, wadreader,
   g_language, utils, xstreams;
 
-constructor TAnimationState.Create (aloop: Boolean; aspeed: Byte; len: Integer);
+constructor TAnimState.Create (aloop: Boolean; aspeed: Byte; len: Integer);
 begin
+  Self := Default(TAnimState);
+
   assert(len >= 0);
   mLength := len;
 
@@ -92,16 +92,15 @@ begin
   mSpeed := aspeed;
   mEnabled := true;
   mCurrentFrame := 0;
-  mAlpha := 0;
   mPlayed := false;
 end;
 
-destructor TAnimationState.Destroy;
+procedure TAnimState.Invalidate;
 begin
-  inherited;
+  Self := Default(TAnimState);
 end;
 
-procedure TAnimationState.update;
+procedure TAnimState.update;
 begin
   if (not mEnabled) then exit;
 
@@ -109,11 +108,8 @@ begin
 
   if (mCounter >= mSpeed) then
   begin
-    // Îæèäàíèå ìåæäó êàäðàìè çàêîí÷èëîñü
-    // Îáðàòíûé ïîðÿäîê êàäðîâ?
     if mRevert then
     begin
-      // Äîøëè äî êîíöà àíèìàöèè. Âîçìîæíî, æäåì åùå
       if (mCurrentFrame = 0) then
       begin
         if (mLength * mSpeed + mCounter < mMinLength) then exit;
@@ -122,7 +118,6 @@ begin
       mCurrentFrame -= 1;
       mPlayed := (mCurrentFrame < 0);
 
-      // Ïîâòîðÿòü ëè àíèìàöèþ ïî êðóãó?
       if mPlayed then
       begin
         if mLoop then
@@ -135,8 +130,6 @@ begin
     end
     else
     begin
-      // Ïðÿìîé ïîðÿäîê êàäðîâ
-      // Äîøëè äî êîíöà àíèìàöèè. Âîçìîæíî, æäåì åùå
       if (mCurrentFrame = mLength - 1) then
       begin
         if (mLength * mSpeed + mCounter < mMinLength) then exit;
@@ -145,7 +138,6 @@ begin
       mCurrentFrame += 1;
       mPlayed := (mCurrentFrame > mLength - 1);
 
-      // Ïîâòîðÿòü ëè àíèìàöèþ ïî êðóãó?
       if mPlayed then
       begin
         if mLoop then mCurrentFrame := 0 else mCurrentFrame -= 1;
@@ -156,7 +148,7 @@ begin
   end;
 end;
 
-procedure TAnimationState.reset;
+procedure TAnimState.reset;
 begin
   if mRevert then
     mCurrentFrame := mLength - 1
@@ -166,82 +158,73 @@ begin
   mPlayed := false
 end;
 
-procedure TAnimationState.disable;
+procedure TAnimState.disable;
 begin
   mEnabled := false
 end;
 
-procedure TAnimationState.enable;
+procedure TAnimState.enable;
 begin
   mEnabled := true
 end;
 
-procedure TAnimationState.revert (r: Boolean);
+procedure TAnimState.revert (r: Boolean);
 begin
   mRevert := r;
   reset
 end;
 
-function TAnimationState.totalFrames (): Integer; inline;
+function TAnimState.totalFrames (): Integer; inline;
 begin
   result := mLength
 end;
 
-procedure TAnimationState.saveState (st: TStream);
+function TAnimState.IsInvalid (): Boolean;
+begin
+  result := mLength <= 0
+end;
+
+function TAnimState.IsValid (): Boolean;
+begin
+  result := mLength > 0
+end;
+
+procedure TAnimState.saveState (st: TStream; mAlpha: Byte; mBlending: Boolean);
 begin
   if (st = nil) then exit;
 
   utils.writeSign(st, 'ANIM');
   utils.writeInt(st, Byte(0)); // version
-  // Ñ÷åò÷èê îæèäàíèÿ ìåæäó êàäðàìè
   utils.writeInt(st, Byte(mCounter));
-  // Òåêóùèé êàäð
   utils.writeInt(st, LongInt(mCurrentFrame));
-  // Ïðîèãðàíà ëè àíèìàöèÿ öåëèêîì
   utils.writeBool(st, mPlayed);
-  // Alpha-êàíàë âñåé òåêñòóðû
   utils.writeInt(st, Byte(mAlpha));
-  // Ðàçìûòèå òåêñòóðû
   utils.writeInt(st, Byte(mBlending));
-  // Âðåìÿ îæèäàíèÿ ìåæäó êàäðàìè
   utils.writeInt(st, Byte(mSpeed));
-  // Çàöèêëåíà ëè àíèìàöèÿ
   utils.writeBool(st, mLoop);
-  // Âêëþ÷åíà ëè
   utils.writeBool(st, mEnabled);
-  // Îæèäàíèå ïîñëå ïðîèãðûâàíèÿ
   utils.writeInt(st, Byte(mMinLength));
-  // Îáðàòíûé ëè ïîðÿäîê êàäðîâ
   utils.writeBool(st, mRevert);
 end;
 
 
-procedure TAnimationState.loadState (st: TStream);
+procedure TAnimState.loadState (st: TStream; out mAlpha: Byte; out mBlending: Boolean);
 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');
-  // Ñ÷åò÷èê îæèäàíèÿ ìåæäó êàäðàìè
   mCounter := utils.readByte(st);
-  // Òåêóùèé êàäð
   mCurrentFrame := utils.readLongInt(st);
-  // Ïðîèãðàíà ëè àíèìàöèÿ öåëèêîì
   mPlayed := utils.readBool(st);
-  // Alpha-êàíàë âñåé òåêñòóðû
   mAlpha := utils.readByte(st);
-  // Ðàçìûòèå òåêñòóðû
   mBlending := utils.readBool(st);
-  // Âðåìÿ îæèäàíèÿ ìåæäó êàäðàìè
   mSpeed := utils.readByte(st);
-  // Çàöèêëåíà ëè àíèìàöèÿ
   mLoop := utils.readBool(st);
-  // Âêëþ÷åíà ëè
   mEnabled := utils.readBool(st);
-  // Îæèäàíèå ïîñëå ïðîèãðûâàíèÿ
   mMinLength := utils.readByte(st);
-  // Îáðàòíûé ëè ïîðÿäîê êàäðîâ
   mRevert := utils.readBool(st);
 end;
 
+
 end.