# HG changeset patch # User alfadur # Date 1593189316 -10800 # Node ID 8416b08ffdbb7119dd0145397d424c2a0b96ed6a # Parent afeffdb4a712a3626d3d4a05cc9031d47c95a2ca add sentry walking cycle diff -r afeffdb4a712 -r 8416b08ffdbb hedgewars/uGearsHandlersMess.pas --- a/hedgewars/uGearsHandlersMess.pas Fri Jun 26 17:40:22 2020 +0300 +++ b/hedgewars/uGearsHandlersMess.pas Fri Jun 26 19:35:16 2020 +0300 @@ -544,7 +544,7 @@ // while a gear is moving, this can be rather confusing. // TODO: Find a way to make gfMoreWind-affected land objects settle more reliably // and quickler without touching wind itselvs - ((not (Gear^.Kind in [gtMine, gtAirMine, gtSMine, gtKnife, gtExplosives])) or (TimeNotInTurn < MaxMoreWindTime)) then + ((not (Gear^.Kind in [gtMine, gtAirMine, gtSMine, gtKnife, gtExplosives, gtSentry])) or (TimeNotInTurn < MaxMoreWindTime)) then Gear^.dX := Gear^.dX + cWindSpeed / Gear^.Density end; @@ -7174,8 +7174,44 @@ //////////////////////////////////////////////////////////////////////////////// procedure doStepSentry(Gear: PGear); begin - CheckGearDrowning(Gear); - doStepFallingGear(Gear); + if CheckGearDrowning(Gear) then + exit; + + if (TestCollisionYKick(Gear, 1) = 0) then + begin + doStepFallingGear(Gear); + exit; + end; + + if (Gear^.Timer > 0) then + dec(Gear^.Timer); + + if (Gear^.Timer = 0) then + begin + if Gear^.Tag <> 0 then + begin + Gear^.Tag := 0; + Gear^.Timer := 1000 + GetRandom(1000); + end + else + begin + Gear^.Tag := GetRandom(2) * 2 - 1; + Gear^.Timer := 1000 + GetRandom(3000); + Gear^.dX.isNegative := Gear^.Tag < 0; + if TestCollisionX(Gear, 1) <> 0 then + begin + Gear^.Tag := not Gear^.Tag; + Gear^.dX.isNegative := not Gear^.dX.isNegative; + end + end + end; + + if (Gear^.Tag <> 0) and ((GameTicks and $1F) = 0) then + begin + MakeHedgehogsStep(Gear); + if TestCollisionX(Gear, 1) <> 0 then + Gear^.Timer := 0 + end; end; end. diff -r afeffdb4a712 -r 8416b08ffdbb hedgewars/uGearsList.pas --- a/hedgewars/uGearsList.pas Fri Jun 26 17:40:22 2020 +0300 +++ b/hedgewars/uGearsList.pas Fri Jun 26 19:35:16 2020 +0300 @@ -835,6 +835,10 @@ gtSentry: begin gear^.Radius:= cHHRadius; gear^.Health:= 100; + gear^.Friction:= _0_93; + gear^.Elasticity:= _0_5; + gear^.Tag:= 0; + gear^.Timer:= 500; end; gtGenericFaller:begin gear^.AdvBounce:= 1; diff -r afeffdb4a712 -r 8416b08ffdbb hedgewars/uGearsRender.pas --- a/hedgewars/uGearsRender.pas Fri Jun 26 17:40:22 2020 +0300 +++ b/hedgewars/uGearsRender.pas Fri Jun 26 19:35:16 2020 +0300 @@ -1743,7 +1743,10 @@ gtCreeper: if (Gear^.Hedgehog <> nil) and (Gear^.Hedgehog^.Gear <> nil) then DrawSpriteRotatedF(sprCreeper, x, y, 1, hwRound(SignAs(_1,Gear^.Hedgehog^.Gear^.X-Gear^.X)), 0) else DrawSpriteRotatedF(sprCreeper, x, y, 1, hwRound(SignAs(_1,Gear^.dX)), 0); - gtSentry: DrawSprite(sprSentry, x, y, 0, 0); + gtSentry: begin + DrawSprite(sprSentry, x - 16, y - 16, 0, 0); + DrawCircle(x, y, Gear^.Radius, 1, 255, 0, 0, 255); + end; gtGenericFaller: begin // DEBUG: draw gtGenericFaller if Gear^.Tag <> 0 then