# HG changeset patch # User unc0rr # Date 1426708649 -10800 # Node ID d7e3abe3d5c2b5bca3158122fbcbe212ef66ecc9 # Parent bd281e854e02c284db9eb7a059fd15c04e3ba566 Only allow one instance of vgtSmoothWindbar also diff -r bd281e854e02 -r d7e3abe3d5c2 hedgewars/uVisualGearsHandlers.pas --- a/hedgewars/uVisualGearsHandlers.pas Tue Mar 17 23:57:26 2015 +0300 +++ b/hedgewars/uVisualGearsHandlers.pas Wed Mar 18 22:57:29 2015 +0300 @@ -873,31 +873,47 @@ end; //////////////////////////////////////////////////////////////////////////////// +var + currwindbar: PVisualGear = nil; + +procedure doStepSmoothWindBarWork(Gear: PVisualGear; Steps: Longword); +begin + if currwindbar = Gear then + 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; + 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; + end; + + if ((WindBarWidth = Gear^.Tag) and (cWindspeedf = Gear^.dAngle)) or (currwindbar <> Gear) then + begin + if currwindbar = Gear then currwindbar:= nil; + DeleteVisualGear(Gear) + end +end; + procedure doStepSmoothWindBar(Gear: PVisualGear; Steps: Longword); 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; -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) and (cWindspeedf = Gear^.dAngle) then - DeleteVisualGear(Gear) + currwindbar:= Gear; + Gear^.doStep:= @doStepSmoothWindBarWork; + doStepSmoothWindBarWork(Gear, Steps) end; //////////////////////////////////////////////////////////////////////////////// procedure doStepStraightShot(Gear: PVisualGear; Steps: Longword);