From e6c041e53f5679c6a6ac967eb060b13407908864 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 16 Mar 2014 23:12:46 +1300 Subject: [PATCH] Fix PBOG and Building to support concrete placement. --- OpenRA.Mods.RA/Buildings/Building.cs | 1 + OpenRA.Mods.RA/Buildings/Util.cs | 3 +++ .../Orders/PlaceBuildingOrderGenerator.cs | 14 ++++++++++---- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/OpenRA.Mods.RA/Buildings/Building.cs b/OpenRA.Mods.RA/Buildings/Building.cs index 60a3490dd5..85d27ad1e6 100755 --- a/OpenRA.Mods.RA/Buildings/Building.cs +++ b/OpenRA.Mods.RA/Buildings/Building.cs @@ -32,6 +32,7 @@ namespace OpenRA.Mods.RA.Buildings public readonly string Footprint = "x"; public readonly int2 Dimensions = new int2(1, 1); public readonly bool RequiresBaseProvider = false; + public readonly bool AllowInvalidPlacement = false; public readonly string[] BuildSounds = {"placbldg.aud", "build5.aud"}; public readonly string[] SellSounds = {"cashturn.aud"}; diff --git a/OpenRA.Mods.RA/Buildings/Util.cs b/OpenRA.Mods.RA/Buildings/Util.cs index eda571bde6..acea2349b5 100755 --- a/OpenRA.Mods.RA/Buildings/Util.cs +++ b/OpenRA.Mods.RA/Buildings/Util.cs @@ -31,6 +31,9 @@ namespace OpenRA.Mods.RA.Buildings public static bool CanPlaceBuilding(this World world, string name, BuildingInfo building, CPos topLeft, Actor toIgnore) { + if (building.AllowInvalidPlacement) + return true; + var res = world.WorldActor.Trait(); return FootprintUtils.Tiles(name, building, topLeft).All( t => world.Map.IsInMap(t.X, t.Y) && res.GetResource(t) == null && diff --git a/OpenRA.Mods.RA/Orders/PlaceBuildingOrderGenerator.cs b/OpenRA.Mods.RA/Orders/PlaceBuildingOrderGenerator.cs index 3c5d95ddb1..17e012eb64 100644 --- a/OpenRA.Mods.RA/Orders/PlaceBuildingOrderGenerator.cs +++ b/OpenRA.Mods.RA/Orders/PlaceBuildingOrderGenerator.cs @@ -90,11 +90,17 @@ namespace OpenRA.Mods.RA.Orders { if (!initialized) { - var rbi = Rules.Info[Building].Traits.Get(); - var palette = rbi.Palette ?? (Producer.Owner != null ? - rbi.PlayerPalette + Producer.Owner.InternalName : null); + var rbi = Rules.Info[Building].Traits.GetOrDefault(); + if (rbi == null) + preview = new IRenderable[0]; + else + { + var palette = rbi.Palette ?? (Producer.Owner != null ? + rbi.PlayerPalette + Producer.Owner.InternalName : null); + + preview = rbi.RenderPreview(Rules.Info[Building], wr.Palette(palette)); + } - preview = rbi.RenderPreview(Rules.Info[Building], wr.Palette(palette)); initialized = true; }