DEADSOFTWARE

Small refactoring of physics module
[cavecraft.git] / src / mobs.pas
index c255d0ea2f265ad7b19bdcce60a44c70452e5b48..519cf9cd0a6f698634bbf94fecb90aaa142d86c5 100644 (file)
@@ -44,16 +44,16 @@ implementation
 \r
   procedure UseObject(i : integer);\r
     begin\r
-      Phy.LoadObject(mx[i], my[i], tw[mtype[i]], th[mtype[i]], mvx[i], mvy[i], mjump[i]);\r
+      Phy.SetObject(mx[i], my[i], tw[mtype[i]], th[mtype[i]], mvx[i], mvy[i], mjump[i]);\r
     end;\r
 \r
   procedure UpdateObject(i : integer);\r
     begin\r
       mx[i] := Phy.GetX;\r
       my[i] := Phy.GetY;\r
-      mvx[i] := Phy.GetVelX;\r
-      mvy[i] := Phy.GetVelY;\r
-      mjump[i] := Phy.GetJmp;\r
+      mvx[i] := Phy.GetVX;\r
+      mvy[i] := Phy.GetVY;\r
+      mjump[i] := Phy.GetJump;\r
     end;\r
 \r
   procedure InitTab(typ, w, h, hp, jump : integer);\r
@@ -93,13 +93,13 @@ implementation
       else if vec > 0 then x := (mx[i] + GetW(i) + 4) / 16;\r
       else x := (mx[i] + GetW(i) / 2) / 16;\r
       y := (my[i] + GetH(i) - 8) / 16;\r
-      result := Phy.IsSolid(x, y, mvx[i] + vec, mvy[i]);\r
+      result := Phy.IsSolid(x, y);\r
     end;\r
 \r
   procedure Swim(i, vec : integer);\r
     begin\r
-      if Phy.MapCollType(50, mx[i], my[i], GetW(i), GetH(i) / 2) or\r
-         Phy.MapCollType(51, mx[i], my[i], GetW(i), GetH(i) / 2)\r
+      if Phy.AreaWithBlock(50, mx[i], my[i], GetW(i), GetH(i) / 2) or\r
+         Phy.AreaWithBlock(51, mx[i], my[i], GetW(i), GetH(i) / 2)\r
       then begin\r
         if (vec <> 0) and IsSolidStep(i, vec) then mvy[i] := -10 else mvy[i] := -2;\r
       end;\r
@@ -123,13 +123,13 @@ implementation
   procedure Jump(i, vec : integer);\r
     begin\r
       UseObject(i);\r
-      Phy.JumpObj(GetJumpHeight(i));\r
+      Phy.Jump(GetJumpHeight(i));\r
       UpdateObject(i);\r
     end;\r
 \r
   function CollisionWithPlayer(i : integer) : boolean;\r
     begin\r
-      result := CollTwoObj(\r
+      result := Phy.IntersectRects(\r
         mx[i], my[i], GetW(i), GetH(i),\r
         Player.GetX, Player.GetY, Player.GetW, Player.GetH\r
       );\r
@@ -141,10 +141,9 @@ implementation
     begin\r
       x := mx[i] + GetW(i) / 2;\r
       y := my[i] + GetH(i) / 2;\r
-      if mtype[i] = zomby then\r
-        begin\r
-          Drop.Create(Items.rottenMeat, x, y, Random(3));\r
-        end;\r
+      if mtype[i] = zomby then begin\r
+        Drop.Create(Items.rottenMeat, x, y, Random(3));\r
+      end;\r
       mtype[i] := none;\r
     end;\r
 \r
@@ -180,7 +179,7 @@ implementation
 \r
       (* Вижу игрока - сразу агрюсь и бегу за ним некоторое время *)\r
       if (mpos[i] = 0) and (Player.GetX - mx[i] < 0) or (mpos[i] = 1) and (Player.GetX - mx[i] > 0) then\r
-        if Phy.CanSeeObj(mx[i], my[i], Player.GetX, Player.GetY) then\r
+        if Phy.RayTraced(mx[i], my[i], Player.GetX, Player.GetY) then\r
           begin\r
             mb[i] := angryTime;\r
             mc[i] := angry;\r
@@ -206,7 +205,7 @@ implementation
         if mb[i] <= 0 then mc[i] := stay;\r
       end else if mc[i] = angry then begin\r
         if mb[i] <= 0 then begin\r
-          if Phy.CanSeeObj(mx[i], my[i], Player.GetX, Player.GetY) then begin\r
+          if Phy.RayTraced(mx[i], my[i], Player.GetX, Player.GetY) then begin\r
             (* Видижу игрока - устанавливаю время преследования *)\r
             mb[i] := angryTime;\r
           end else begin\r
@@ -272,7 +271,7 @@ implementation
       i : integer;\r
     begin\r
       for i := 0 to lastMob do if mtype[i] <> none then\r
-        if CollTwoObj(x, y, w, h, mx[i], my[i], GetW(i), GetH(i)) then\r
+        if Phy.IntersectRects(x, y, w, h, mx[i], my[i], GetW(i), GetH(i)) then\r
           begin\r
             mvx[i] := mvx[i] + addvx;\r
             mvy[i] := mvy[i] + addvy;\r
@@ -302,7 +301,7 @@ implementation
       for i := 0 to lastMob do\r
         begin\r
           UseObject(i);\r
-          Phy.Calc(true);\r
+          Phy.Step(true);\r
           UpdateObject(i);\r
         end;\r
     end;\r