diff --git a/src/game/g_panel.pas b/src/game/g_panel.pas
index abdb26d803ce88559ed170b957973e73aa703977..17543ac7a6be39a425846608fc94187934c2801f 100644 (file)
--- a/src/game/g_panel.pas
+++ b/src/game/g_panel.pas
type
TAddTextureArray = array of record
Texture: Cardinal; // Textures[Texture]
- Anim: Boolean;
end;
ATextureID = array of record
implementation
-uses
- g_basic, g_map, g_game, g_gfx, g_weapons, g_triggers, g_items,
- g_console, g_language, g_monsters, g_player, g_grid, e_log, geom, utils, xstreams;
+ uses
+ {$IFDEF ENABLE_GFX}
+ g_gfx,
+ {$ENDIF}
+ {$IFDEF ENABLE_GIBS}
+ g_gibs,
+ {$ENDIF}
+ {$IFDEF ENABLE_CORPSES}
+ g_corpses,
+ {$ENDIF}
+ g_basic, g_map, g_game, g_weapons, g_triggers, g_items,
+ 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;
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;
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;
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;
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;
px, py, pw, ph, pdx, pdy: Integer;
squash: Boolean;
plr: TPlayer;
- gib: PGib;
- cor: TCorpse;
+ {$IFDEF ENABLE_GIBS}
+ gib: PGib;
+ {$ENDIF}
+ {$IFDEF ENABLE_CORPSES}
+ cor: TCorpse;
+ {$ENDIF}
+ ontop: Boolean;
mon: TMonster;
flg: PFlag;
itm: PItem;
mpfrid: LongWord;
- ontop: Boolean;
actMoveTrig: Boolean;
actSizeTrig: Boolean;
begin
if not g_Game_IsClient and squash then plr.Damage(15000, 0, 0, 0, HIT_TRAP);
end;
- // process gibs
- for f := 0 to High(gGibs) do
- begin
- gib := @gGibs[f];
- if not gib.alive then continue;
- gib.getMapBox(px, py, pw, ph);
- if not g_Collide(px, py, pw, ph, cx0, cy0, cw, ch) then continue;
- if tryMPlatMove(px, py, pw, ph, pdx, pdy, squash, @ontop) then
+ {$IFDEF ENABLE_GIBS}
+ // process gibs
+ for f := 0 to High(gGibs) do
begin
- // set new position
- gib.moveBy(pdx, pdy); // this will call `positionChanged()` for us
+ gib := @gGibs[f];
+ if not gib.alive then continue;
+ gib.getMapBox(px, py, pw, ph);
+ if not g_Collide(px, py, pw, ph, cx0, cy0, cw, ch) then continue;
+ if tryMPlatMove(px, py, pw, ph, pdx, pdy, squash, @ontop) then
+ begin
+ // set new position
+ gib.moveBy(pdx, pdy); // this will call `positionChanged()` for us
+ end;
end;
- end;
+ {$ENDIF}
- // move and push corpses
- for f := 0 to High(gCorpses) do
- begin
- cor := gCorpses[f];
- if (cor = nil) then continue;
- cor.getMapBox(px, py, pw, ph);
- if not g_Collide(px, py, pw, ph, cx0, cy0, cw, ch) then continue;
- if tryMPlatMove(px, py, pw, ph, pdx, pdy, squash, @ontop) then
+ {$IFDEF ENABLE_CORPSES}
+ // move and push corpses
+ for f := 0 to High(gCorpses) do
begin
- // set new position
- cor.moveBy(pdx, pdy); // this will call `positionChanged()` for us
+ cor := gCorpses[f];
+ if (cor = nil) then continue;
+ cor.getMapBox(px, py, pw, ph);
+ if not g_Collide(px, py, pw, ph, cx0, cy0, cw, ch) then continue;
+ if tryMPlatMove(px, py, pw, ph, pdx, pdy, squash, @ontop) then
+ begin
+ // set new position
+ cor.moveBy(pdx, pdy); // this will call `positionChanged()` for us
+ end;
end;
- end;
+ {$ENDIF}
// move and push flags
if gGameSettings.GameMode = GM_CTF then
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
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));
(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