diff --git a/src/game/g_panel.pas b/src/game/g_panel.pas
index abdb26d803ce88559ed170b957973e73aa703977..c3f47cfde290c32b6a93b45bd543259789ae67b5 100644 (file)
--- a/src/game/g_panel.pas
+++ b/src/game/g_panel.pas
type
TAddTextureArray = array of record
Texture: Cardinal; // Textures[Texture]
type
TAddTextureArray = array of record
Texture: Cardinal; // Textures[Texture]
- Anim: Boolean;
end;
ATextureID = array of record
end;
ATextureID = array of record
{ T P a n e l : }
{ 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;
constructor TPanel.Create(PanelRec: TDynRecord;
AddTextures: TAddTextureArray;
CurTex: Integer;
begin
SetLength(FTextureIDs, 1);
FTextureIDs[0].Anim := False;
begin
SetLength(FTextureIDs, 1);
FTextureIDs[0].Anim := False;
-
-{
- // !!! set this
case PanelRec.PanelType of
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;
end;
-}
-
FCurTexture := 0;
Exit;
end;
FCurTexture := 0;
Exit;
end;
for i := 0 to Length(FTextureIDs)-1 do
begin
FTextureIDs[i].Texture := AddTextures[i].Texture;
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);
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;
end
end;
LastAnimLoop := AnimLoop;
end;
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
function TPanel.GetTextureCount(): Integer;
begin
end;
utils.writeBool(st, anim);
// Åñëè äà - ñîõðàíÿåì àíèìàöèþ
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));
// moving platform state
utils.writeInt(st, Integer(mMovingSpeed.X));
(FTextureIDs[FCurTexture].Anim) and
(FTextureIDs[FCurTexture].AnTex <> nil),
'TPanel.LoadState: No animation object');
(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
end;
// moving platform state