# HG changeset patch # User Wuzzy # Date 1533563763 -7200 # Node ID 13f68f3e715398771932e25e8988ae2ea5eae146 # Parent 92b87845beeb6abd1be476f60f6a1e8630ec090d Add bounce effect to cake when it touches bounce edge diff -r 92b87845beeb -r 13f68f3e7153 hedgewars/uGearsHandlersMess.pas --- a/hedgewars/uGearsHandlersMess.pas Mon Aug 06 15:20:25 2018 +0200 +++ b/hedgewars/uGearsHandlersMess.pas Mon Aug 06 15:56:03 2018 +0200 @@ -3568,6 +3568,10 @@ Gear^.Angle := (LongInt(Gear^.Angle) + 2) and 3; Gear^.Karma := 0; + // Bounce effect + if (Gear^.Radius > 2) then + AddBounceEffectForGear(Gear, 0.55); + // Reset CakePoints to fix cake angle cakeData:= PCakeData(Gear^.Data); with cakeData^ do diff -r 92b87845beeb -r 13f68f3e7153 hedgewars/uGearsUtils.pas --- a/hedgewars/uGearsUtils.pas Mon Aug 06 15:20:25 2018 +0200 +++ b/hedgewars/uGearsUtils.pas Mon Aug 06 15:56:03 2018 +0200 @@ -25,6 +25,7 @@ procedure doMakeExplosion(X, Y, Radius: LongInt; AttackingHog: PHedgehog; Mask: Longword); inline; procedure doMakeExplosion(X, Y, Radius: LongInt; AttackingHog: PHedgehog; Mask: Longword; const Tint: LongWord); procedure AddSplashForGear(Gear: PGear; justSkipping: boolean); +procedure AddBounceEffectForGear(Gear: PGear; imageScale: Single); procedure AddBounceEffectForGear(Gear: PGear); function ModifyDamage(dmg: Longword; Gear: PGear): Longword; @@ -1723,7 +1724,16 @@ end; end; + +// Add an audiovisual bounce effect for gear after it bounced from bouncy material. +// Graphical effect is based on speed. procedure AddBounceEffectForGear(Gear: PGear); +begin + AddBounceEffectForGear(Gear, hwFloat2Float(Gear^.Density * hwAbs(Gear^.dY) + hwAbs(Gear^.dX)) / 1.5); +end; + +// Same as above, but can specify the size of bounce image with imageScale manually. +procedure AddBounceEffectForGear(Gear: PGear; imageScale: Single); var boing: PVisualGear; begin if Gear^.Density < _0_01 then @@ -1736,7 +1746,7 @@ dx:= 0; dy:= 0; FrameTicks:= 200; - Scale:= hwFloat2Float(Gear^.Density * hwAbs(Gear^.dY) + hwAbs(Gear^.dX)) / 1.5; + Scale:= imageScale; State:= ord(sprBoing) end; if Gear^.Kind = gtDuck then