diff --git a/OpenRA.Game/OpenRA.Game.csproj b/OpenRA.Game/OpenRA.Game.csproj index 67a316fd7d..3a894ecdb8 100755 --- a/OpenRA.Game/OpenRA.Game.csproj +++ b/OpenRA.Game/OpenRA.Game.csproj @@ -83,6 +83,7 @@ + diff --git a/OpenRA.Game/Traits/Modifiers/FrozenUnderFog.cs b/OpenRA.Game/Traits/Modifiers/FrozenUnderFog.cs new file mode 100644 index 0000000000..3a7fb5a297 --- /dev/null +++ b/OpenRA.Game/Traits/Modifiers/FrozenUnderFog.cs @@ -0,0 +1,57 @@ +#region Copyright & License Information +/* + * Copyright 2007,2009,2010 Chris Forbes, Robert Pepperell, Matthew Bowra-Dean, Paul Chote, Alli Witheford. + * This file is part of OpenRA. + * + * OpenRA is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenRA is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenRA. If not, see . + */ +#endregion + +using System.Collections.Generic; +using System.Linq; + +namespace OpenRA.Traits +{ + class FrozenUnderFogInfo : ITraitInfo + { + public object Create(ActorInitializer init) { return new FrozenUnderFog(init.self); } + } + + class FrozenUnderFog : IRenderModifier + { + Shroud shroud; + Renderable[] cache = { }; + + public FrozenUnderFog(Actor self) + { + shroud = self.World.WorldActor.traits.Get(); + } + + bool IsVisible(Actor self) + { + return self.World.LocalPlayer == null + || self.Owner == self.World.LocalPlayer + || self.World.LocalPlayer.Shroud.Disabled + || Shroud.GetVisOrigins(self).Any(o => self.World.Map.IsInMap(o) && shroud.visibleCells[o.X, o.Y] != 0); + } + + public IEnumerable ModifyRender(Actor self, IEnumerable r) + { + if (IsVisible(self)) + cache = r.ToArray(); + + return r; + } + } +} diff --git a/mods/ra/defaults.yaml b/mods/ra/defaults.yaml index 310595fc12..8b2c06c129 100644 --- a/mods/ra/defaults.yaml +++ b/mods/ra/defaults.yaml @@ -65,6 +65,7 @@ ActorTypes: e1,e1,e1,c1,c2,e6 MustBeDestroyed: GivesExperience: + FrozenUnderFog: ^Wall: Category: Building