DEADSOFTWARE

game: remove unneded render imports
[d2df-sdl.git] / src / game / g_textures.pas
index d12a9a24e4ba74789cfbe74fbaa0713e4b0c376f..8190ea3df814d0b7300d2a6f85fe579681497825 100644 (file)
@@ -20,22 +20,19 @@ interface
 uses
   SysUtils, Classes,
   {$IFDEF USE_MEMPOOL}mempool,{$ENDIF}
-  g_base, r_graphics, MAPDEF, ImagingTypes, Imaging, ImagingUtility;
+  g_base, MAPDEF;
 
 type
   TLevelTexture = record
-    textureName: AnsiString;
-    width, height: Word;
-    case anim: Boolean of
-      false: (textureID: LongWord);
-      true: (framesID: LongWord; framesCount: Byte; speed: Byte);
+    TextureName: AnsiString; // as stored in wad
+    FullName: AnsiString; // full path to texture // !!! merge it with TextureName
+    framesCount, speed: Byte;
   end;
 
   TLevelTextureArray = array of TLevelTexture;
 
-  TAnimation = class{$IFDEF USE_MEMPOOL}(TPoolObject){$ENDIF}
+  TAnimationState = class{$IFDEF USE_MEMPOOL}(TPoolObject){$ENDIF}
   private
-    mId: LongWord;
     mAlpha: Byte;
     mBlending: Boolean;
     mCounter: Byte; // Ñ÷åò÷èê îæèäàíèÿ ìåæäó êàäðàìè
@@ -44,13 +41,13 @@ type
     mLoop: Boolean; // Ïåðåõîäèòü íà ïåðâûé êàäð ïîñëå ïîñëåäíåãî?
     mEnabled: Boolean; // Ðàáîòà ðàçðåøåíà?
     mPlayed: Boolean; // Ïðîèãðàíà âñÿ õîòÿ áû ðàç?
-    mHeight: Word;
-    mWidth: Word;
     mMinLength: Byte; // Îæèäàíèå ïîñëå ïðîèãðûâàíèÿ
     mRevert: Boolean; // Ñìåíà êàäðîâ îáðàòíàÿ?
 
+    mLength: Integer;
+
   public
-    constructor Create (aframesID: LongWord; aloop: Boolean; aspeed: Byte);
+    constructor Create (aloop: Boolean; aspeed: Byte; len: Integer);
     destructor  Destroy (); override;
 
     procedure reset ();
@@ -76,48 +73,35 @@ type
     property counter: Byte read mCounter;
     property blending: Boolean read mBlending write mBlending;
     property alpha: Byte read mAlpha write mAlpha;
-    property framesId: LongWord read mId;
-    property width: Word read mWidth;
-    property height: Word read mHeight;
-
-    property id: LongWord read mId;
+    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 TAnimation.Create (aframesID: LongWord; aloop: Boolean; aspeed: Byte);
+constructor TAnimationState.Create (aloop: Boolean; aspeed: Byte; len: Integer);
 begin
-  if (aframesID >= Length(framesArray)) then
-  begin
-    //raise Exception.Create('trying to create inexisting frame: something is very wrong here');
-    e_LogWritefln('trying to create inexisting frame %u of %u: something is very wrong here', [aframesID, LongWord(Length(framesArray))], TMsgType.Warning);
-    aframesID := 0;
-    if (Length(framesArray) = 0) then raise Exception.Create('trying to create inexisting frame: something is very wrong here');
-  end;
-  mId := aframesID;
+  assert(len >= 0);
+  mLength := len;
+
   mMinLength := 0;
   mLoop := aloop;
   mSpeed := aspeed;
   mEnabled := true;
   mCurrentFrame := 0;
-  mPlayed := false;
   mAlpha := 0;
-  mWidth := framesArray[mId].FrameWidth;
-  mHeight := framesArray[mId].FrameHeight;
+  mPlayed := false;
 end;
 
-
-destructor TAnimation.Destroy ();
+destructor TAnimationState.Destroy;
 begin
   inherited;
 end;
 
-
-procedure TAnimation.update ();
+procedure TAnimationState.update;
 begin
   if (not mEnabled) then exit;
 
@@ -132,7 +116,7 @@ begin
       // Äîøëè äî êîíöà àíèìàöèè. Âîçìîæíî, æäåì åùå
       if (mCurrentFrame = 0) then
       begin
-        if (Length(framesArray[mId].TexturesID)*mSpeed+mCounter < mMinLength) then exit;
+        if (mLength * mSpeed + mCounter < mMinLength) then exit;
       end;
 
       mCurrentFrame -= 1;
@@ -141,7 +125,10 @@ begin
       // Ïîâòîðÿòü ëè àíèìàöèþ ïî êðóãó?
       if mPlayed then
       begin
-        if mLoop then mCurrentFrame := High(framesArray[mId].TexturesID) else mCurrentFrame += 1;
+        if mLoop then
+          mCurrentFrame := mLength - 1
+        else
+          mCurrentFrame += 1
       end;
 
       mCounter := 0;
@@ -150,13 +137,13 @@ begin
     begin
       // Ïðÿìîé ïîðÿäîê êàäðîâ
       // Äîøëè äî êîíöà àíèìàöèè. Âîçìîæíî, æäåì åùå
-      if (mCurrentFrame = High(framesArray[mId].TexturesID)) then
+      if (mCurrentFrame = mLength - 1) then
       begin
-        if (Length(framesArray[mId].TexturesID)*mSpeed+mCounter < mMinLength) then exit;
+        if (mLength * mSpeed + mCounter < mMinLength) then exit;
       end;
 
       mCurrentFrame += 1;
-      mPlayed := (mCurrentFrame > High(framesArray[mId].TexturesID));
+      mPlayed := (mCurrentFrame > mLength - 1);
 
       // Ïîâòîðÿòü ëè àíèìàöèþ ïî êðóãó?
       if mPlayed then
@@ -169,30 +156,38 @@ begin
   end;
 end;
 
-
-procedure TAnimation.reset ();
+procedure TAnimationState.reset;
 begin
-  if mRevert then mCurrentFrame := High(framesArray[mId].TexturesID) else mCurrentFrame := 0;
+  if mRevert then
+    mCurrentFrame := mLength - 1
+  else
+    mCurrentFrame := 0;
   mCounter := 0;
-  mPlayed := false;
+  mPlayed := false
 end;
 
+procedure TAnimationState.disable;
+begin
+  mEnabled := false
+end;
 
-procedure TAnimation.disable (); begin mEnabled := false; end;
-procedure TAnimation.enable (); begin mEnabled := true; end;
-
-
-function TAnimation.totalFrames (): Integer; inline; begin result := Length(framesArray[mId].TexturesID); end;
-
+procedure TAnimationState.enable;
+begin
+  mEnabled := true
+end;
 
-procedure TAnimation.revert (r: Boolean);
+procedure TAnimationState.revert (r: Boolean);
 begin
   mRevert := r;
-  reset();
+  reset
 end;
 
+function TAnimationState.totalFrames (): Integer; inline;
+begin
+  result := mLength
+end;
 
-procedure TAnimation.saveState (st: TStream);
+procedure TAnimationState.saveState (st: TStream);
 begin
   if (st = nil) then exit;
 
@@ -221,7 +216,7 @@ begin
 end;
 
 
-procedure TAnimation.loadState (st: TStream);
+procedure TAnimationState.loadState (st: TStream);
 begin
   if (st = nil) then exit;