diff --git a/OpenRa.Game/Sidebar.cs b/OpenRa.Game/Sidebar.cs index 6802ca2493..d316ed6669 100644 --- a/OpenRa.Game/Sidebar.cs +++ b/OpenRa.Game/Sidebar.cs @@ -32,6 +32,7 @@ namespace OpenRa.Game public Sidebar( Race race, Renderer renderer, Game game ) { this.techTree = game.LocalPlayer.TechTree; + this.techTree.BuildableItemsChanged += (sender, e) => { PopulateItemList(); }; this.game = game; region = GRegion.Create(game.viewport, DockStyle.Right, 128, Paint, MouseHandler); game.viewport.AddRegion( region ); @@ -98,7 +99,7 @@ namespace OpenRa.Game void Paint() { - PopulateItemList(); // todo: do this less often, just when things actually change! +// PopulateItemList(); // todo: do this less often, just when things actually change! foreach (SidebarItem i in items) i.Paint(spriteRenderer, region.Location); diff --git a/OpenRa.Game/SidebarItem.cs b/OpenRa.Game/SidebarItem.cs index 9dd4e530bc..44a0594c12 100644 --- a/OpenRa.Game/SidebarItem.cs +++ b/OpenRa.Game/SidebarItem.cs @@ -9,6 +9,8 @@ namespace OpenRa.Game public readonly float2 location; readonly Sprite sprite; + public bool isBuilding = false; + public SidebarItem(Sprite s, Item item, int y) { this.techTreeItem = item; diff --git a/OpenRa.Game/TechTree/TechTree.cs b/OpenRa.Game/TechTree/TechTree.cs index df51478937..f38c4b2935 100644 --- a/OpenRa.Game/TechTree/TechTree.cs +++ b/OpenRa.Game/TechTree/TechTree.cs @@ -93,8 +93,16 @@ namespace OpenRa.TechTree void CheckAll() { + bool changed = false; foreach (Item unit in objects.Values) + { + bool old = unit.CanBuild; unit.CheckPrerequisites(built, currentRace); + if (old != unit.CanBuild) + changed = true; + } + + if (changed) BuildableItemsChanged(this, EventArgs.Empty); } public IEnumerable BuildableItems @@ -106,5 +114,7 @@ namespace OpenRa.TechTree yield return b; } } + + public event EventHandler BuildableItemsChanged = (sender, e) => { }; } }