X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_panel.pas;h=7f3e35f9a0b4fabe792e93b17e435450c323fad5;hb=a4f25c41dfd783a925aa2dab4b9b84753d5c3f18;hp=d724f2af056e6e91ea8154bb4b14c6678aaf78d6;hpb=984a31dcc2636073083a3a3cf8d4d409019d211a;p=d2df-sdl.git diff --git a/src/game/g_panel.pas b/src/game/g_panel.pas index d724f2a..7f3e35f 100644 --- a/src/game/g_panel.pas +++ b/src/game/g_panel.pas @@ -13,13 +13,14 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . *) -{$MODE DELPHI} +{$INCLUDE ../shared/a_modes.inc} +{$M+} unit g_panel; interface uses - MAPSTRUCT, BinEditor, g_textures; + MAPDEF, BinEditor, g_textures, xdynrec; type TAddTextureArray = Array of @@ -41,22 +42,29 @@ type True: (AnTex: TAnimation); end; + private + function getx1 (): Integer; inline; + function gety1 (): Integer; inline; + function getvisvalid (): Boolean; inline; + public FCurTexture: Integer; // Íîìåð òåêóùåé òåêñòóðû FCurFrame: Integer; FCurFrameCount: Byte; - X, Y: Integer; - Width, Height: Word; - PanelType: Word; - SaveIt: Boolean; // Ñîõðàíÿòü ïðè SaveState? - Enabled: Boolean; - Door: Boolean; - Moved: Boolean; - LiftType: Byte; - LastAnimLoop: Byte; - ArrIdx: Integer; // index in one of internal arrays; sorry - - constructor Create(PanelRec: TPanelRec_1; + FX, FY: Integer; + FWidth, FHeight: Word; + FPanelType: Word; + FSaveIt: Boolean; // Ñîõðàíÿòü ïðè SaveState? + FEnabled: Boolean; + FDoor: Boolean; + FMoved: Boolean; + FLiftType: Byte; + FLastAnimLoop: Byte; + arrIdx: Integer; // index in one of internal arrays; sorry + tag: Integer; // used in coldets and such; sorry + proxyId: Integer; // proxy id in map grid (DO NOT USE!) + + constructor Create(PanelRec: TDynRecord; AddTextures: TAddTextureArray; CurTex: Integer; var Textures: TLevelTextureArray); @@ -73,15 +81,34 @@ type procedure SaveState(var Mem: TBinMemoryWriter); procedure LoadState(var Mem: TBinMemoryReader); + + public + property visvalid: Boolean read getvisvalid; // panel is "visvalid" when it's width and height are positive + + published + property x0: Integer read FX; + property y0: Integer read FY; + property x1: Integer read getx1; // inclusive! + property y1: Integer read gety1; // inclusive! + property x: Integer read FX write FX; + property y: Integer read FY write FY; + property width: Word read FWidth write FWidth; + property height: Word read FHeight write FHeight; + property panelType: Word read FPanelType write FPanelType; + property saveIt: Boolean read FSaveIt write FSaveIt; // Ñîõðàíÿòü ïðè SaveState? + property enabled: Boolean read FEnabled write FEnabled; // Ñîõðàíÿòü ïðè SaveState? + property door: Boolean read FDoor write FDoor; // Ñîõðàíÿòü ïðè SaveState? + property moved: Boolean read FMoved write FMoved; // Ñîõðàíÿòü ïðè SaveState? + property liftType: Byte read FLiftType write FLiftType; // Ñîõðàíÿòü ïðè SaveState? + property lastAnimLoop: Byte read FLastAnimLoop write FLastAnimLoop; // Ñîõðàíÿòü ïðè SaveState? end; - PPanel = ^TPanel; TPanelArray = Array of TPanel; implementation uses - SysUtils, g_basic, g_map, MAPDEF, g_game, e_graphics, + SysUtils, g_basic, g_map, g_game, e_graphics, g_console, g_language, e_log, GL; const @@ -89,7 +116,7 @@ const { T P a n e l : } -constructor TPanel.Create(PanelRec: TPanelRec_1; +constructor TPanel.Create(PanelRec: TDynRecord; AddTextures: TAddTextureArray; CurTex: Integer; var Textures: TLevelTextureArray); @@ -174,11 +201,11 @@ begin case PanelRec.PanelType of PANEL_WATER: - FTextureIDs[0].Tex := TEXTURE_SPECIAL_WATER; + FTextureIDs[0].Tex := LongWord(TEXTURE_SPECIAL_WATER); PANEL_ACID1: - FTextureIDs[0].Tex := TEXTURE_SPECIAL_ACID1; + FTextureIDs[0].Tex := LongWord(TEXTURE_SPECIAL_ACID1); PANEL_ACID2: - FTextureIDs[0].Tex := TEXTURE_SPECIAL_ACID2; + FTextureIDs[0].Tex := LongWord(TEXTURE_SPECIAL_ACID2); end; FCurTexture := 0; @@ -247,16 +274,19 @@ begin Inherited; end; +function TPanel.getx1 (): Integer; inline; begin result := X+Width-1; end; +function TPanel.gety1 (): Integer; inline; begin result := Y+Height-1; end; +function TPanel.getvisvalid (): Boolean; inline; begin result := (Width > 0) and (Height > 0); end; + procedure TPanel.Draw(); var xx, yy: Integer; NoTextureID: DWORD; NW, NH: Word; begin - if Enabled and (FCurTexture >= 0) and + if {Enabled and} (FCurTexture >= 0) and (Width > 0) and (Height > 0) and (FAlpha < 255) and - g_Collide(X, Y, Width, Height, - sX, sY, sWidth, sHeight) then + (g_dbg_scale_05 or g_Collide(X, Y, Width, Height, sX, sY, sWidth, sHeight)) then begin if FTextureIDs[FCurTexture].Anim then begin // Àíèìèðîâàííàÿ òåêñòóðà @@ -272,16 +302,16 @@ begin else begin // Îáû÷íàÿ òåêñòóðà case FTextureIDs[FCurTexture].Tex of - TEXTURE_SPECIAL_WATER: + LongWord(TEXTURE_SPECIAL_WATER): e_DrawFillQuad(X, Y, X+Width-1, Y+Height-1, 0, 0, 255, 0, B_FILTER); - TEXTURE_SPECIAL_ACID1: + LongWord(TEXTURE_SPECIAL_ACID1): e_DrawFillQuad(X, Y, X+Width-1, Y+Height-1, 0, 128, 0, 0, B_FILTER); - TEXTURE_SPECIAL_ACID2: + LongWord(TEXTURE_SPECIAL_ACID2): e_DrawFillQuad(X, Y, X+Width-1, Y+Height-1, 128, 0, 0, 0, B_FILTER); - TEXTURE_NONE: + LongWord(TEXTURE_NONE): if g_Texture_Get('NOTEXTURE', NoTextureID) then begin e_GetTextureSize(NoTextureID, @NW, @NH); @@ -337,10 +367,10 @@ begin if not FTextureIDs[FCurTexture].Anim then begin case FTextureIDs[FCurTexture].Tex of - TEXTURE_SPECIAL_WATER: exit; - TEXTURE_SPECIAL_ACID1: exit; - TEXTURE_SPECIAL_ACID2: exit; - TEXTURE_NONE: exit; + LongWord(TEXTURE_SPECIAL_WATER): exit; + LongWord(TEXTURE_SPECIAL_ACID1): exit; + LongWord(TEXTURE_SPECIAL_ACID2): exit; + LongWord(TEXTURE_NONE): exit; end; end; if (X+Width < lightX-radius) then exit; @@ -481,7 +511,7 @@ end; function TPanel.GetTextureID(): DWORD; begin - Result := TEXTURE_NONE; + Result := LongWord(TEXTURE_NONE); if (FCurTexture >= 0) then begin @@ -514,14 +544,14 @@ begin sig := PANEL_SIGNATURE; // 'PANL' Mem.WriteDWORD(sig); // Îòêðûòà/çàêðûòà, åñëè äâåðü: - Mem.WriteBoolean(Enabled); + Mem.WriteBoolean(FEnabled); // Íàïðàâëåíèå ëèôòà, åñëè ëèôò: - Mem.WriteByte(LiftType); + Mem.WriteByte(FLiftType); // Íîìåð òåêóùåé òåêñòóðû: Mem.WriteInt(FCurTexture); // Êîîðäû - Mem.WriteInt(X); - Mem.WriteInt(Y); + Mem.WriteInt(FX); + Mem.WriteInt(FY); // Àíèìèðîâàííàÿ ëè òåêóùàÿ òåêñòóðà: if (FCurTexture >= 0) and (FTextureIDs[FCurTexture].Anim) then begin @@ -552,14 +582,14 @@ begin raise EBinSizeError.Create('TPanel.LoadState: Wrong Panel Signature'); end; // Îòêðûòà/çàêðûòà, åñëè äâåðü: - Mem.ReadBoolean(Enabled); + Mem.ReadBoolean(FEnabled); // Íàïðàâëåíèå ëèôòà, åñëè ëèôò: - Mem.ReadByte(LiftType); + Mem.ReadByte(FLiftType); // Íîìåð òåêóùåé òåêñòóðû: Mem.ReadInt(FCurTexture); // Êîîðäû - Mem.ReadInt(X); - Mem.ReadInt(Y); + Mem.ReadInt(FX); + Mem.ReadInt(FY); // Àíèìèðîâàííàÿ ëè òåêóùàÿ òåêñòóðà: Mem.ReadBoolean(anim); // Åñëè äà - çàãðóæàåì àíèìàöèþ: