DEADSOFTWARE

game: disable gfx for server
[d2df-sdl.git] / src / game / g_panel.pas
index fa4429256576dd18b109dd5ddaf4fbfe9871ac28..ee8e17dbb9b435f622117f0c69fced8a0fc29f94 100644 (file)
@@ -25,7 +25,6 @@ uses
 type
   TAddTextureArray = array of record
     Texture: Cardinal; // Textures[Texture]
-    Anim: Boolean;
   end;
 
   ATextureID = array of record
@@ -217,15 +216,36 @@ var
 
 implementation
 
-uses
-  g_basic, g_map, g_game, g_gfx, g_weapons, g_triggers,
-  g_console, g_language, g_monsters, g_player, g_grid, e_log, geom, utils, xstreams;
+  uses
+    {$IFDEF ENABLE_GFX}
+      g_gfx,
+    {$ENDIF}
+    g_basic, g_map, g_game, g_weapons, g_triggers,
+    g_console, g_language, g_monsters, g_player, g_grid, e_log, geom, utils, xstreams
+  ;
 
 const
   PANEL_SIGNATURE = $4C4E4150; // 'PANL'
 
 { T P a n e l : }
 
+  function FindTextureByName (const name: String): Integer;
+    var i: Integer;
+  begin
+    Result := -1;
+    if Textures <> nil then
+    begin
+      for i := 0 to High(Textures) do
+      begin
+        if Textures[i].TextureName = name then
+        begin
+          Result := i;
+          break;
+        end
+      end
+    end
+  end;
+
 constructor TPanel.Create(PanelRec: TDynRecord;
                           AddTextures: TAddTextureArray;
                           CurTex: Integer;
@@ -304,19 +324,11 @@ begin
   begin
     SetLength(FTextureIDs, 1);
     FTextureIDs[0].Anim := False;
-
-{
-    // !!! set this
     case PanelRec.PanelType of
-      PANEL_WATER:
-        FTextureIDs[0].Tex := LongWord(TEXTURE_SPECIAL_WATER);
-      PANEL_ACID1:
-        FTextureIDs[0].Tex := LongWord(TEXTURE_SPECIAL_ACID1);
-      PANEL_ACID2:
-        FTextureIDs[0].Tex := LongWord(TEXTURE_SPECIAL_ACID2);
+      PANEL_WATER: FTextureIDs[0].Texture := FindTextureByName(TEXTURE_NAME_WATER);
+      PANEL_ACID1: FTextureIDs[0].Texture := FindTextureByName(TEXTURE_NAME_ACID1);
+      PANEL_ACID2: FTextureIDs[0].Texture := FindTextureByName(TEXTURE_NAME_ACID2);
     end;
-}
-
     FCurTexture := 0;
     Exit;
   end;
@@ -334,12 +346,10 @@ begin
   for i := 0 to Length(FTextureIDs)-1 do
   begin
     FTextureIDs[i].Texture := AddTextures[i].Texture;
-    FTextureIDs[i].Anim := AddTextures[i].Anim;
+    FTextureIDs[i].Anim := Textures[AddTextures[i].Texture].FramesCount > 0;
     if FTextureIDs[i].Anim then
     begin // Àíèìèðîâàííàÿ òåêñòóðà
       FTextureIDs[i].AnTex := TAnimationState.Create(True, Textures[AddTextures[i].Texture].Speed, Textures[AddTextures[i].Texture].FramesCount);
-      FTextureIDs[i].AnTex.Blending := ByteBool(PanelRec.Flags and PANEL_FLAG_BLENDING);
-      FTextureIDs[i].AnTex.Alpha := PanelRec.Alpha;
     end
   end;
 
@@ -430,7 +440,9 @@ begin
       e_LogWritefln('panel moved: arridx=%s; guid=%s; proxyid=%s; old:(%s,%s)-(%sx%s); new:(%s,%s)-(%sx%s)',
         [arrIdx, mGUID, proxyId, px, py, pw, ph, x, y, width, height]);
       }
-      g_Mark(px, py, pw, ph, MARK_WALL, false);
+      {$IFDEF ENABLE_GFX}
+        g_Mark(px, py, pw, ph, MARK_WALL, false);
+      {$ENDIF}
       if (Width < 1) or (Height < 1) then
       begin
         mapGrid.proxyEnabled[proxyId] := false;
@@ -447,7 +459,9 @@ begin
         begin
           mapGrid.moveBody(proxyId, X, Y);
         end;
-        g_Mark(X, Y, Width, Height, MARK_WALL);
+        {$IFDEF ENABLE_GFX}
+          g_Mark(X, Y, Width, Height, MARK_WALL);
+        {$ENDIF}
       end;
     end;
   end;
@@ -876,24 +890,20 @@ begin
   LastAnimLoop := AnimLoop;
 end;
 
-function TPanel.GetTextureID(): DWORD;
-begin
-  Result := LongWord(TEXTURE_NONE);
-//  if (FCurTexture >= 0) then
-//  begin
-//    if FTextureIDs[FCurTexture].Anim then
-//      Result := Textures[FTextureIDs[FCurTexture].Texture].FramesID
-//    else
-//      Result := Textures[FTextureIDs[FCurTexture].Texture].TextureID
-{
-    // !!! old behavior
-    if FTextureIDs[FCurTexture].Anim then
-      Result := FTextureIDs[FCurTexture].AnTex.FramesID
-    else
-      Result := FTextureIDs[FCurTexture].Tex;
-}
-//  end
-end;
+  function TPanel.GetTextureID(): DWORD;
+    var Texture: Integer;
+  begin
+    Result := LongWord(TEXTURE_NONE);
+    if (FCurTexture >= 0) then
+    begin
+      Texture := FTextureIDs[FCurTexture].Texture;
+      case Textures[Texture].TextureName of
+        TEXTURE_NAME_WATER: Result := DWORD(TEXTURE_SPECIAL_WATER);
+        TEXTURE_NAME_ACID1: Result := DWORD(TEXTURE_SPECIAL_ACID1);
+        TEXTURE_NAME_ACID2: Result := DWORD(TEXTURE_SPECIAL_ACID2);
+      end
+    end
+  end;
 
 function TPanel.GetTextureCount(): Integer;
 begin
@@ -945,7 +955,7 @@ begin
   end;
   utils.writeBool(st, anim);
   // Åñëè äà - ñîõðàíÿåì àíèìàöèþ
-  if anim then FTextureIDs[FCurTexture].AnTex.SaveState(st);
+  if anim then FTextureIDs[FCurTexture].AnTex.SaveState(st, FAlpha, FBlending);
 
   // moving platform state
   utils.writeInt(st, Integer(mMovingSpeed.X));
@@ -994,7 +1004,7 @@ begin
            (FTextureIDs[FCurTexture].Anim) and
            (FTextureIDs[FCurTexture].AnTex <> nil),
            'TPanel.LoadState: No animation object');
-    FTextureIDs[FCurTexture].AnTex.LoadState(st);
+    FTextureIDs[FCurTexture].AnTex.LoadState(st, FAlpha, FBlending);
   end;
 
   // moving platform state