Merge
authorunc0rr
Fri, 07 Feb 2014 00:47:51 +0400
changeset 10115 794af9339726
parent 10113 b26c2772e754 (current diff)
parent 10114 68a72af636c3 (diff)
child 10116 dd27562b6f21
Merge
--- a/hedgewars/uFloat.pas	Fri Feb 07 00:46:49 2014 +0400
+++ b/hedgewars/uFloat.pas	Fri Feb 07 00:47:51 2014 +0400
@@ -84,7 +84,6 @@
 function hwRound(const t: hwFloat): LongInt; inline; // Does NOT really round but returns the integer representation of the hwFloat without fractional digits. (-_0_9 -> -0, _1_5 -> _1)
 function hwAbs(const t: hwFloat): hwFloat; inline; // Returns the value of t with positive sign.
 function hwSqr(const t: hwFloat): hwFloat; inline; // Returns the square value of parameter t.
-function hwPow(const t: hwFloat; p: LongWord): hwFloat; inline; // Returns the power of the value
 function hwSqrt1(const t: hwFloat): hwFloat; inline; // Returns the the positive square root of parameter t.
 function hwSqrt(const x: hwFloat): hwFloat; inline; // Returns the the positive square root of parameter t.
 function Distance(const dx, dy: hwFloat): hwFloat; // Returns the distance between two points in 2-dimensional space, of which the parameters are the horizontal and vertical distance.
@@ -369,18 +368,6 @@
     hwSqr.QWordValue:= ((QWord(t.Round) * t.Round) shl 32) + QWord(t.Round) * t.Frac * 2 + ((QWord(t.Frac) * t.Frac) shr 32);
 end;
 
-function hwPow(const t: hwFloat;p: LongWord): hwFloat;
-begin
-    hwPow:= t;
-    if p mod 2 = 0 then hwPow.isNegative:= false;
-
-    while p > 0 do
-        begin
-        hwPow.QWordValue:= QWord(hwPow.Round) * t.Frac + QWord(hwPow.Frac) * t.Round + ((QWord(hwPow.Frac) * t.Frac) shr 32);
-        dec(p)
-        end
-end;
-
 function hwSqrt1(const t: hwFloat): hwFloat;
 const pwr = 8; // even value, feel free to adjust
       rThreshold = 1 shl (pwr + 32);
--- a/hedgewars/uGearsHandlersMess.pas	Fri Feb 07 00:46:49 2014 +0400
+++ b/hedgewars/uGearsHandlersMess.pas	Fri Feb 07 00:47:51 2014 +0400
@@ -3323,15 +3323,15 @@
 begin
     if WorldWrap(Gear) then
         begin
-            if (WorldEdge = weBounce) then // mirror
-                Gear^.Angle:= 4096 - Gear^.Angle
-            else if (WorldEdge = weSea) then // rotate 90 degree
-                begin
-                // sea-wrapped gears move upwards, so let's mirror angle if needed
-                if Gear^.Angle < 2048 then
-                    Gear^.Angle:= 4096 - Gear^.Angle;
-                Gear^.Angle:= (Gear^.Angle + 1024) mod 4096;
-                end;
+        if (WorldEdge = weBounce) then // mirror
+            Gear^.Angle:= 4096 - Gear^.Angle
+        else if (WorldEdge = weSea) then // rotate 90 degree
+            begin
+            // sea-wrapped gears move upwards, so let's mirror angle if needed
+            if Gear^.Angle < 2048 then
+                Gear^.Angle:= 4096 - Gear^.Angle;
+            Gear^.Angle:= (Gear^.Angle + 1024) mod 4096;
+            end;
         end;
     AllInactive := false;
 
@@ -4171,21 +4171,7 @@
         // is it worth adding an arcsin table?  Just how often would we end up doing something like this?
         // SYNCED ANGLE UPDATE
         if iterator^.Kind = gtRCPlane then
-            begin
-            // recycling as temp vars
-            resety.isNegative:= false;
-            resety.QWordValue:= 4294967296 * 112;
-            resetx.isNegative:= false;
-            resetx.QWordValue:= 4294967296 * 35;
-            resetdx.isNegative:= false;
-            resetdx.QWordValue:= 4294967296 * 1152;
-
-            resetdy:=hwAbs(iterator^.dX*4);
-            resetdy:= resetdy + hwPow(resetdy,3)/_6 + _3 * hwPow(resetdy,5) / _40 + _5 * hwPow(resetdy,7) / resety + resetx * hwPow(resetdy,9) / resetdx;
-            iterator^.Angle:= hwRound(resetdy*_2048 / _PI);
-            if not iterator^.dY.isNegative then iterator^.Angle:= 2048-iterator^.Angle;
-            if iterator^.dX.isNegative then iterator^.Angle:= 4096-iterator^.Angle;
-            end
+            iterator^.Angle:= (1024 + vector2Angle(iterator^.dX, iterator^.dY) mod 4096)
         // VISUAL USE OF ANGLE ONLY
         else if (CurAmmoGear <> nil) and (CurAmmoGear^.Kind = gtKamikaze) and (CurAmmoGear^.Hedgehog = iterator^.Hedgehog) then
             begin