diff -r 2aed85310727 -r c75410fe3133 hedgewars/uMisc.pas --- a/hedgewars/uMisc.pas Fri Jan 26 22:36:21 2007 +0000 +++ b/hedgewars/uMisc.pas Sat Jan 27 14:06:29 2007 +0000 @@ -92,8 +92,8 @@ procedure SDLTry(Assert: boolean; isFatal: boolean); function IntToStr(n: LongInt): shortstring; function FloatToStr(n: hwFloat): shortstring; -function DxDy2Angle32(const _dY, _dX: Extended): integer; -function DxDy2AttackAngle(const _dY, _dX: Extended): integer; +function DxDy2Angle32(const _dY, _dX: hwFloat): integer; +function DxDy2AttackAngle(const _dY, _dX: hwFloat): integer; procedure AdjustColor(var Color: Longword); {$IFDEF DEBUGFILE} procedure AddFileLog(s: shortstring); @@ -177,16 +177,26 @@ end; {$ENDIF} -function DxDy2Angle32(const _dY, _dX: Extended): integer; +function DxDy2Angle32(const _dY, _dX: hwFloat): integer; const _16divPI: Extended = 16/pi; +var dY, dX: Extended; begin -DxDy2Angle32:= trunc(arctan2(_dY, _dX) * _16divPI) and $1f +dY:= _dY.QWordValue / $100000000; +if _dY.isNegative then dY:= - dY; +dX:= _dX.QWordValue / $100000000; +if _dX.isNegative then dX:= - dX; +DxDy2Angle32:= trunc(arctan2(dY, dX) * _16divPI) and $1f end; -function DxDy2AttackAngle(const _dY, _dX: Extended): integer; +function DxDy2AttackAngle(const _dY, _dX: hwFloat): integer; const MaxAngleDivPI: Extended = cMaxAngle/pi; +var dY, dX: Extended; begin -DxDy2AttackAngle:= trunc(arctan2(_dY, _dX) * MaxAngleDivPI) mod cMaxAngle +dY:= _dY.QWordValue / $100000000; +if _dY.isNegative then dY:= - dY; +dX:= _dX.QWordValue / $100000000; +if _dX.isNegative then dX:= - dX; +DxDy2AttackAngle:= trunc(arctan2(dY, dX) * MaxAngleDivPI) mod cMaxAngle end; procedure SetKB(n: Longword);