Revert "DevEnableTech now displays from all factions"

This reverts commit 5d5f302d07.
This commit is contained in:
Paul Chote
2014-11-15 09:20:04 +13:00
parent 455d4dc97f
commit 563efd678a
8 changed files with 55 additions and 91 deletions

View File

@@ -18,43 +18,42 @@ using OpenRA.Widgets;
namespace OpenRA.Mods.RA.Widgets
{
public class ProductionTab
{
public string Name;
public ProductionQueue Queue;
}
public class ProductionTabGroup
{
public List<ProductionQueue> Tabs = new List<ProductionQueue>();
public List<ProductionTab> Tabs = new List<ProductionTab>();
public string Group;
public bool Alert { get { return Tabs.Any(t => t.CurrentDone); } }
public int NextQueueName = 1;
public bool Alert { get { return Tabs.Any(t => t.Queue.CurrentDone); } }
public void Update(IEnumerable<ProductionQueue> allQueues)
{
var queues = allQueues.Where(q => q.Info.Group == Group).ToList();
var names = new Queue<int>(Enumerable.Range(1, queues.Count).Except(queues.Select(q => q.Name)));
var tabs = new List<ProductionTab>();
// Assign names based on available numbers
foreach (var queue in queues.Where(q => q.Name == 0))
// Remove stale queues
foreach (var t in Tabs)
{
foreach (var q in queues.Where(q => q.Name > 0))
if (queue.Actor == q.Actor)
queue.Name = q.Name;
if (queue.Name == 0)
queue.Name = names.Dequeue();
if (!queues.Contains(t.Queue))
continue;
tabs.Add(t);
queues.Remove(t.Queue);
}
Tabs = queues.OrderBy(q => q.Name).ToList();
// distinction between tabs of the same actor
foreach (var group in queues.GroupBy(q => q.Actor))
{
if (group.Count() > 1)
// Add new queues
foreach (var queue in queues)
tabs.Add(new ProductionTab()
{
var n = 'a';
foreach (var queue in group)
queue.DisplayName = queue.Name + (n++).ToString();
}
else
group.First().DisplayName = group.First().Name.ToString();
}
Name = (NextQueueName++).ToString(),
Queue = queue
});
Tabs = tabs;
}
}
@@ -99,7 +98,7 @@ namespace OpenRA.Mods.RA.Widgets
return true;
// Prioritize alerted queues
var queues = Groups[queueGroup].Tabs.Select(t => t)
var queues = Groups[queueGroup].Tabs.Select(t => t.Queue)
.OrderByDescending(q => q.CurrentDone ? 1 : 0)
.ToList();
@@ -172,13 +171,13 @@ namespace OpenRA.Mods.RA.Widgets
{
var rect = new Rectangle(origin.X + contentWidth, origin.Y, TabWidth, rb.Height);
var hover = !leftHover && !rightHover && Ui.MouseOverWidget == this && rect.Contains(Viewport.LastMousePos);
var baseName = tab == CurrentQueue ? "button-highlighted" : "button";
var baseName = tab.Queue == CurrentQueue ? "button-highlighted" : "button";
ButtonWidget.DrawBackground(baseName, rect, false, false, hover, false);
contentWidth += TabWidth - 1;
var textSize = font.Measure(tab.DisplayName);
var textSize = font.Measure(tab.Name);
var position = new int2(rect.X + (rect.Width - textSize.X) / 2, rect.Y + (rect.Height - textSize.Y) / 2);
font.DrawTextWithContrast(tab.DisplayName, position, tab.CurrentDone ? Color.Gold : Color.White, Color.Black, 1);
font.DrawTextWithContrast(tab.Name, position, tab.Queue.CurrentDone ? Color.Gold : Color.White, Color.Black, 1);
}
Game.Renderer.DisableScissor();
@@ -211,7 +210,7 @@ namespace OpenRA.Mods.RA.Widgets
.Select(g => g.Key).FirstOrDefault();
// Queue destroyed, others of same type: switch to another tab
else if (!Groups[queueGroup].Tabs.Contains(CurrentQueue))
else if (!Groups[queueGroup].Tabs.Select(t => t.Queue).Contains(CurrentQueue))
SelectNextTab(false);
}
}
@@ -265,7 +264,7 @@ namespace OpenRA.Mods.RA.Widgets
var offsetloc = mi.Location - new int2(leftButtonRect.Right - 1 + (int)listOffset, leftButtonRect.Y);
if (offsetloc.X > 0 && offsetloc.X < contentWidth)
{
CurrentQueue = Groups[queueGroup].Tabs[offsetloc.X / (TabWidth - 1)];
CurrentQueue = Groups[queueGroup].Tabs[offsetloc.X / (TabWidth - 1)].Queue;
Sound.PlayNotification(world.Map.Rules, null, "Sounds", "ClickSound", null);
}