DEADSOFTWARE

center player when the game is scaled (lighting is not working correctly yet, tho)
[d2df-sdl.git] / src / game / g_monsters.pas
index 92ee2f66a84b55c4d83e904d4705f584ced54a9d..71619512a3648a3d69e88eb390f5a5f2f8941a20 100644 (file)
@@ -38,12 +38,14 @@ const
   MONSTATE_REVIVE = 10;
   MONSTATE_RUNOUT = 11;
 
+{ in mapdef now
   BH_NORMAL   = 0;
   BH_KILLER   = 1;
   BH_MANIAC   = 2;
   BH_INSANE   = 3;
   BH_CANNIBAL = 4;
   BH_GOOD     = 5;
+}
 
 type
   TMonster = Class (TObject)
@@ -87,6 +89,8 @@ type
     FDieTriggers: Array of Integer;
     FSpawnTrigger: Integer;
 
+    mNeedSend: Boolean; // for network
+
     procedure Turn();
     function findNewPrey(): Boolean;
     procedure ActivateTriggers();
@@ -144,6 +148,10 @@ type
 
     procedure getMapBox (out x, y, w, h: Integer); inline;
 
+    // get-and-clear
+    function gncNeedSend (): Boolean; inline;
+    procedure setDirty (); inline; // why `dirty`? 'cause i may introduce property `needSend` later
+
   public
     property Obj: TObj read FObj;
 
@@ -314,6 +322,10 @@ begin
   h := FObj.Rect.Height;
 end;
 
+function TMonster.gncNeedSend (): Boolean; inline; begin result := mNeedSend; mNeedSend := false; end;
+
+procedure TMonster.setDirty (); inline; begin mNeedSend := true; end;
+
 
 // ////////////////////////////////////////////////////////////////////////// //
 function g_Mons_AlongLine (x0, y0, x1, y1: Integer; cb: TMonsAlongLineCB; log: Boolean=false): TMonster;
@@ -334,6 +346,7 @@ begin
   {$ENDIF}
   if (mProxyId = -1) then
   begin
+    //mNeedSend := true;
     mProxyId := monsGrid.insertBody(self, FObj.X+FObj.Rect.X, FObj.Y+FObj.Rect.Y, FObj.Rect.Width, FObj.Rect.Height);
     {$IF DEFINED(D2F_DEBUG_MONS_MOVE)}
     monsGrid.getBodyXY(mProxyId, x, y);
@@ -347,6 +360,7 @@ begin
 
     if (w <> nw) or (h <> nh) then
     begin
+      //mNeedSend := true;
       {$IF DEFINED(D2F_DEBUG_MONS_MOVE)}
       e_WriteLog(Format('monster #%d:(%u): resized; mProxyid=%d; gx=%d; gy=%d', [mArrIdx, UID, mProxyId, x-monsGrid.gridX0, y-monsGrid.gridY0]), MSG_NOTIFY);
       {$ENDIF}
@@ -354,6 +368,7 @@ begin
     end
     else if (x <> nx) or (y <> ny) then
     begin
+      //mNeedSend := true;
       {$IF DEFINED(D2F_DEBUG_MONS_MOVE)}
       e_WriteLog(Format('monster #%d:(%u): updating grid; mProxyid=%d; gx=%d; gy=%d', [mArrIdx, UID, mProxyId, x-monsGrid.gridX0, y-monsGrid.gridY0]), MSG_NOTIFY);
       {$ENDIF}
@@ -1823,6 +1838,7 @@ begin
   mArrIdx := -1;
   trapCheckFrameId := 0;
   mplatCheckFrameId := 0;
+  mNeedSend := false;
 
   if FMonsterType in [MONSTER_ROBO, MONSTER_BARREL] then
     FBloodKind := BLOOD_SPARKS
@@ -2138,6 +2154,7 @@ begin
                       o.Y+o.Rect.Y+o.Rect.Height-128, M_NONE);
 
 // Íå â îáëàñòè ðèñîâàíèÿ íå ðåñóåì:
+//FIXME!
   if (g_dbg_scale = 1.0) then
   begin
     if not g_Collide(FObj.X+FObj.Rect.X, FObj.Y+FObj.Rect.Y, FObj.Rect.Width, FObj.Rect.Height,