DEADSOFTWARE

some accessors to publish more properties
authorKetmar Dark <ketmar@ketmar.no-ip.org>
Sat, 2 Sep 2017 23:26:00 +0000 (02:26 +0300)
committerKetmar Dark <ketmar@ketmar.no-ip.org>
Sat, 2 Sep 2017 23:26:22 +0000 (02:26 +0300)
src/game/g_monsters.pas
src/game/g_netmsg.pas
src/game/g_panel.pas

index ae4389c98ab48bb4b9c79c15ab9d8607de8967c2..a437ff9bdcd13e7c1ea72bc56b75efe61c4a72cb 100644 (file)
@@ -91,6 +91,9 @@ type
     function findNewPrey(): Boolean;
     procedure ActivateTriggers();
 
+    procedure setGameX (v: Integer); inline;
+    procedure setGameY (v: Integer); inline;
+
   public
     FNoRespawn: Boolean;
     FFireTime: Integer;
@@ -135,6 +138,8 @@ type
 
     procedure positionChanged (); //WARNING! call this after monster position was changed, or coldet will not work right!
 
+    procedure setPosition (ax, ay: Integer; callPosChanged: Boolean=true); inline;
+
     procedure getMapBox (out x, y, w, h: Integer); inline;
 
   public
@@ -159,8 +164,8 @@ type
     property UID: Word read FUID write FUID;
     property SpawnTrigger: Integer read FSpawnTrigger write FSpawnTrigger;
 
-    property GameX: Integer read FObj.X write FObj.X;
-    property GameY: Integer read FObj.Y write FObj.Y;
+    property GameX: Integer read FObj.X write setGameX;
+    property GameY: Integer read FObj.Y write setGameY;
     property GameVelX: Integer read FObj.Vel.X write FObj.Vel.X;
     property GameVelY: Integer read FObj.Vel.Y write FObj.Vel.Y;
     property GameAccelX: Integer read FObj.Accel.X write FObj.Accel.X;
@@ -256,6 +261,7 @@ uses
   g_language, g_netmsg, idpool;
 
 
+
 // ////////////////////////////////////////////////////////////////////////// //
 procedure g_Mons_ProfilersBegin ();
 begin
@@ -1491,6 +1497,11 @@ end;
 
 { T M o n s t e r : }
 
+procedure TMonster.setGameX (v: Integer); inline; begin FObj.X := v; positionChanged(); end;
+procedure TMonster.setGameY (v: Integer); inline; begin FObj.Y := v; positionChanged(); end;
+procedure TMonster.setPosition (ax, ay: Integer; callPosChanged: Boolean=true); inline; begin FObj.X := ax; FObj.Y := ay; if callPosChanged then positionChanged(); end;
+
+
 procedure TMonster.ActionSound();
 begin
   case FMonsterType of
@@ -1679,8 +1690,8 @@ begin
   FObj.Accel.X := 0;
   FObj.Accel.Y := 0;
   FDirection := FStartDirection;
-  GameX := FStartX;
-  GameY := FStartY;
+  {GameX}FObj.X := FStartX;
+  {GameY}FObj.Y := FStartY;
   FObj.Rect := MONSTERTABLE[FMonsterType].Rect;
   FHealth := MONSTERTABLE[FMonsterType].Health;
   FAmmo := 0;
index 53ab6a501b063c2cae51a19a9edcf326df2840a4..33d16522865e7e122b6bdbe9e7f9c76c90c43b74 100644 (file)
@@ -2604,10 +2604,6 @@ begin
 
   with Mon do
   begin
-    GameX := X;
-    GameY := Y;
-    GameVelX := VX;
-    GameVelY := VY;
 
     MonsterAnim := MAnim;
     MonsterTargetUID := MTarg;
@@ -2619,7 +2615,10 @@ begin
 
     SetState(MState);
 
-    positionChanged(); // this updates spatial accelerators
+    setPosition(X, Y); // this will call positionChanged();
+    GameVelX := VX;
+    GameVelY := VY;
+    //positionChanged(); // this updates spatial accelerators
   end;
 end;
 
@@ -2627,6 +2626,7 @@ procedure MC_RECV_MonsterPos(var M: TMsg);
 var
   Mon: TMonster;
   ID: Word;
+  X, Y: Integer;
 begin
   ID := M.ReadWord();
   Mon := g_Monsters_ByUID(ID);
@@ -2635,12 +2635,13 @@ begin
 
   with Mon do
   begin
-    GameX := M.ReadLongInt();
-    GameY := M.ReadLongInt();
+    X := M.ReadLongInt();
+    Y := M.ReadLongInt();
+    Mon.setPosition(X, Y); // this will call `positionChanged()`
     GameVelX := M.ReadLongInt();
     GameVelY := M.ReadLongInt();
     GameDirection := TDirection(M.ReadByte());
-    positionChanged(); // this updates spatial accelerators
+    //positionChanged(); // this updates spatial accelerators
   end;
 end;
 
index 94e7b877488b8963eb05bbcb924d0161fe7a7bf4..d104593da3eeb95a875366263c08c5c78b2554f7 100644 (file)
@@ -55,6 +55,21 @@ type
     function gety1 (): Integer; inline;
     function getvisvalid (): Boolean; inline;
 
+    function getMovingSpeedX (): Integer; inline;
+    procedure setMovingSpeedX (v: Integer); inline;
+    function getMovingSpeedY (): Integer; inline;
+    procedure setMovingSpeedY (v: Integer); inline;
+
+    function getMovingStartX (): Integer; inline;
+    procedure setMovingStartX (v: Integer); inline;
+    function getMovingStartY (): Integer; inline;
+    procedure setMovingStartY (v: Integer); inline;
+
+    function getMovingEndX (): Integer; inline;
+    procedure setMovingEndX (v: Integer); inline;
+    function getMovingEndY (): Integer; inline;
+    procedure setMovingEndY (v: Integer); inline;
+
   public
     FCurTexture:      Integer; // Íîìåð òåêóùåé òåêñòóðû
     FCurFrame:        Integer;
@@ -95,16 +110,15 @@ type
 
     procedure positionChanged (); inline;
 
-    function isGBack (): Boolean; inline; // gRenderBackgrounds
-    function isGStep (): Boolean; inline; // gSteps
-    function isGWall (): Boolean; inline; // gWalls
-    function isGAcid1 (): Boolean; inline; // gAcid1
-    function isGAcid2 (): Boolean; inline; // gAcid2
-    function isGWater (): Boolean; inline; // gWater
-    function isGFore (): Boolean; inline; // gRenderForegrounds
-    function isGLift (): Boolean; inline; // gLifts
-    function isGBlockMon (): Boolean; inline; // gBlockMon
-
+    function getIsGBack (): Boolean; inline; // gRenderBackgrounds
+    function getIsGStep (): Boolean; inline; // gSteps
+    function getIsGWall (): Boolean; inline; // gWalls
+    function getIsGAcid1 (): Boolean; inline; // gAcid1
+    function getIsGAcid2 (): Boolean; inline; // gAcid2
+    function getIsGWater (): Boolean; inline; // gWater
+    function getIsGFore (): Boolean; inline; // gRenderForegrounds
+    function getIsGLift (): Boolean; inline; // gLifts
+    function getIsGBlockMon (): Boolean; inline; // gBlockMon
 
   public
     property visvalid: Boolean read getvisvalid; // panel is "visvalid" when it's width and height are positive
@@ -127,8 +141,24 @@ type
     property liftType: Byte read FLiftType write FLiftType; // Ñîõðàíÿòü ïðè SaveState?
     property lastAnimLoop: Byte read FLastAnimLoop write FLastAnimLoop; // Ñîõðàíÿòü ïðè SaveState?
 
+    property movingSpeedX: Integer read getMovingSpeedX write setMovingSpeedX;
+    property movingSpeedY: Integer read getMovingSpeedY write setMovingSpeedY;
+    property movingStartX: Integer read getMovingStartX write setMovingStartX;
+    property movingStartY: Integer read getMovingStartY write setMovingStartY;
+    property movingEndX: Integer read getMovingEndX write setMovingEndX;
+    property movingEndY: Integer read getMovingEndY write setMovingEndY;
     property movingActive: Boolean read mMovingActive write mMovingActive;
 
+    property isGBack: Boolean read getIsGBack;
+    property isGStep: Boolean read getIsGStep;
+    property isGWall: Boolean read getIsGWall;
+    property isGAcid1: Boolean read getIsGAcid1;
+    property isGAcid2: Boolean read getIsGAcid2;
+    property isGWater: Boolean read getIsGWater;
+    property isGFore: Boolean read getIsGFore;
+    property isGLift: Boolean read getIsGLift;
+    property isGBlockMon: Boolean read getIsGBlockMon;
+
   public
     property movingSpeed: TDFPoint read mMovingSpeed write mMovingSpeed;
     property movingStart: TDFPoint read mMovingStart write mMovingStart;
@@ -318,15 +348,30 @@ 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;
 
-function TPanel.isGBack (): Boolean; inline; begin result := ((tag and GridTagBack) <> 0); end;
-function TPanel.isGStep (): Boolean; inline; begin result := ((tag and GridTagStep) <> 0); end;
-function TPanel.isGWall (): Boolean; inline; begin result := ((tag and (GridTagWall or GridTagDoor)) <> 0); end;
-function TPanel.isGAcid1 (): Boolean; inline; begin result := ((tag and GridTagAcid1) <> 0); end;
-function TPanel.isGAcid2 (): Boolean; inline; begin result := ((tag and GridTagAcid2) <> 0); end;
-function TPanel.isGWater (): Boolean; inline; begin result := ((tag and GridTagWater) <> 0); end;
-function TPanel.isGFore (): Boolean; inline; begin result := ((tag and GridTagFore) <> 0); end;
-function TPanel.isGLift (): Boolean; inline; begin result := ((tag and GridTagLift) <> 0); end;
-function TPanel.isGBlockMon (): Boolean; inline; begin result := ((tag and GridTagBlockMon) <> 0); end;
+function TPanel.getMovingSpeedX (): Integer; inline; begin result := mMovingSpeed.X; end;
+procedure TPanel.setMovingSpeedX (v: Integer); inline; begin mMovingSpeed.X := v; end;
+function TPanel.getMovingSpeedY (): Integer; inline; begin result := mMovingSpeed.Y; end;
+procedure TPanel.setMovingSpeedY (v: Integer); inline; begin mMovingSpeed.Y := v; end;
+
+function TPanel.getMovingStartX (): Integer; inline; begin result := mMovingStart.X; end;
+procedure TPanel.setMovingStartX (v: Integer); inline; begin mMovingStart.X := v; end;
+function TPanel.getMovingStartY (): Integer; inline; begin result := mMovingStart.Y; end;
+procedure TPanel.setMovingStartY (v: Integer); inline; begin mMovingStart.Y := v; end;
+
+function TPanel.getMovingEndX (): Integer; inline; begin result := mMovingEnd.X; end;
+procedure TPanel.setMovingEndX (v: Integer); inline; begin mMovingEnd.X := v; end;
+function TPanel.getMovingEndY (): Integer; inline; begin result := mMovingEnd.Y; end;
+procedure TPanel.setMovingEndY (v: Integer); inline; begin mMovingEnd.Y := v; end;
+
+function TPanel.getIsGBack (): Boolean; inline; begin result := ((tag and GridTagBack) <> 0); end;
+function TPanel.getIsGStep (): Boolean; inline; begin result := ((tag and GridTagStep) <> 0); end;
+function TPanel.getIsGWall (): Boolean; inline; begin result := ((tag and (GridTagWall or GridTagDoor)) <> 0); end;
+function TPanel.getIsGAcid1 (): Boolean; inline; begin result := ((tag and GridTagAcid1) <> 0); end;
+function TPanel.getIsGAcid2 (): Boolean; inline; begin result := ((tag and GridTagAcid2) <> 0); end;
+function TPanel.getIsGWater (): Boolean; inline; begin result := ((tag and GridTagWater) <> 0); end;
+function TPanel.getIsGFore (): Boolean; inline; begin result := ((tag and GridTagFore) <> 0); end;
+function TPanel.getIsGLift (): Boolean; inline; begin result := ((tag and GridTagLift) <> 0); end;
+function TPanel.getIsGBlockMon (): Boolean; inline; begin result := ((tag and GridTagBlockMon) <> 0); end;
 
 procedure TPanel.Draw();
 var
@@ -489,8 +534,9 @@ var
   function monMove (mon: TMonster): Boolean;
   begin
     result := false; // don't stop
-    mon.GameX := mon.GameX+mMovingSpeed.X;
-    mon.GameY := mon.GameY+mMovingSpeed.Y;
+    //mon.GameX := mon.GameX+mMovingSpeed.X;
+    //mon.GameY := mon.GameY+mMovingSpeed.Y;
+    mon.setPosition(mon.GameX+mMovingSpeed.X, mon.GameY+mMovingSpeed.Y, false); // we can't call `positionChanged()` in grid callback
     if (monMoveListUsed >= Length(monMoveList)) then SetLength(monMoveList, monMoveListUsed+64);
     monMoveList[monMoveListUsed] := mon;
     Inc(monMoveListUsed);
@@ -504,8 +550,9 @@ var
     mon.getMapBox(px, py, pw, ph);
     if doPush(px, py, pw, ph, dx, dy) then
     begin
-      mon.GameX := mon.GameX+dx;
-      mon.GameY := mon.GameY+dy;
+      //mon.GameX := mon.GameX+dx;
+      //mon.GameY := mon.GameY+dy;
+      mon.setPosition(mon.GameX+dx, mon.GameY+dy, false); // we can't call `positionChanged()` in grid callback
       if (monMoveListUsed >= Length(monMoveList)) then SetLength(monMoveList, monMoveListUsed+64);
       monMoveList[monMoveListUsed] := mon;
       Inc(monMoveListUsed);