From 66d9ad247935e99fe7161849b71ed952cbb85508 Mon Sep 17 00:00:00 2001 From: Ketmar Dark Date: Sun, 3 Sep 2017 02:26:00 +0300 Subject: [PATCH] some accessors to publish more properties --- src/game/g_monsters.pas | 19 +++++++-- src/game/g_netmsg.pas | 17 ++++---- src/game/g_panel.pas | 93 +++++++++++++++++++++++++++++++---------- 3 files changed, 94 insertions(+), 35 deletions(-) diff --git a/src/game/g_monsters.pas b/src/game/g_monsters.pas index ae4389c..a437ff9 100644 --- a/src/game/g_monsters.pas +++ b/src/game/g_monsters.pas @@ -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; diff --git a/src/game/g_netmsg.pas b/src/game/g_netmsg.pas index 53ab6a5..33d1652 100644 --- a/src/game/g_netmsg.pas +++ b/src/game/g_netmsg.pas @@ -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; diff --git a/src/game/g_panel.pas b/src/game/g_panel.pas index 94e7b87..d104593 100644 --- a/src/game/g_panel.pas +++ b/src/game/g_panel.pas @@ -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); -- 2.29.2