diff --git a/OpenRA.Game/Traits/World/ScreenShaker.cs b/OpenRA.Game/Traits/World/ScreenShaker.cs index d09b510a24..efd0aeffa5 100644 --- a/OpenRA.Game/Traits/World/ScreenShaker.cs +++ b/OpenRA.Game/Traits/World/ScreenShaker.cs @@ -14,47 +14,50 @@ using System.Linq; namespace OpenRA.Traits { - class ScreenShakerInfo : TraitInfo {} + public class ScreenShakerInfo : TraitInfo { } public class ScreenShaker : ITick { - int ticks = 0; List shakeEffects = new List(); + int ticks = 0; - public void Tick (Actor self) + public void Tick(Actor self) { - if(shakeEffects.Any()) + if (shakeEffects.Any()) { Game.viewport.Scroll(GetScrollOffset(), true); shakeEffects.RemoveAll(t => t.ExpiryTime == ticks); } + ticks++; } - public void AddEffect(int time, float2 position, int intensity) + public void AddEffect(int time, WPos position, int intensity) { shakeEffects.Add(new ShakeEffect { ExpiryTime = ticks + time, Position = position, Intensity = intensity }); } float2 GetScrollOffset() { - int xFreq = 4; - int yFreq = 5; - return GetIntensity() * new float2( - (float) Math.Sin((ticks*2*Math.PI)/xFreq) , - (float) Math.Cos((ticks*2*Math.PI)/yFreq)); + (float)Math.Sin((ticks * 2 * Math.PI) / 4), + (float)Math.Cos((ticks * 2 * Math.PI) / 5)); } float GetIntensity() { - var cp = Game.viewport.CenterLocation; - var intensity = Game.CellSize * Game.CellSize * 100 * shakeEffects.Sum( - e => e.Intensity / (e.Position - cp).LengthSquared); + var cp = ((PPos)Game.viewport.CenterLocation.ToInt2()).ToWPos(0); + var intensity = 100 * 1024 * 1024 * shakeEffects.Sum( + e => (float)e.Intensity / (e.Position - cp).LengthSquared); return Math.Min(intensity, 10); } } - class ShakeEffect { public int ExpiryTime; public float2 Position; public int Intensity; } + struct ShakeEffect + { + public int ExpiryTime; + public WPos Position; + public int Intensity; + } } diff --git a/OpenRA.Mods.RA/Buildings/ShakeOnDeath.cs b/OpenRA.Mods.RA/Buildings/ShakeOnDeath.cs index 8b6375a8ad..cef18fcc49 100644 --- a/OpenRA.Mods.RA/Buildings/ShakeOnDeath.cs +++ b/OpenRA.Mods.RA/Buildings/ShakeOnDeath.cs @@ -29,7 +29,7 @@ namespace OpenRA.Mods.RA.Buildings public void Killed(Actor self, AttackInfo e) { - self.World.WorldActor.Trait().AddEffect(Info.Intensity, self.CenterLocation.ToFloat2(), 1); + self.World.WorldActor.Trait().AddEffect(Info.Intensity, self.CenterPosition, 1); } } } diff --git a/OpenRA.Mods.RA/Effects/NukeLaunch.cs b/OpenRA.Mods.RA/Effects/NukeLaunch.cs index 746469297f..c1e13f642d 100755 --- a/OpenRA.Mods.RA/Effects/NukeLaunch.cs +++ b/OpenRA.Mods.RA/Effects/NukeLaunch.cs @@ -67,7 +67,7 @@ namespace OpenRA.Mods.RA.Effects { world.AddFrameEndTask(w => w.Remove(this)); Combat.DoExplosion(firedBy.PlayerActor, weapon, pos); - world.WorldActor.Trait().AddEffect(20, PPos.FromWPos(pos).ToFloat2(), 5); + world.WorldActor.Trait().AddEffect(20, pos, 5); foreach (var a in world.ActorsWithTrait()) a.Trait.Enable(); diff --git a/OpenRA.Mods.RA/Missions/Soviet01ClassicScript.cs b/OpenRA.Mods.RA/Missions/Soviet01ClassicScript.cs index d71aec8e2d..7971850508 100644 --- a/OpenRA.Mods.RA/Missions/Soviet01ClassicScript.cs +++ b/OpenRA.Mods.RA/Missions/Soviet01ClassicScript.cs @@ -129,7 +129,7 @@ namespace OpenRA.Mods.RA.Missions .OrderBy(a => (startJeep.CenterPosition - a.CenterPosition).LengthSquared) .First(); Combat.DoExplosion(bridge, "Demolish", bridge.CenterPosition); - world.WorldActor.Trait().AddEffect(15, bridge.CenterLocation.ToFloat2(), 6); + world.WorldActor.Trait().AddEffect(15, bridge.CenterPosition, 6); bridge.Kill(bridge); })); }