Observer: display army value in a new dedicated graph tab
This commit is contained in:
committed by
Paul Chote
parent
11b064a333
commit
bb5e0eafba
@@ -31,12 +31,14 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
readonly ContainerWidget productionStatsHeaders;
|
readonly ContainerWidget productionStatsHeaders;
|
||||||
readonly ContainerWidget combatStatsHeaders;
|
readonly ContainerWidget combatStatsHeaders;
|
||||||
readonly ContainerWidget earnedThisMinuteGraphHeaders;
|
readonly ContainerWidget earnedThisMinuteGraphHeaders;
|
||||||
|
readonly ContainerWidget armyThisMinuteGraphHeaders;
|
||||||
readonly ScrollPanelWidget playerStatsPanel;
|
readonly ScrollPanelWidget playerStatsPanel;
|
||||||
readonly ScrollItemWidget basicPlayerTemplate;
|
readonly ScrollItemWidget basicPlayerTemplate;
|
||||||
readonly ScrollItemWidget economyPlayerTemplate;
|
readonly ScrollItemWidget economyPlayerTemplate;
|
||||||
readonly ScrollItemWidget productionPlayerTemplate;
|
readonly ScrollItemWidget productionPlayerTemplate;
|
||||||
readonly ScrollItemWidget combatPlayerTemplate;
|
readonly ScrollItemWidget combatPlayerTemplate;
|
||||||
readonly ContainerWidget earnedThisMinuteGraphTemplate;
|
readonly ContainerWidget earnedThisMinuteGraphTemplate;
|
||||||
|
readonly ContainerWidget armyThisMinuteGraphTemplate;
|
||||||
readonly ScrollItemWidget teamTemplate;
|
readonly ScrollItemWidget teamTemplate;
|
||||||
readonly IEnumerable<Player> players;
|
readonly IEnumerable<Player> players;
|
||||||
readonly World world;
|
readonly World world;
|
||||||
@@ -64,6 +66,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
productionStatsHeaders = widget.Get<ContainerWidget>("PRODUCTION_STATS_HEADERS");
|
productionStatsHeaders = widget.Get<ContainerWidget>("PRODUCTION_STATS_HEADERS");
|
||||||
combatStatsHeaders = widget.Get<ContainerWidget>("COMBAT_STATS_HEADERS");
|
combatStatsHeaders = widget.Get<ContainerWidget>("COMBAT_STATS_HEADERS");
|
||||||
earnedThisMinuteGraphHeaders = widget.Get<ContainerWidget>("EARNED_THIS_MIN_GRAPH_HEADERS");
|
earnedThisMinuteGraphHeaders = widget.Get<ContainerWidget>("EARNED_THIS_MIN_GRAPH_HEADERS");
|
||||||
|
armyThisMinuteGraphHeaders = widget.Get<ContainerWidget>("ARMY_THIS_MIN_GRAPH_HEADERS");
|
||||||
|
|
||||||
playerStatsPanel = widget.Get<ScrollPanelWidget>("PLAYER_STATS_PANEL");
|
playerStatsPanel = widget.Get<ScrollPanelWidget>("PLAYER_STATS_PANEL");
|
||||||
playerStatsPanel.Layout = new GridLayout(playerStatsPanel);
|
playerStatsPanel.Layout = new GridLayout(playerStatsPanel);
|
||||||
@@ -73,6 +76,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
productionPlayerTemplate = playerStatsPanel.Get<ScrollItemWidget>("PRODUCTION_PLAYER_TEMPLATE");
|
productionPlayerTemplate = playerStatsPanel.Get<ScrollItemWidget>("PRODUCTION_PLAYER_TEMPLATE");
|
||||||
combatPlayerTemplate = playerStatsPanel.Get<ScrollItemWidget>("COMBAT_PLAYER_TEMPLATE");
|
combatPlayerTemplate = playerStatsPanel.Get<ScrollItemWidget>("COMBAT_PLAYER_TEMPLATE");
|
||||||
earnedThisMinuteGraphTemplate = playerStatsPanel.Get<ContainerWidget>("EARNED_THIS_MIN_GRAPH_TEMPLATE");
|
earnedThisMinuteGraphTemplate = playerStatsPanel.Get<ContainerWidget>("EARNED_THIS_MIN_GRAPH_TEMPLATE");
|
||||||
|
armyThisMinuteGraphTemplate = playerStatsPanel.Get<ContainerWidget>("ARMY_THIS_MIN_GRAPH_TEMPLATE");
|
||||||
|
|
||||||
teamTemplate = playerStatsPanel.Get<ScrollItemWidget>("TEAM_TEMPLATE");
|
teamTemplate = playerStatsPanel.Get<ScrollItemWidget>("TEAM_TEMPLATE");
|
||||||
|
|
||||||
@@ -98,7 +102,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
createStatsOption("Economy", economyStatsHeaders, () => DisplayStats(EconomyStats)),
|
createStatsOption("Economy", economyStatsHeaders, () => DisplayStats(EconomyStats)),
|
||||||
createStatsOption("Production", productionStatsHeaders, () => DisplayStats(ProductionStats)),
|
createStatsOption("Production", productionStatsHeaders, () => DisplayStats(ProductionStats)),
|
||||||
createStatsOption("Combat", combatStatsHeaders, () => DisplayStats(CombatStats)),
|
createStatsOption("Combat", combatStatsHeaders, () => DisplayStats(CombatStats)),
|
||||||
createStatsOption("Earnings (graph)", earnedThisMinuteGraphHeaders, () => EarnedThisMinuteGraph())
|
createStatsOption("Earnings (graph)", earnedThisMinuteGraphHeaders, () => EarnedThisMinuteGraph()),
|
||||||
|
createStatsOption("Army (graph)", armyThisMinuteGraphHeaders, () => ArmyThisMinuteGraph()),
|
||||||
};
|
};
|
||||||
|
|
||||||
Func<StatsDropDownOption, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) =>
|
Func<StatsDropDownOption, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) =>
|
||||||
@@ -108,7 +113,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
return item;
|
return item;
|
||||||
};
|
};
|
||||||
|
|
||||||
statsDropDown.OnMouseDown = _ => statsDropDown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 150, statsDropDownOptions, setupItem);
|
statsDropDown.OnMouseDown = _ => statsDropDown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 155, statsDropDownOptions, setupItem);
|
||||||
statsDropDownOptions[(int)activePanel].OnClick();
|
statsDropDownOptions[(int)activePanel].OnClick();
|
||||||
|
|
||||||
var close = widget.GetOrNull<ButtonWidget>("CLOSE");
|
var close = widget.GetOrNull<ButtonWidget>("CLOSE");
|
||||||
@@ -151,6 +156,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
productionStatsHeaders.Visible = false;
|
productionStatsHeaders.Visible = false;
|
||||||
combatStatsHeaders.Visible = false;
|
combatStatsHeaders.Visible = false;
|
||||||
earnedThisMinuteGraphHeaders.Visible = false;
|
earnedThisMinuteGraphHeaders.Visible = false;
|
||||||
|
armyThisMinuteGraphHeaders.Visible = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EarnedThisMinuteGraph()
|
void EarnedThisMinuteGraph()
|
||||||
@@ -169,6 +175,22 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
playerStatsPanel.ScrollToTop();
|
playerStatsPanel.ScrollToTop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ArmyThisMinuteGraph()
|
||||||
|
{
|
||||||
|
armyThisMinuteGraphHeaders.Visible = true;
|
||||||
|
var template = armyThisMinuteGraphTemplate.Clone();
|
||||||
|
|
||||||
|
var graph = template.Get<LineGraphWidget>("ARMY_THIS_MIN_GRAPH");
|
||||||
|
graph.GetSeries = () =>
|
||||||
|
players.Select(p => new LineGraphSeries(
|
||||||
|
p.PlayerName,
|
||||||
|
p.Color.RGB,
|
||||||
|
(p.PlayerActor.TraitOrDefault<PlayerStatistics>() ?? new PlayerStatistics(p.PlayerActor)).ArmySamples.Select(s => (float)s)));
|
||||||
|
|
||||||
|
playerStatsPanel.AddChild(template);
|
||||||
|
playerStatsPanel.ScrollToTop();
|
||||||
|
}
|
||||||
|
|
||||||
void DisplayStats(Func<Player, ScrollItemWidget> createItem)
|
void DisplayStats(Func<Player, ScrollItemWidget> createItem)
|
||||||
{
|
{
|
||||||
var teams = players.GroupBy(p => (world.LobbyInfo.ClientWithIndex(p.ClientIndex) ?? new Session.Client()).Team).OrderBy(g => g.Key);
|
var teams = players.GroupBy(p => (world.LobbyInfo.ClientWithIndex(p.ClientIndex) ?? new Session.Client()).Team).OrderBy(g => g.Key);
|
||||||
|
|||||||
@@ -284,6 +284,20 @@ Background@INGAME_OBSERVERSTATS_BG:
|
|||||||
Font: Bold
|
Font: Bold
|
||||||
Text: Earnings received each minute
|
Text: Earnings received each minute
|
||||||
Align: Center
|
Align: Center
|
||||||
|
Container@ARMY_THIS_MIN_GRAPH_HEADERS:
|
||||||
|
X: 0
|
||||||
|
Y: 0
|
||||||
|
Width: PARENT_RIGHT
|
||||||
|
Height: PARENT_BOTTOM
|
||||||
|
Children:
|
||||||
|
Label@EARNED_THIS_MIN_HEADER:
|
||||||
|
X: 0
|
||||||
|
Y: 40
|
||||||
|
Width: PARENT_RIGHT
|
||||||
|
Height: 25
|
||||||
|
Font: Bold
|
||||||
|
Text: Army value over time
|
||||||
|
Align: Center
|
||||||
ScrollPanel@PLAYER_STATS_PANEL:
|
ScrollPanel@PLAYER_STATS_PANEL:
|
||||||
X: 15
|
X: 15
|
||||||
Y: 70
|
Y: 70
|
||||||
@@ -565,6 +579,26 @@ Background@INGAME_OBSERVERSTATS_BG:
|
|||||||
YAxisLabel: $
|
YAxisLabel: $
|
||||||
LabelFont: TinyBold
|
LabelFont: TinyBold
|
||||||
AxisFont: Bold
|
AxisFont: Bold
|
||||||
|
Container@ARMY_THIS_MIN_GRAPH_TEMPLATE:
|
||||||
|
X: 10
|
||||||
|
Y: 10
|
||||||
|
Width: PARENT_RIGHT - 100
|
||||||
|
Height: PARENT_BOTTOM - 60
|
||||||
|
Children:
|
||||||
|
LineGraph@ARMY_THIS_MIN_GRAPH:
|
||||||
|
X: 0
|
||||||
|
Y: 0
|
||||||
|
Width: PARENT_RIGHT
|
||||||
|
Height: PARENT_BOTTOM
|
||||||
|
ValueFormat: ${0}
|
||||||
|
XAxisValueFormat: {0}
|
||||||
|
YAxisValueFormat: ${0:F0}
|
||||||
|
XAxisSize: 20
|
||||||
|
YAxisSize: 10
|
||||||
|
XAxisLabel: m
|
||||||
|
YAxisLabel: $
|
||||||
|
LabelFont: TinyBold
|
||||||
|
AxisFont: Bold
|
||||||
Button@CLOSE:
|
Button@CLOSE:
|
||||||
X: 0
|
X: 0
|
||||||
Y: PARENT_BOTTOM - 36
|
Y: PARENT_BOTTOM - 36
|
||||||
|
|||||||
@@ -284,6 +284,20 @@ Background@INGAME_OBSERVERSTATS_BG:
|
|||||||
Font: Bold
|
Font: Bold
|
||||||
Text: Earnings received each minute
|
Text: Earnings received each minute
|
||||||
Align: Center
|
Align: Center
|
||||||
|
Container@ARMY_THIS_MIN_GRAPH_HEADERS:
|
||||||
|
X: 0
|
||||||
|
Y: 0
|
||||||
|
Width: PARENT_RIGHT
|
||||||
|
Height: PARENT_BOTTOM
|
||||||
|
Children:
|
||||||
|
Label@EARNED_THIS_MIN_HEADER:
|
||||||
|
X: 0
|
||||||
|
Y: 40
|
||||||
|
Width: PARENT_RIGHT
|
||||||
|
Height: 25
|
||||||
|
Font: Bold
|
||||||
|
Text: Army value over time
|
||||||
|
Align: Center
|
||||||
ScrollPanel@PLAYER_STATS_PANEL:
|
ScrollPanel@PLAYER_STATS_PANEL:
|
||||||
X: 25
|
X: 25
|
||||||
Y: 70
|
Y: 70
|
||||||
@@ -565,6 +579,26 @@ Background@INGAME_OBSERVERSTATS_BG:
|
|||||||
YAxisLabel: $
|
YAxisLabel: $
|
||||||
LabelFont: TinyBold
|
LabelFont: TinyBold
|
||||||
AxisFont: Bold
|
AxisFont: Bold
|
||||||
|
Container@ARMY_THIS_MIN_GRAPH_TEMPLATE:
|
||||||
|
X: 0
|
||||||
|
Y: 0
|
||||||
|
Width: PARENT_RIGHT - 100
|
||||||
|
Height: PARENT_BOTTOM - 50
|
||||||
|
Children:
|
||||||
|
LineGraph@ARMY_THIS_MIN_GRAPH:
|
||||||
|
X: 0
|
||||||
|
Y: 0
|
||||||
|
Width: PARENT_RIGHT
|
||||||
|
Height: PARENT_BOTTOM
|
||||||
|
ValueFormat: ${0}
|
||||||
|
XAxisValueFormat: {0}
|
||||||
|
YAxisValueFormat: ${0:F0}
|
||||||
|
XAxisSize: 20
|
||||||
|
YAxisSize: 10
|
||||||
|
XAxisLabel: m
|
||||||
|
YAxisLabel: $
|
||||||
|
LabelFont: TinyBold
|
||||||
|
AxisFont: Bold
|
||||||
Button@CLOSE:
|
Button@CLOSE:
|
||||||
X: PARENT_RIGHT - 145
|
X: PARENT_RIGHT - 145
|
||||||
Y: PARENT_BOTTOM - 45
|
Y: PARENT_BOTTOM - 45
|
||||||
|
|||||||
@@ -284,6 +284,20 @@ Background@INGAME_OBSERVERSTATS_BG:
|
|||||||
Font: Bold
|
Font: Bold
|
||||||
Text: Earnings received each minute
|
Text: Earnings received each minute
|
||||||
Align: Center
|
Align: Center
|
||||||
|
Container@ARMY_THIS_MIN_GRAPH_HEADERS:
|
||||||
|
X: 0
|
||||||
|
Y: 0
|
||||||
|
Width: PARENT_RIGHT
|
||||||
|
Height: PARENT_BOTTOM
|
||||||
|
Children:
|
||||||
|
Label@EARNED_THIS_MIN_HEADER:
|
||||||
|
X: 0
|
||||||
|
Y: 40
|
||||||
|
Width: PARENT_RIGHT
|
||||||
|
Height: 25
|
||||||
|
Font: Bold
|
||||||
|
Text: Army value over time
|
||||||
|
Align: Center
|
||||||
ScrollPanel@PLAYER_STATS_PANEL:
|
ScrollPanel@PLAYER_STATS_PANEL:
|
||||||
X: 25
|
X: 25
|
||||||
Y: 70
|
Y: 70
|
||||||
@@ -567,6 +581,26 @@ Background@INGAME_OBSERVERSTATS_BG:
|
|||||||
YAxisLabel: $
|
YAxisLabel: $
|
||||||
LabelFont: TinyBold
|
LabelFont: TinyBold
|
||||||
AxisFont: Bold
|
AxisFont: Bold
|
||||||
|
Container@ARMY_THIS_MIN_GRAPH_TEMPLATE:
|
||||||
|
X: 0
|
||||||
|
Y: 0
|
||||||
|
Width: PARENT_RIGHT - 100
|
||||||
|
Height: PARENT_BOTTOM - 50
|
||||||
|
Children:
|
||||||
|
LineGraph@ARMY_THIS_MIN_GRAPH:
|
||||||
|
X: 0
|
||||||
|
Y: 0
|
||||||
|
Width: PARENT_RIGHT
|
||||||
|
Height: PARENT_BOTTOM
|
||||||
|
ValueFormat: ${0}
|
||||||
|
XAxisValueFormat: {0}
|
||||||
|
YAxisValueFormat: ${0:F0}
|
||||||
|
XAxisSize: 20
|
||||||
|
YAxisSize: 10
|
||||||
|
XAxisLabel: m
|
||||||
|
YAxisLabel: $
|
||||||
|
LabelFont: TinyBold
|
||||||
|
AxisFont: Bold
|
||||||
Button@CLOSE:
|
Button@CLOSE:
|
||||||
X: PARENT_RIGHT - 145
|
X: PARENT_RIGHT - 145
|
||||||
Y: PARENT_BOTTOM - 45
|
Y: PARENT_BOTTOM - 45
|
||||||
|
|||||||
Reference in New Issue
Block a user