From d74c54d9f706fa1df133ad52c67955a6f65b0077 Mon Sep 17 00:00:00 2001 From: ScottNZ Date: Sun, 27 Oct 2013 20:38:43 +1300 Subject: [PATCH] Add shake multiplier value to ScreenShaker --- OpenRA.Game/Traits/World/ScreenShaker.cs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/OpenRA.Game/Traits/World/ScreenShaker.cs b/OpenRA.Game/Traits/World/ScreenShaker.cs index 5feca96cf9..e253cb93d3 100644 --- a/OpenRA.Game/Traits/World/ScreenShaker.cs +++ b/OpenRA.Game/Traits/World/ScreenShaker.cs @@ -38,16 +38,26 @@ namespace OpenRA.Traits public void AddEffect(int time, WPos position, int intensity) { - shakeEffects.Add(new ShakeEffect { ExpiryTime = ticks + time, Position = position, Intensity = intensity }); + AddEffect(time, position, intensity, new float2(1, 1)); + } + + public void AddEffect(int time, WPos position, int intensity, float2 multiplier) + { + shakeEffects.Add(new ShakeEffect { ExpiryTime = ticks + time, Position = position, Intensity = intensity, Multiplier = multiplier }); } float2 GetScrollOffset() { - return GetIntensity() * new float2( + return GetMultiplier() * GetIntensity() * new float2( (float)Math.Sin((ticks * 2 * Math.PI) / 4), (float)Math.Cos((ticks * 2 * Math.PI) / 5)); } + float2 GetMultiplier() + { + return shakeEffects.Aggregate(float2.Zero, (sum, next) => sum + next.Multiplier); + } + float GetIntensity() { var cp = worldRenderer.Position(worldRenderer.Viewport.CenterLocation); @@ -63,5 +73,6 @@ namespace OpenRA.Traits public int ExpiryTime; public WPos Position; public int Intensity; + public float2 Multiplier; } }