diff --git a/OpenRA.Game/Traits/World/ScreenShaker.cs b/OpenRA.Game/Traits/World/ScreenShaker.cs index e253cb93d3..58e5f50a6e 100644 --- a/OpenRA.Game/Traits/World/ScreenShaker.cs +++ b/OpenRA.Game/Traits/World/ScreenShaker.cs @@ -15,14 +15,26 @@ using OpenRA.Graphics; namespace OpenRA.Traits { - public class ScreenShakerInfo : TraitInfo { } + public class ScreenShakerInfo : ITraitInfo + { + public readonly float2 MinMultiplier = new float2(-3, -3); + public readonly float2 MaxMultiplier = new float2(3, 3); + + public object Create(ActorInitializer init) { return new ScreenShaker(this); } + } public class ScreenShaker : ITick, IWorldLoaded { + readonly ScreenShakerInfo info; WorldRenderer worldRenderer; List shakeEffects = new List(); int ticks = 0; + public ScreenShaker(ScreenShakerInfo info) + { + this.info = info; + } + public void WorldLoaded(World w, WorldRenderer wr) { worldRenderer = wr; } public void Tick(Actor self) @@ -55,7 +67,8 @@ namespace OpenRA.Traits float2 GetMultiplier() { - return shakeEffects.Aggregate(float2.Zero, (sum, next) => sum + next.Multiplier); + return shakeEffects.Aggregate(float2.Zero, (sum, next) => sum + next.Multiplier) + .Constrain(info.MinMultiplier, info.MaxMultiplier); } float GetIntensity() diff --git a/mods/ra/rules/civilian.yaml b/mods/ra/rules/civilian.yaml index f4de5a7020..74dbbddb46 100644 --- a/mods/ra/rules/civilian.yaml +++ b/mods/ra/rules/civilian.yaml @@ -258,6 +258,8 @@ BARL: Type: None TargetableBuilding: TargetTypes: Ground, DemoTruck + -ShakeOnDeath: + -SoundOnDamageTransition: BRL3: Inherits: ^TechBuilding @@ -274,6 +276,8 @@ BRL3: Type: None TargetableBuilding: TargetTypes: Ground, DemoTruck + -ShakeOnDeath: + -SoundOnDamageTransition: AMMOBOX1: Inherits: ^AmmoBox