DEADSOFTWARE

moving platforms experiment (DO NOT USE YET!)
[d2df-sdl.git] / src / game / g_map.pas
index a4b2064a98e26b9609aa691c77fcb2f90eb61c2f..9470057306ae27f956b9b1c01b87ca49cdf7cd79 100644 (file)
@@ -85,8 +85,6 @@ function  g_Map_HaveFlagPoints(): Boolean;
 procedure g_Map_ResetFlag(Flag: Byte);
 procedure g_Map_DrawFlags();
 
-function g_Map_PanelForPID(PanelID: Integer; var PanelArrayID: Integer): PPanel;
-
 procedure g_Map_SaveState(Var Mem: TBinMemoryWriter);
 procedure g_Map_LoadState(Var Mem: TBinMemoryReader);
 
@@ -195,6 +193,7 @@ var
   gWADHash: TMD5Digest;
   BackID:  DWORD = DWORD(-1);
   gExternalResources: TStringList;
+  gMovingWallIds: array of Integer = nil;
 
   gdbg_map_use_accel_render: Boolean = true;
   gdbg_map_use_accel_coldet: Boolean = true;
@@ -1566,6 +1565,8 @@ var
   pttit: PTRec;
   pannum, trignum, cnt, tgpid: Integer;
   stt: UInt64;
+  moveSpeed{, moveStart, moveEnd}: TDFPoint;
+  //moveActive: Boolean;
 begin
   mapGrid.Free();
   mapGrid := nil;
@@ -1944,6 +1945,18 @@ begin
         // set 'gamePanelId' field to panel id
         rec.userPanelId := PanelID; // remember game panel id, we'll fix triggers later
 
+        // setup lifts
+        moveSpeed := rec.moveSpeed;
+        //moveStart := rec.moveStart;
+        //moveEnd := rec.moveEnd;
+        //moveActive := rec['move_active'].varvalue;
+        if not moveSpeed.isZero then
+        begin
+          SetLength(gMovingWallIds, Length(gMovingWallIds)+1);
+          gMovingWallIds[High(gMovingWallIds)] := PanelID;
+          //e_LogWritefln('found moving panel ''%s'' (idx=%s; id=%s)', [rec.id, pannum, PanelID]);
+        end;
+
         //e_LogWritefln('PANEND: pannum=%s', [pannum]);
 
         g_Game_StepLoading();
@@ -2317,6 +2330,7 @@ begin
   FreePanelArray(gSteps);
   FreePanelArray(gLifts);
   FreePanelArray(gBlockMon);
+  gMovingWallIds := nil;
 
   if BackID <> DWORD(-1) then
   begin
@@ -2353,9 +2367,7 @@ var
     i: Integer;
 
   begin
-    if panels <> nil then
-      for i := 0 to High(panels) do
-        panels[i].Update();
+    for i := 0 to High(panels) do panels[i].Update();
   end;
 
 begin
@@ -3231,17 +3243,6 @@ begin
 ///// /////
 end;
 
-function g_Map_PanelForPID(PanelID: Integer; var PanelArrayID: Integer): PPanel;
-var
-  Arr: TPanelArray;
-begin
-  Result := nil;
-  if (PanelID < 0) or (PanelID > High(PanelByID)) then Exit;
-  Arr := PanelByID[PanelID].PWhere^;
-  PanelArrayID := PanelByID[PanelID].PArrID;
-  Result := Addr(Arr[PanelByID[PanelID].PArrID]);
-end;
-
 
 // trace liquid, stepping by `dx` and `dy`
 // return last seen liquid coords, and `false` if we're started outside of the liquid