X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_panel.pas;h=0268c097b672b950344e3342b9d5e441152ec8ca;hb=2f2f9c997a76f5394c4deb2fa7d54b99a6186c87;hp=226515a5dc6a6381ba1d080f0e1f3bf3ac58e775;hpb=717e99e0ebd065bbc8f0c253cce7f5ee7df9c77b;p=d2df-sdl.git diff --git a/src/game/g_panel.pas b/src/game/g_panel.pas index 226515a..0268c09 100644 --- a/src/game/g_panel.pas +++ b/src/game/g_panel.pas @@ -1,4 +1,4 @@ -(* Copyright (C) DooM 2D:Forever Developers +(* Copyright (C) Doom 2D: Forever Developers * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -30,6 +30,7 @@ type Anim: Boolean; end; + PPanel = ^TPanel; TPanel = Class (TObject) private const @@ -109,6 +110,7 @@ type tag: Integer; // used in coldets and such; sorry; see g_map.GridTagXXX proxyId: Integer; // proxy id in map grid (DO NOT USE!) mapId: AnsiString; // taken directly from map file; dunno why it is here + hasTexTrigger: Boolean; // HACK: true when there's a trigger than can change my texture constructor Create(PanelRec: TDynRecord; AddTextures: TAddTextureArray; @@ -124,6 +126,7 @@ type procedure SetTexture(ID: Integer; AnimLoop: Byte = 0); function GetTextureID(): Cardinal; function GetTextureCount(): Integer; + function CanChangeTexture(): Boolean; procedure SaveState (st: TStream); procedure LoadState (st: TStream); @@ -209,8 +212,9 @@ var implementation uses + {$INCLUDE ../nogl/noGLuses.inc} e_texture, g_basic, g_map, g_game, g_gfx, e_graphics, g_weapons, g_triggers, - g_console, g_language, g_monsters, g_player, g_grid, e_log, GL, geom, utils, xstreams; + g_console, g_language, g_monsters, g_player, g_grid, e_log, geom, utils, xstreams; const PANEL_SIGNATURE = $4C4E4150; // 'PANL' @@ -258,6 +262,7 @@ begin Enabled := True; Door := False; LiftType := 0; + hasTexTrigger := False; case PanelType of PANEL_OPENDOOR: begin Enabled := False; Door := True; end; @@ -585,7 +590,7 @@ var begin if (ontop <> nil) then ontop^ := true; // yes, move with it; but skip steps (no need to process size change here, 'cause platform top cannot be changed with it) - mapGrid.traceBox(tex, tey, px, py, pw, ph, pdx, pdy, nil, (GridTagWall or GridTagDoor)); + mapGrid.traceBox(tex, tey, px, py, pw, ph, pdx, pdy, (GridTagWall or GridTagDoor)); end else begin @@ -613,7 +618,7 @@ var trtag := (GridTagWall or GridTagDoor); // if we're moving down, consider steps too if (szdy > 0) then trtag := trtag or GridTagStep; - mapGrid.traceBox(tex, tey, px, py, pw, ph, szdx, szdy, nil, trtag); + mapGrid.traceBox(tex, tey, px, py, pw, ph, szdx, szdy, trtag); end; end; end; @@ -632,7 +637,7 @@ var trtag := (GridTagWall or GridTagDoor); // if we're moving down, consider steps too if (pdy > 0) then trtag := trtag or GridTagStep; - mapGrid.traceBox(tex, tey, px, py, pw, ph, pdx, pdy, nil, trtag); + mapGrid.traceBox(tex, tey, px, py, pw, ph, pdx, pdy, trtag); end; end; end; @@ -897,7 +902,7 @@ begin (FTextureIDs[FCurTexture].AnTex <> nil) and (Width > 0) and (Height > 0) and (FAlpha < 255) then begin - FCurFrame := ClampInt(Frame, 0, FTextureIDs[FCurTexture].AnTex.TotalFrames); + FCurFrame := ClampInt(Frame, 0, FTextureIDs[FCurTexture].AnTex.TotalFrames - 1); FCurFrameCount := Count; FTextureIDs[FCurTexture].AnTex.CurrentFrame := FCurFrame; FTextureIDs[FCurTexture].AnTex.CurrentCounter := FCurFrameCount; @@ -953,22 +958,8 @@ end; procedure TPanel.SetTexture(ID: Integer; AnimLoop: Byte = 0); begin -// Íåò òåêñòóð: - if Length(FTextureIDs) = 0 then - FCurTexture := -1 - else - // Òîëüêî îäíà òåêñòóðà: - if Length(FTextureIDs) = 1 then - begin - if (ID = 0) or (ID = -1) then - FCurTexture := ID; - end - else - // Áîëüøå îäíîé òåêñòóðû: - begin - if (ID >= -1) and (ID <= High(FTextureIDs)) then - FCurTexture := ID; - end; + if (ID >= -1) and (ID < Length(FTextureIDs)) then + FCurTexture := ID; // Ïåðåêëþ÷èëèñü íà âèäèìóþ àíèì. òåêñòóðó: if (FCurTexture >= 0) and FTextureIDs[FCurTexture].Anim then @@ -1014,6 +1005,10 @@ begin Result := Result + 100; end; +function TPanel.CanChangeTexture(): Boolean; +begin + Result := (GetTextureCount() > 1) or hasTexTrigger; +end; const PAN_SAVE_VERSION = 1;