hedgewars/uGearsHandlersMess.pas
changeset 10110 a7aed2eea727
parent 10108 c68cf030eded
child 10112 275ad81e4718
equal deleted inserted replaced
10109:91d126fbd7bd 10110:a7aed2eea727
  3314 
  3314 
  3315 const cAngleSpeed =   3;
  3315 const cAngleSpeed =   3;
  3316 var
  3316 var
  3317     HHGear: PGear;
  3317     HHGear: PGear;
  3318     i: LongInt;
  3318     i: LongInt;
  3319     dX, dY, X, Y : hwFloat;
  3319     dX, dY : hwFloat;
  3320     fChanged: boolean;
  3320     fChanged: boolean;
  3321     trueAngle: Longword;
  3321     trueAngle: Longword;
  3322     t: PGear;
  3322     t: PGear;
  3323 begin
  3323 begin
  3324     if WorldWrap(Gear) and (WorldEdge <> weWrap) then
  3324     if WorldWrap(Gear) then
  3325         begin
  3325         begin
  3326         Y.isNegative:= false;
  3326             if (WorldEdge = weBounce) then // mirror
  3327         Y.QWordValue:= 4294967296 * 112;
  3327                 Gear^.Angle:= 4096 - Gear^.Angle
  3328         X.isNegative:= false;
  3328             else if (WorldEdge = weSea) then // rotate 90 degree
  3329         X.QWordValue:= 4294967296 * 35;
  3329                 begin
  3330         dX.isNegative:= false;
  3330                 // sea-wrapped gears move upwards, so let's mirror angle if needed
  3331         dX.QWordValue:= 4294967296 * 1152;
  3331                 if Gear^.Angle < 2048 then
  3332 
  3332                     Gear^.Angle:= 4096 - Gear^.Angle;
  3333         dY:=hwAbs(Gear^.dX*4);
  3333                 Gear^.Angle:= (Gear^.Angle + 1024) mod 4096;
  3334         dY:= dY + hwPow(dY,3)/_6 + _3 * hwPow(dY,5) / _40 + _5 * hwPow(dY,7) / Y + X * hwPow(dY,9) / dX;
  3334                 end;
  3335         Gear^.Angle:= hwRound(dY*_2048 / _PI);
       
  3336         if not Gear^.dY.isNegative then Gear^.Angle:= 2048-Gear^.Angle;
       
  3337         if Gear^.dX.isNegative then Gear^.Angle:= 4096-Gear^.Angle;
       
  3338         end;
  3335         end;
  3339     AllInactive := false;
  3336     AllInactive := false;
  3340 
  3337 
  3341     HHGear := Gear^.Hedgehog^.Gear;
  3338     HHGear := Gear^.Hedgehog^.Gear;
  3342     FollowGear := Gear;
  3339     FollowGear := Gear;