DEADSOFTWARE

made some class' properties published for Holmes
[d2df-sdl.git] / src / game / g_panel.pas
index d724f2af056e6e91ea8154bb4b14c6678aaf78d6..7f3e35f9a0b4fabe792e93b17e435450c323fad5 100644 (file)
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  *)
-{$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);
 // Åñëè äà - çàãðóæàåì àíèìàöèþ: