diff --git a/OpenRA.Game/Traits/Render/RenderBuildingWall.cs b/OpenRA.Game/Traits/Render/RenderBuildingWall.cs new file mode 100644 index 0000000000..856e1452b1 --- /dev/null +++ b/OpenRA.Game/Traits/Render/RenderBuildingWall.cs @@ -0,0 +1,89 @@ +#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.Linq; + +namespace OpenRa.Traits +{ + class RenderBuildingWallInfo : RenderBuildingInfo + { + public override object Create(Actor self) { return new RenderBuildingWall(self); } + } + + class RenderBuildingWall : RenderBuilding + { + string seqName; + Actor self; + + public RenderBuildingWall(Actor self) + : base(self) + { + seqName = "idle"; + this.self = self; + } + + public override void Damaged(Actor self, AttackInfo e) + { + if (!e.DamageStateChanged) return; + + switch (e.DamageState) + { + case DamageState.Normal: + seqName = "idle"; + break; + case DamageState.Half: + seqName = "damaged-idle"; + Sound.Play("kaboom1.aud"); + break; + } + } + + public override void Tick(Actor self) + { + base.Tick(self); + + // TODO: This only needs updating when a wall is built or destroyed + int index = NearbyWalls( self.Location ); + + anim.PlayFetchIndex(seqName, () => index); + + } + bool IsWall( int x, int y) + { + return self.World.Queries.WithTrait().Any(a => (a.Actor.Info.Name == self.Info.Name && a.Actor.Location.X == x && a.Actor.Location.Y == y)); + } + + int NearbyWalls( int2 xy ) + { + int ret = 0; + + if( IsWall( xy.X, xy.Y - 1 ) ) + ret |= 1; + if( IsWall( xy.X + 1, xy.Y ) ) + ret |= 2; + if( IsWall( xy.X, xy.Y + 1 ) ) + ret |= 4; + if( IsWall( xy.X - 1, xy.Y ) ) + ret |= 8; + return ret; + } + + } +} diff --git a/OpenRa.Game/OpenRa.Game.csproj b/OpenRa.Game/OpenRa.Game.csproj index 1e887ff951..892f8ab787 100644 --- a/OpenRa.Game/OpenRa.Game.csproj +++ b/OpenRa.Game/OpenRa.Game.csproj @@ -1,4 +1,4 @@ - + Debug @@ -263,6 +263,8 @@ + + diff --git a/OpenRa.Game/Traits/Wall.cs b/OpenRa.Game/Traits/Wall.cs new file mode 100644 index 0000000000..ec94fb0700 --- /dev/null +++ b/OpenRa.Game/Traits/Wall.cs @@ -0,0 +1,32 @@ +#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; +using System.Collections.Generic; +using System.Linq; +using OpenRa.Effects; +using OpenRa.GameRules; +using OpenRa.Traits.Activities; + +namespace OpenRa.Traits +{ + public class WallInfo : StatelessTraitInfo {} + public class Wall {} +} diff --git a/mods/ra/rules.yaml b/mods/ra/rules.yaml index 81a0e3fe26..b1ea843c2f 100644 --- a/mods/ra/rules.yaml +++ b/mods/ra/rules.yaml @@ -2499,17 +2499,18 @@ BRIK: Buildable: TechLevel: 8 Prerequisites: fact - Owner: soviet + Owner: allies,soviet Cost: 100 Description: Concrete Wall LongDesc: Its a wall. Building: Power: 0 - Footprint: x - Dimensions: 1,1 Capturable: false Bib: no HP: 1 Armor: none Crewed: no Sight: 0 + Wall: + RenderBuildingWall: + -RenderBuilding: \ No newline at end of file diff --git a/mods/ra/sequences.xml b/mods/ra/sequences.xml index aaa14c95ec..ec16b56ff1 100644 --- a/mods/ra/sequences.xml +++ b/mods/ra/sequences.xml @@ -860,8 +860,8 @@ - - + + \ No newline at end of file