Switch tabs when a queue is lost, hide tab-strip when there are no queues available, rename queueType -> queueGroup.
This commit is contained in:
@@ -52,20 +52,20 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
|
|||||||
if (button.IsDisabled())
|
if (button.IsDisabled())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (queueTabs.QueueType == group)
|
if (queueTabs.QueueGroup == group)
|
||||||
queueTabs.SelectNextTab(mi.Modifiers.HasModifier(Modifiers.Shift));
|
queueTabs.SelectNextTab(mi.Modifiers.HasModifier(Modifiers.Shift));
|
||||||
else
|
else
|
||||||
queueTabs.QueueType = group;
|
queueTabs.QueueGroup = group;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
button.OnKeyPress = e =>
|
button.OnKeyPress = e =>
|
||||||
{
|
{
|
||||||
if (queueTabs.QueueType == group)
|
if (queueTabs.QueueGroup == group)
|
||||||
queueTabs.SelectNextTab(e.Modifiers.HasModifier(Modifiers.Shift));
|
queueTabs.SelectNextTab(e.Modifiers.HasModifier(Modifiers.Shift));
|
||||||
else
|
else
|
||||||
queueTabs.QueueType = group;
|
queueTabs.QueueGroup = group;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -59,19 +59,19 @@ namespace OpenRA.Mods.Cnc.Widgets
|
|||||||
|
|
||||||
class ProductionTabsWidget : Widget
|
class ProductionTabsWidget : Widget
|
||||||
{
|
{
|
||||||
string queueType;
|
string queueGroup;
|
||||||
public string QueueType
|
public string QueueGroup
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return queueType;
|
return queueGroup;
|
||||||
}
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
queueType = value;
|
queueGroup = value;
|
||||||
ListOffset = 0;
|
ListOffset = 0;
|
||||||
Widget.RootWidget.GetWidget<ProductionPaletteWidget>(PaletteWidget)
|
Widget.RootWidget.GetWidget<ProductionPaletteWidget>(PaletteWidget)
|
||||||
.CurrentQueue = Groups[queueType].Tabs[0].Queue;
|
.CurrentQueue = Groups[queueGroup].Tabs[0].Queue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,6 +95,9 @@ namespace OpenRA.Mods.Cnc.Widgets
|
|||||||
this.world = world;
|
this.world = world;
|
||||||
Groups = Rules.Info.Values.SelectMany(a => a.Traits.WithInterface<ProductionQueueInfo>())
|
Groups = Rules.Info.Values.SelectMany(a => a.Traits.WithInterface<ProductionQueueInfo>())
|
||||||
.Select(q => q.Group).Distinct().ToDictionary(g => g, g => new ProductionTabGroup() { Group = g });
|
.Select(q => q.Group).Distinct().ToDictionary(g => g, g => new ProductionTabGroup() { Group = g });
|
||||||
|
|
||||||
|
// Only visible if the production palette has icons to display
|
||||||
|
IsVisible = () => queueGroup != null && Groups[queueGroup].Tabs.Count > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void DrawInner()
|
public override void DrawInner()
|
||||||
@@ -117,16 +120,13 @@ namespace OpenRA.Mods.Cnc.Widgets
|
|||||||
WidgetUtils.DrawRGBA(ChromeProvider.GetImage("scrollbar", rightPressed || rightDisabled ? "down_pressed" : "down_arrow"),
|
WidgetUtils.DrawRGBA(ChromeProvider.GetImage("scrollbar", rightPressed || rightDisabled ? "down_pressed" : "down_arrow"),
|
||||||
new float2(rightButtonRect.Left + 2, rightButtonRect.Top + 2));
|
new float2(rightButtonRect.Left + 2, rightButtonRect.Top + 2));
|
||||||
|
|
||||||
if (QueueType == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Draw tab buttons
|
// Draw tab buttons
|
||||||
Game.Renderer.EnableScissor(leftButtonRect.Right, rb.Y + 1, rightButtonRect.Left - leftButtonRect.Right - 1, rb.Height);
|
Game.Renderer.EnableScissor(leftButtonRect.Right, rb.Y + 1, rightButtonRect.Left - leftButtonRect.Right - 1, rb.Height);
|
||||||
var palette = Widget.RootWidget.GetWidget<ProductionPaletteWidget>(PaletteWidget);
|
var palette = Widget.RootWidget.GetWidget<ProductionPaletteWidget>(PaletteWidget);
|
||||||
var origin = new int2(leftButtonRect.Right - 1 + (int)ListOffset, leftButtonRect.Y);
|
var origin = new int2(leftButtonRect.Right - 1 + (int)ListOffset, leftButtonRect.Y);
|
||||||
SpriteFont font = Game.Renderer.Fonts["TinyBold"];
|
SpriteFont font = Game.Renderer.Fonts["TinyBold"];
|
||||||
ContentWidth = 0;
|
ContentWidth = 0;
|
||||||
foreach (var tab in Groups[QueueType].Tabs)
|
foreach (var tab in Groups[queueGroup].Tabs)
|
||||||
{
|
{
|
||||||
var rect = new Rectangle(origin.X + ContentWidth, origin.Y, TabWidth, rb.Height);
|
var rect = new Rectangle(origin.X + ContentWidth, origin.Y, TabWidth, rb.Height);
|
||||||
ButtonWidget.DrawBackground("button", rect, false, tab.Queue == palette.CurrentQueue, rect.Contains(Viewport.LastMousePos));
|
ButtonWidget.DrawBackground("button", rect, false, tab.Queue == palette.CurrentQueue, rect.Contains(Viewport.LastMousePos));
|
||||||
@@ -156,6 +156,23 @@ namespace OpenRA.Mods.Cnc.Widgets
|
|||||||
.Select(p => p.Trait).ToArray();
|
.Select(p => p.Trait).ToArray();
|
||||||
foreach (var g in Groups.Values)
|
foreach (var g in Groups.Values)
|
||||||
g.Update(allQueues);
|
g.Update(allQueues);
|
||||||
|
|
||||||
|
if (queueGroup == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
var palette = Widget.RootWidget.GetWidget<ProductionPaletteWidget>(PaletteWidget);
|
||||||
|
// Queue destroyed, was last of type: switch to a new group
|
||||||
|
if (Groups[queueGroup].Tabs.Count == 0)
|
||||||
|
{
|
||||||
|
// Find a new group
|
||||||
|
queueGroup = Groups.Where(g => g.Value.Tabs.Count > 0)
|
||||||
|
.Select(g => g.Key).FirstOrDefault();
|
||||||
|
palette.CurrentQueue = queueGroup != null ? Groups[queueGroup].Tabs[0].Queue : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Queue destroyed, others of same type: switch to another tab
|
||||||
|
else if (!Groups[queueGroup].Tabs.Select(t => t.Queue).Contains(palette.CurrentQueue))
|
||||||
|
palette.CurrentQueue = Groups[queueGroup].Tabs[0].Queue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -206,7 +223,7 @@ namespace OpenRA.Mods.Cnc.Widgets
|
|||||||
if (offsetloc.X > 0 && offsetloc.X <= ContentWidth)
|
if (offsetloc.X > 0 && offsetloc.X <= ContentWidth)
|
||||||
{
|
{
|
||||||
var palette = Widget.RootWidget.GetWidget<ProductionPaletteWidget>(PaletteWidget);
|
var palette = Widget.RootWidget.GetWidget<ProductionPaletteWidget>(PaletteWidget);
|
||||||
palette.CurrentQueue = Groups[QueueType].Tabs[offsetloc.X/(TabWidth - 1)].Queue;
|
palette.CurrentQueue = Groups[queueGroup].Tabs[offsetloc.X/(TabWidth - 1)].Queue;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -227,11 +244,11 @@ namespace OpenRA.Mods.Cnc.Widgets
|
|||||||
|
|
||||||
public void SelectNextTab(bool reverse)
|
public void SelectNextTab(bool reverse)
|
||||||
{
|
{
|
||||||
if (queueType == null)
|
if (queueGroup == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var pal = Widget.RootWidget.GetWidget<ProductionPaletteWidget>(PaletteWidget);
|
var pal = Widget.RootWidget.GetWidget<ProductionPaletteWidget>(PaletteWidget);
|
||||||
var tabs = Groups[queueType].Tabs.ToList();
|
var tabs = Groups[queueGroup].Tabs.ToList();
|
||||||
if (reverse) tabs.Reverse();
|
if (reverse) tabs.Reverse();
|
||||||
|
|
||||||
var tab = tabs.SkipWhile(q => q.Queue != pal.CurrentQueue)
|
var tab = tabs.SkipWhile(q => q.Queue != pal.CurrentQueue)
|
||||||
@@ -242,7 +259,7 @@ namespace OpenRA.Mods.Cnc.Widgets
|
|||||||
|
|
||||||
public void SelectQueue(ProductionQueue queue)
|
public void SelectQueue(ProductionQueue queue)
|
||||||
{
|
{
|
||||||
QueueType = queue.Info.Group;
|
queueGroup = queue.Info.Group;
|
||||||
Widget.RootWidget.GetWidget<ProductionPaletteWidget>(PaletteWidget)
|
Widget.RootWidget.GetWidget<ProductionPaletteWidget>(PaletteWidget)
|
||||||
.CurrentQueue = queue;
|
.CurrentQueue = queue;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user