DEADSOFTWARE

gl: draw stats on player view
[d2df-sdl.git] / src / game / g_playermodel.pas
index c2c7d4eb8557e2aadf0a8eee1c032b245baabcdd..7a55bf758b8b9744c5a7883c43fbcb0659d23351 100644 (file)
@@ -18,7 +18,7 @@ unit g_playermodel;
 
 interface
 
-  uses MAPDEF, g_textures, g_base, g_basic, g_weapons, utils;
+  uses MAPDEF, g_animations, g_base, g_basic, g_weapons, utils;
 
 const
   A_STAND      = 0;
@@ -56,17 +56,17 @@ const
   W_POS_NORMAL = 0;
   W_POS_UP     = 1;
   W_POS_DOWN   = 2;
+  W_POS_LAST   = W_POS_DOWN;
 
   W_ACT_NORMAL = 0;
   W_ACT_FIRE   = 1;
+  W_ACT_LAST   = W_ACT_FIRE;
 
   FLAG_BASEPOINT: TDFPoint = (X:16; Y:43);
 
 type
   TWeaponPoints = Array [WP_FIRST + 1..WP_LAST, A_STAND..A_LAST, TDirection.D_LEFT..TDirection.D_RIGHT] of Array of TDFPoint;
 
-  TModelMatrix = Array [TDirection.D_LEFT..TDirection.D_RIGHT, A_STAND..A_LAST] of TAnimationState;
-
   TModelTextures = Array [TDirection.D_LEFT..TDirection.D_RIGHT, A_STAND..A_LAST] of record
     Resource: String;
     Mask:     String;
@@ -92,7 +92,7 @@ type
     FDirection:        TDirection;
     FColor:            TRGB;
     FCurrentAnimation: Byte;
-    FAnimState:        TAnimationState;
+    FAnimState:        TAnimState;
     FCurrentWeapon:    Byte;
     FFlag:             Byte;
     FFireCounter:      Byte;
@@ -122,7 +122,7 @@ type
 
   public
     property    Color: TRGB read FColor write FColor;
-    property    AnimState: TAnimationState read FAnimState;
+    property    AnimState: TAnimState read FAnimState;
     property    CurrentAnimation: Byte read FCurrentAnimation;
     property    CurrentWeapon: Byte read FCurrentWeapon;
     property    Flag: Byte read FFlag;
@@ -659,21 +659,21 @@ end;
 { TPlayerModel }
 
   procedure TPlayerModel.ChangeAnimation (Animation: Byte; Force: Boolean = False);
-    var once: Boolean; speed, count: Integer;
+    var loop: Boolean; speed, count: Integer;
   begin
     if not Force then
       if FCurrentAnimation = Animation then
         Exit;
     FCurrentAnimation := Animation;
-    once := FCurrentAnimation in [A_STAND, A_WALK];
+    loop := FCurrentAnimation in [A_STAND, A_WALK];
     speed := PlayerModelsArray[FID].ModelSpeed[FCurrentAnimation];
     count := PlayerModelsArray[FID].Anim[FDirection, FCurrentAnimation].Frames;
-    FAnimState := TAnimationState.Create(once, speed, count);
+    FAnimState := TAnimState.Create(loop, speed, count);
   end;
 
 destructor TPlayerModel.Destroy();
 begin
-  FAnimState.Free;
+  FAnimState.Invalidate;
   inherited;
 end;
 
@@ -774,7 +774,7 @@ end;
 
   procedure TPlayerModel.Update;
   begin
-    if FAnimState <> nil then
+    if FAnimState.IsValid() then
       FAnimState.Update;
     if FFireCounter > 0 then
       Dec(FFireCounter)