# HG changeset patch # User nemo # Date 1335117533 14400 # Node ID 73984ea24ff5a1ee2f4add41f3fdcc0b05827ce9 # Parent 831416764d2dd25960db8303a98fe70c61d57472 Make clouds/flakes change direction smoothly diff -r 831416764d2d -r 73984ea24ff5 hedgewars/VGSHandlers.inc --- a/hedgewars/VGSHandlers.inc Sun Apr 22 21:23:32 2012 +0400 +++ b/hedgewars/VGSHandlers.inc Sun Apr 22 13:58:53 2012 -0400 @@ -728,16 +728,26 @@ begin inc(Gear^.Timer, Steps); - while Gear^.Timer >= 10 do - begin - dec(Gear^.Timer, 10); - if WindBarWidth < Gear^.Tag then - inc(WindBarWidth) - else if WindBarWidth > Gear^.Tag then - dec(WindBarWidth); - end; +while Gear^.Timer >= 10 do + begin + dec(Gear^.Timer, 10); + if WindBarWidth < Gear^.Tag then + inc(WindBarWidth) + else if WindBarWidth > Gear^.Tag then + dec(WindBarWidth); + end; +if cWindspeedf > Gear^.dAngle then + begin + cWindspeedf := cWindspeedf - Gear^.Angle*Steps; + if cWindspeedf < Gear^.dAngle then cWindspeedf:= Gear^.dAngle; + end +else if cWindspeedf < Gear^.dAngle then + begin + cWindspeedf := cWindspeedf + Gear^.Angle*Steps; + if cWindspeedf > Gear^.dAngle then cWindspeedf:= Gear^.dAngle; + end; -if WindBarWidth = Gear^.Tag then +if (WindBarWidth = Gear^.Tag) and (cWindspeedf = Gear^.dAngle) then DeleteVisualGear(Gear) end; //////////////////////////////////////////////////////////////////////////////// diff -r 831416764d2d -r 73984ea24ff5 hedgewars/uTeams.pas --- a/hedgewars/uTeams.pas Sun Apr 22 21:23:32 2012 +0400 +++ b/hedgewars/uTeams.pas Sun Apr 22 13:58:53 2012 -0400 @@ -205,6 +205,8 @@ procedure AfterSwitchHedgehog; var i, t: LongInt; CurWeapon: PAmmo; + w: real; + vg: PVisualGear; begin if PlacingHogs then @@ -249,12 +251,9 @@ if (GameFlags and gfDisableWind) = 0 then begin cWindSpeed:= rndSign(GetRandom * 2 * cMaxWindSpeed); - // cWindSpeedf:= cWindSpeed.QWordValue / _1.QWordValue throws 'Internal error 200502052' on Darwin - // see http://mantis.freepascal.org/view.php?id=17714 - cWindSpeedf:= SignAs(cWindSpeed,cWindSpeed).QWordValue / SignAs(_1,_1).QWordValue; - if cWindSpeed.isNegative then - CWindSpeedf := -cWindSpeedf; - AddVisualGear(0, 0, vgtSmoothWindBar); + w:= hwFloat2Float(cWindSpeed); + vg:= AddVisualGear(0, 0, vgtSmoothWindBar); + if vg <> nil then vg^.dAngle:= w; AddFileLog('Wind = '+FloatToStr(cWindSpeed)); end; diff -r 831416764d2d -r 73984ea24ff5 hedgewars/uVisualGears.pas --- a/hedgewars/uVisualGears.pas Sun Apr 22 21:23:32 2012 +0400 +++ b/hedgewars/uVisualGears.pas Sun Apr 22 13:58:53 2012 -0400 @@ -365,7 +365,11 @@ Frame:= 7; Angle:= 0; end; -vgtSmoothWindBar: Tag:= hwRound(cWindSpeed * 72 / cMaxWindSpeed); +vgtSmoothWindBar: + begin + Angle:= hwFloat2Float(cMaxWindSpeed)*2 / 1440; // seems rate below is supposed to change wind bar at 1px per 10ms. Max time, 1440ms. This tries to match the rate of change + Tag:= hwRound(cWindSpeed * 72 / cMaxWindSpeed); + end; vgtStraightShot: begin Angle:= 0;