Replace "$/min" by "Income" and increase graph update rates

This commit is contained in:
abcdefg30
2019-09-07 04:42:26 +02:00
committed by reaperrr
parent 4ca42f6e83
commit ee839869fc
6 changed files with 159 additions and 165 deletions

View File

@@ -9,7 +9,6 @@
*/ */
#endregion #endregion
using System;
using System.Collections.Generic; using System.Collections.Generic;
using OpenRA.Graphics; using OpenRA.Graphics;
using OpenRA.Traits; using OpenRA.Traits;
@@ -29,14 +28,6 @@ namespace OpenRA.Mods.Common.Traits
public int OrderCount; public int OrderCount;
public int EarnedThisMinute
{
get
{
return resources != null ? resources.Earned - earnedAtBeginningOfMinute : 0;
}
}
public int Experience public int Experience
{ {
get get
@@ -45,8 +36,10 @@ namespace OpenRA.Mods.Common.Traits
} }
} }
public List<int> EarnedSamples = new List<int>(100); // Low resolution (every 30 seconds) record of earnings, covering the entire game
int earnedAtBeginningOfMinute; public List<int> IncomeSamples = new List<int>(100);
public int Income;
public int DisplayIncome;
public List<int> ArmySamples = new List<int>(100); public List<int> ArmySamples = new List<int>(100);
@@ -60,8 +53,14 @@ namespace OpenRA.Mods.Common.Traits
public int BuildingsDead; public int BuildingsDead;
public int ArmyValue; public int ArmyValue;
int replayTimestep;
// High resolution (every second) record of earnings, limited to the last minute
readonly Queue<int> earnedSeconds = new Queue<int>(60);
int lastIncome;
int lastIncomeTick;
int ticks; int ticks;
int replayTimestep;
public PlayerStatistics(Actor self) { } public PlayerStatistics(Actor self) { }
@@ -71,32 +70,37 @@ namespace OpenRA.Mods.Common.Traits
experience = self.TraitOrDefault<PlayerExperience>(); experience = self.TraitOrDefault<PlayerExperience>();
} }
void UpdateEarnedThisMinute()
{
EarnedSamples.Add(EarnedThisMinute);
earnedAtBeginningOfMinute = resources != null ? resources.Earned : 0;
}
void UpdateArmyThisMinute()
{
ArmySamples.Add(ArmyValue);
}
void ITick.Tick(Actor self) void ITick.Tick(Actor self)
{ {
if (self.Owner.WinState != WinState.Undefined)
return;
ticks++; ticks++;
var timestep = self.World.IsReplay ? replayTimestep : self.World.Timestep; var timestep = self.World.IsReplay ? replayTimestep : self.World.Timestep;
if (ticks * timestep >= 30000)
if (ticks * timestep >= 60000)
{ {
ticks = 0; ticks = 0;
UpdateEarnedThisMinute();
UpdateArmyThisMinute(); if (ArmyValue != 0 || self.Owner.WinState == WinState.Undefined)
ArmySamples.Add(ArmyValue);
if (resources != null && (Income != 0 || self.Owner.WinState == WinState.Undefined))
IncomeSamples.Add(Income);
} }
if (resources == null)
return;
var tickDelta = self.World.WorldTick - lastIncomeTick;
if (tickDelta * timestep >= 1000)
{
lastIncomeTick = self.World.WorldTick;
var lastEarned = earnedSeconds.Count > 59 ? earnedSeconds.Dequeue() : 0;
lastIncome = DisplayIncome = Income;
Income = resources.Earned - lastEarned;
earnedSeconds.Enqueue(resources.Earned);
}
else
DisplayIncome = int2.Lerp(lastIncome, Income, tickDelta * timestep, 1000);
} }
public void ResolveOrder(Actor self, Order order) public void ResolveOrder(Actor self, Order order)
@@ -130,8 +134,8 @@ namespace OpenRA.Mods.Common.Traits
if (w.IsReplay) if (w.IsReplay)
replayTimestep = w.WorldActor.Trait<MapOptions>().GameSpeed.Timestep; replayTimestep = w.WorldActor.Trait<MapOptions>().GameSpeed.Timestep;
UpdateEarnedThisMinute(); ArmySamples.Add(ArmyValue);
UpdateArmyThisMinute(); IncomeSamples.Add(Income);
} }
} }

View File

@@ -38,10 +38,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic
readonly ScrollItemWidget productionPlayerTemplate; readonly ScrollItemWidget productionPlayerTemplate;
readonly ScrollItemWidget supportPowersPlayerTemplate; readonly ScrollItemWidget supportPowersPlayerTemplate;
readonly ScrollItemWidget combatPlayerTemplate; readonly ScrollItemWidget combatPlayerTemplate;
readonly ContainerWidget earnedThisMinuteGraphContainer; readonly ContainerWidget incomeGraphContainer;
readonly ContainerWidget armyThisMinuteGraphContainer; readonly ContainerWidget armyValueGraphContainer;
readonly LineGraphWidget earnedThisMinuteGraph; readonly LineGraphWidget incomeGraph;
readonly LineGraphWidget armyThisMinuteGraph; readonly LineGraphWidget armyValueGraph;
readonly ScrollItemWidget teamTemplate; readonly ScrollItemWidget teamTemplate;
readonly IEnumerable<Player> players; readonly IEnumerable<Player> players;
readonly IOrderedEnumerable<IGrouping<int, Player>> teams; readonly IOrderedEnumerable<IGrouping<int, Player>> teams;
@@ -95,11 +95,11 @@ namespace OpenRA.Mods.Common.Widgets.Logic
supportPowersPlayerTemplate = playerStatsPanel.Get<ScrollItemWidget>("SUPPORT_POWERS_PLAYER_TEMPLATE"); supportPowersPlayerTemplate = playerStatsPanel.Get<ScrollItemWidget>("SUPPORT_POWERS_PLAYER_TEMPLATE");
combatPlayerTemplate = playerStatsPanel.Get<ScrollItemWidget>("COMBAT_PLAYER_TEMPLATE"); combatPlayerTemplate = playerStatsPanel.Get<ScrollItemWidget>("COMBAT_PLAYER_TEMPLATE");
earnedThisMinuteGraphContainer = widget.Get<ContainerWidget>("EARNED_THIS_MIN_GRAPH_CONTAINER"); incomeGraphContainer = widget.Get<ContainerWidget>("INCOME_GRAPH_CONTAINER");
earnedThisMinuteGraph = earnedThisMinuteGraphContainer.Get<LineGraphWidget>("EARNED_THIS_MIN_GRAPH"); incomeGraph = incomeGraphContainer.Get<LineGraphWidget>("INCOME_GRAPH");
armyThisMinuteGraphContainer = widget.Get<ContainerWidget>("ARMY_THIS_MIN_GRAPH_CONTAINER"); armyValueGraphContainer = widget.Get<ContainerWidget>("ARMY_VALUE_GRAPH_CONTAINER");
armyThisMinuteGraph = armyThisMinuteGraphContainer.Get<LineGraphWidget>("ARMY_THIS_MIN_GRAPH"); armyValueGraph = armyValueGraphContainer.Get<LineGraphWidget>("ARMY_VALUE_GRAPH");
teamTemplate = playerStatsPanel.Get<ScrollItemWidget>("TEAM_TEMPLATE"); teamTemplate = playerStatsPanel.Get<ScrollItemWidget>("TEAM_TEMPLATE");
@@ -144,8 +144,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
createStatsOption("Production", ObserverStatsPanel.Production, productionPlayerTemplate, () => DisplayStats(ProductionStats)), createStatsOption("Production", ObserverStatsPanel.Production, productionPlayerTemplate, () => DisplayStats(ProductionStats)),
createStatsOption("Support Powers", ObserverStatsPanel.SupportPowers, supportPowersPlayerTemplate, () => DisplayStats(SupportPowerStats)), createStatsOption("Support Powers", ObserverStatsPanel.SupportPowers, supportPowersPlayerTemplate, () => DisplayStats(SupportPowerStats)),
createStatsOption("Combat", ObserverStatsPanel.Combat, combatPlayerTemplate, () => DisplayStats(CombatStats)), createStatsOption("Combat", ObserverStatsPanel.Combat, combatPlayerTemplate, () => DisplayStats(CombatStats)),
createStatsOption("Earnings (graph)", ObserverStatsPanel.Graph, null, () => EarnedThisMinuteGraph()), createStatsOption("Earnings (graph)", ObserverStatsPanel.Graph, null, () => IncomeGraph()),
createStatsOption("Army (graph)", ObserverStatsPanel.ArmyGraph, null, () => ArmyThisMinuteGraph()), createStatsOption("Army (graph)", ObserverStatsPanel.ArmyGraph, null, () => ArmyValueGraph()),
}; };
Func<StatsDropDownOption, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) => Func<StatsDropDownOption, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) =>
@@ -192,31 +192,31 @@ namespace OpenRA.Mods.Common.Widgets.Logic
supportPowerStatsHeaders.Visible = false; supportPowerStatsHeaders.Visible = false;
combatStatsHeaders.Visible = false; combatStatsHeaders.Visible = false;
earnedThisMinuteGraphContainer.Visible = false; incomeGraphContainer.Visible = false;
armyThisMinuteGraphContainer.Visible = false; armyValueGraphContainer.Visible = false;
earnedThisMinuteGraph.GetSeries = null; incomeGraph.GetSeries = null;
armyThisMinuteGraph.GetSeries = null; armyValueGraph.GetSeries = null;
} }
void EarnedThisMinuteGraph() void IncomeGraph()
{ {
playerStatsPanel.Visible = false; playerStatsPanel.Visible = false;
earnedThisMinuteGraphContainer.Visible = true; incomeGraphContainer.Visible = true;
earnedThisMinuteGraph.GetSeries = () => incomeGraph.GetSeries = () =>
players.Select(p => new LineGraphSeries( players.Select(p => new LineGraphSeries(
p.PlayerName, p.PlayerName,
p.Color, p.Color,
(p.PlayerActor.TraitOrDefault<PlayerStatistics>() ?? new PlayerStatistics(p.PlayerActor)).EarnedSamples.Select(s => (float)s))); (p.PlayerActor.TraitOrDefault<PlayerStatistics>() ?? new PlayerStatistics(p.PlayerActor)).IncomeSamples.Select(s => (float)s)));
} }
void ArmyThisMinuteGraph() void ArmyValueGraph()
{ {
playerStatsPanel.Visible = false; playerStatsPanel.Visible = false;
armyThisMinuteGraphContainer.Visible = true; armyValueGraphContainer.Visible = true;
armyThisMinuteGraph.GetSeries = () => armyValueGraph.GetSeries = () =>
players.Select(p => new LineGraphSeries( players.Select(p => new LineGraphSeries(
p.PlayerName, p.PlayerName,
p.Color, p.Color,
@@ -344,10 +344,11 @@ namespace OpenRA.Mods.Common.Widgets.Logic
var res = player.PlayerActor.Trait<PlayerResources>(); var res = player.PlayerActor.Trait<PlayerResources>();
var stats = player.PlayerActor.TraitOrDefault<PlayerStatistics>(); var stats = player.PlayerActor.TraitOrDefault<PlayerStatistics>();
if (stats == null) return template; if (stats == null)
return template;
template.Get<LabelWidget>("CASH").GetText = () => "$" + (res.Cash + res.Resources); template.Get<LabelWidget>("CASH").GetText = () => "$" + (res.Cash + res.Resources);
template.Get<LabelWidget>("EARNED_MIN").GetText = () => AverageEarnedPerMinute(res.Earned); template.Get<LabelWidget>("INCOME").GetText = () => "$" + stats.DisplayIncome;
template.Get<LabelWidget>("EARNED").GetText = () => "$" + res.Earned; template.Get<LabelWidget>("EARNED").GetText = () => "$" + res.Earned;
template.Get<LabelWidget>("SPENT").GetText = () => "$" + res.Spent; template.Get<LabelWidget>("SPENT").GetText = () => "$" + res.Spent;
@@ -393,7 +394,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
} }
var stats = player.PlayerActor.TraitOrDefault<PlayerStatistics>(); var stats = player.PlayerActor.TraitOrDefault<PlayerStatistics>();
if (stats == null) return template; if (stats == null)
return template;
template.Get<LabelWidget>("KILLS").GetText = () => (stats.UnitsKilled + stats.BuildingsKilled).ToString(); template.Get<LabelWidget>("KILLS").GetText = () => (stats.UnitsKilled + stats.BuildingsKilled).ToString();
template.Get<LabelWidget>("DEATHS").GetText = () => (stats.UnitsDead + stats.BuildingsDead).ToString(); template.Get<LabelWidget>("DEATHS").GetText = () => (stats.UnitsDead + stats.BuildingsDead).ToString();
template.Get<LabelWidget>("ASSETS_DESTROYED").GetText = () => "$" + stats.KillsCost; template.Get<LabelWidget>("ASSETS_DESTROYED").GetText = () => "$" + stats.KillsCost;
@@ -484,11 +487,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic
return (world.WorldTick == 0 ? 0 : orders / (world.WorldTick / 1500.0)).ToString("F1"); return (world.WorldTick == 0 ? 0 : orders / (world.WorldTick / 1500.0)).ToString("F1");
} }
string AverageEarnedPerMinute(double earned)
{
return "$" + (world.WorldTick == 0 ? 0 : earned / (world.WorldTick / 1500.0)).ToString("F0");
}
static Color GetPowerColor(PowerState state) static Color GetPowerColor(PowerState state)
{ {
if (state == PowerState.Critical) return Color.Red; if (state == PowerState.Critical) return Color.Red;

View File

@@ -388,7 +388,7 @@ Container@OBSERVER_WIDGETS:
Container@ECONOMY_STATS_HEADERS: Container@ECONOMY_STATS_HEADERS:
X: 0 X: 0
Y: 0 Y: 0
Width: 715 Width: 735
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Children: Children:
ColorBlock@HEADER_COLOR: ColorBlock@HEADER_COLOR:
@@ -419,16 +419,16 @@ Container@OBSERVER_WIDGETS:
Text: Cash Text: Cash
Align: Right Align: Right
Shadow: True Shadow: True
Label@EARNED_MIN_HEADER: Label@INCOME_HEADER:
X: 240 X: 240
Width: 60 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Font: Bold Font: Bold
Text: $/min Text: Income
Align: Right Align: Right
Shadow: True Shadow: True
Label@ASSETS_HEADER: Label@ASSETS_HEADER:
X: 300 X: 320
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Font: Bold Font: Bold
@@ -436,7 +436,7 @@ Container@OBSERVER_WIDGETS:
Align: Right Align: Right
Shadow: True Shadow: True
Label@EARNED_HEADER: Label@EARNED_HEADER:
X: 380 X: 400
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Font: Bold Font: Bold
@@ -444,7 +444,7 @@ Container@OBSERVER_WIDGETS:
Align: Right Align: Right
Shadow: True Shadow: True
Label@SPENT_HEADER: Label@SPENT_HEADER:
X: 460 X: 480
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Font: Bold Font: Bold
@@ -452,7 +452,7 @@ Container@OBSERVER_WIDGETS:
Align: Right Align: Right
Shadow: True Shadow: True
Label@HARVESTERS_HEADER: Label@HARVESTERS_HEADER:
X: 540 X: 560
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Font: Bold Font: Bold
@@ -460,7 +460,7 @@ Container@OBSERVER_WIDGETS:
Align: Right Align: Right
Shadow: True Shadow: True
Label@DERRICKS_HEADER: Label@DERRICKS_HEADER:
X: 630 X: 650
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Font: Bold Font: Bold
@@ -757,7 +757,7 @@ Container@OBSERVER_WIDGETS:
ScrollItem@ECONOMY_PLAYER_TEMPLATE: ScrollItem@ECONOMY_PLAYER_TEMPLATE:
X: 0 X: 0
Y: 0 Y: 0
Width: 715 Width: 735
Height: 24 Height: 24
BaseName: scrollitem-nohover BaseName: scrollitem-nohover
Children: Children:
@@ -792,43 +792,43 @@ Container@OBSERVER_WIDGETS:
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Align: Right Align: Right
Shadow: True Shadow: True
Label@EARNED_MIN: Label@INCOME:
X: 240 X: 240
Y: 0 Y: 0
Width: 60 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Align: Right Align: Right
Shadow: True Shadow: True
Label@ASSETS: Label@ASSETS:
X: 300 X: 320
Y: 0 Y: 0
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Align: Right Align: Right
Shadow: True Shadow: True
Label@EARNED: Label@EARNED:
X: 380 X: 400
Y: 0 Y: 0
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Align: Right Align: Right
Shadow: True Shadow: True
Label@SPENT: Label@SPENT:
X: 460 X: 480
Y: 0 Y: 0
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Align: Right Align: Right
Shadow: True Shadow: True
Label@HARVESTERS: Label@HARVESTERS:
X: 540 X: 560
Y: 0 Y: 0
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Align: Right Align: Right
Shadow: True Shadow: True
Label@DERRICKS: Label@DERRICKS:
X: 630 X: 650
Y: 0 Y: 0
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
@@ -988,7 +988,7 @@ Container@OBSERVER_WIDGETS:
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Align: Right Align: Right
Shadow: True Shadow: True
Container@EARNED_THIS_MIN_GRAPH_CONTAINER: Container@INCOME_GRAPH_CONTAINER:
X: 0 X: 0
Y: 30 Y: 30
Width: PARENT_RIGHT Width: PARENT_RIGHT
@@ -1001,21 +1001,20 @@ Container@OBSERVER_WIDGETS:
Width: PARENT_RIGHT Width: PARENT_RIGHT
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Color: 00000090 Color: 00000090
LineGraph@EARNED_THIS_MIN_GRAPH: LineGraph@INCOME_GRAPH:
X: 0 X: 0
Y: 0 Y: 0
Width: PARENT_RIGHT Width: PARENT_RIGHT
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
ValueFormat: ${0} ValueFormat: ${0}
XAxisValueFormat: {0}
YAxisValueFormat: ${0:F0} YAxisValueFormat: ${0:F0}
XAxisSize: 20 XAxisSize: 40
YAxisSize: 10 XAxisTicksPerLabel: 2
XAxisLabel: Game Minute XAxisLabel: Game Minute
YAxisLabel: Earnings YAxisLabel: Earnings
LabelFont: TinyBold LabelFont: TinyBold
AxisFont: TinyBold AxisFont: TinyBold
Container@ARMY_THIS_MIN_GRAPH_CONTAINER: Container@ARMY_VALUE_GRAPH_CONTAINER:
X: 0 X: 0
Y: 30 Y: 30
Width: PARENT_RIGHT Width: PARENT_RIGHT
@@ -1028,16 +1027,15 @@ Container@OBSERVER_WIDGETS:
Width: PARENT_RIGHT Width: PARENT_RIGHT
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Color: 00000090 Color: 00000090
LineGraph@ARMY_THIS_MIN_GRAPH: LineGraph@ARMY_VALUE_GRAPH:
X: 0 X: 0
Y: 0 Y: 0
Width: PARENT_RIGHT Width: PARENT_RIGHT
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
ValueFormat: ${0} ValueFormat: ${0}
XAxisValueFormat: {0}
YAxisValueFormat: ${0:F0} YAxisValueFormat: ${0:F0}
XAxisSize: 20 XAxisSize: 40
YAxisSize: 10 XAxisTicksPerLabel: 2
XAxisLabel: Game Minute XAxisLabel: Game Minute
YAxisLabel: Army Value YAxisLabel: Army Value
LabelFont: TinyBold LabelFont: TinyBold

View File

@@ -292,7 +292,7 @@ Container@OBSERVER_WIDGETS:
Container@ECONOMY_STATS_HEADERS: Container@ECONOMY_STATS_HEADERS:
X: 0 X: 0
Y: 0 Y: 0
Width: 620 Width: 640
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Children: Children:
ColorBlock@HEADER_COLOR: ColorBlock@HEADER_COLOR:
@@ -323,16 +323,16 @@ Container@OBSERVER_WIDGETS:
Text: Cash Text: Cash
Align: Right Align: Right
Shadow: True Shadow: True
Label@EARNED_MIN_HEADER: Label@INCOME_HEADER:
X: 235 X: 235
Width: 60 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Font: Bold Font: Bold
Text: $/min Text: Income
Align: Right Align: Right
Shadow: True Shadow: True
Label@ASSETS_HEADER: Label@ASSETS_HEADER:
X: 295 X: 315
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Font: Bold Font: Bold
@@ -340,7 +340,7 @@ Container@OBSERVER_WIDGETS:
Align: Right Align: Right
Shadow: True Shadow: True
Label@EARNED_HEADER: Label@EARNED_HEADER:
X: 375 X: 395
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Font: Bold Font: Bold
@@ -348,7 +348,7 @@ Container@OBSERVER_WIDGETS:
Align: Right Align: Right
Shadow: True Shadow: True
Label@SPENT_HEADER: Label@SPENT_HEADER:
X: 455 X: 475
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Font: Bold Font: Bold
@@ -356,7 +356,7 @@ Container@OBSERVER_WIDGETS:
Align: Right Align: Right
Shadow: True Shadow: True
Label@HARVESTERS_HEADER: Label@HARVESTERS_HEADER:
X: 535 X: 555
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Font: Bold Font: Bold
@@ -651,7 +651,7 @@ Container@OBSERVER_WIDGETS:
ScrollItem@ECONOMY_PLAYER_TEMPLATE: ScrollItem@ECONOMY_PLAYER_TEMPLATE:
X: 0 X: 0
Y: 0 Y: 0
Width: 620 Width: 640
Height: 25 Height: 25
BaseName: scrollitem-nohover BaseName: scrollitem-nohover
Children: Children:
@@ -684,36 +684,36 @@ Container@OBSERVER_WIDGETS:
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Align: Right Align: Right
Shadow: True Shadow: True
Label@EARNED_MIN: Label@INCOME:
X: 235 X: 235
Y: 0 Y: 0
Width: 60 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Align: Right Align: Right
Shadow: True Shadow: True
Label@ASSETS: Label@ASSETS:
X: 295 X: 315
Y: 0 Y: 0
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Align: Right Align: Right
Shadow: True Shadow: True
Label@EARNED: Label@EARNED:
X: 375 X: 395
Y: 0 Y: 0
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Align: Right Align: Right
Shadow: True Shadow: True
Label@SPENT: Label@SPENT:
X: 455 X: 475
Y: 0 Y: 0
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Align: Right Align: Right
Shadow: True Shadow: True
Label@HARVESTERS: Label@HARVESTERS:
X: 535 X: 555
Y: 0 Y: 0
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
@@ -867,7 +867,7 @@ Container@OBSERVER_WIDGETS:
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Align: Right Align: Right
Shadow: True Shadow: True
Container@EARNED_THIS_MIN_GRAPH_CONTAINER: Container@INCOME_GRAPH_CONTAINER:
X: 0 X: 0
Y: 30 Y: 30
Width: PARENT_RIGHT Width: PARENT_RIGHT
@@ -880,21 +880,20 @@ Container@OBSERVER_WIDGETS:
Width: PARENT_RIGHT Width: PARENT_RIGHT
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Color: 00000090 Color: 00000090
LineGraph@EARNED_THIS_MIN_GRAPH: LineGraph@INCOME_GRAPH:
X: 0 X: 0
Y: 0 Y: 0
Width: PARENT_RIGHT Width: PARENT_RIGHT
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
ValueFormat: ${0} ValueFormat: ${0}
XAxisValueFormat: {0}
YAxisValueFormat: ${0:F0} YAxisValueFormat: ${0:F0}
XAxisSize: 20 XAxisSize: 40
YAxisSize: 10 XAxisTicksPerLabel: 2
XAxisLabel: Game Minute XAxisLabel: Game Minute
YAxisLabel: Earnings YAxisLabel: Earnings
LabelFont: TinyBold LabelFont: TinyBold
AxisFont: TinyBold AxisFont: TinyBold
Container@ARMY_THIS_MIN_GRAPH_CONTAINER: Container@ARMY_VALUE_GRAPH_CONTAINER:
X: 0 X: 0
Y: 30 Y: 30
Width: PARENT_RIGHT Width: PARENT_RIGHT
@@ -907,16 +906,15 @@ Container@OBSERVER_WIDGETS:
Width: PARENT_RIGHT Width: PARENT_RIGHT
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Color: 00000090 Color: 00000090
LineGraph@ARMY_THIS_MIN_GRAPH: LineGraph@ARMY_VALUE_GRAPH:
X: 0 X: 0
Y: 0 Y: 0
Width: PARENT_RIGHT Width: PARENT_RIGHT
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
ValueFormat: ${0} ValueFormat: ${0}
XAxisValueFormat: {0}
YAxisValueFormat: ${0:F0} YAxisValueFormat: ${0:F0}
XAxisSize: 20 XAxisSize: 40
YAxisSize: 10 XAxisTicksPerLabel: 2
XAxisLabel: Game Minute XAxisLabel: Game Minute
YAxisLabel: Army Value YAxisLabel: Army Value
LabelFont: TinyBold LabelFont: TinyBold

View File

@@ -324,7 +324,7 @@ Container@OBSERVER_WIDGETS:
Container@ECONOMY_STATS_HEADERS: Container@ECONOMY_STATS_HEADERS:
X: 0 X: 0
Y: 0 Y: 0
Width: 715 Width: 735
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Children: Children:
ColorBlock@HEADER_COLOR: ColorBlock@HEADER_COLOR:
@@ -355,16 +355,16 @@ Container@OBSERVER_WIDGETS:
Text: Cash Text: Cash
Align: Right Align: Right
Shadow: True Shadow: True
Label@EARNED_MIN_HEADER: Label@INCOME_HEADER:
X: 240 X: 240
Width: 60 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Font: Bold Font: Bold
Text: $/min Text: Income
Align: Right Align: Right
Shadow: True Shadow: True
Label@ASSETS_HEADER: Label@ASSETS_HEADER:
X: 300 X: 320
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Font: Bold Font: Bold
@@ -372,7 +372,7 @@ Container@OBSERVER_WIDGETS:
Align: Right Align: Right
Shadow: True Shadow: True
Label@EARNED_HEADER: Label@EARNED_HEADER:
X: 380 X: 400
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Font: Bold Font: Bold
@@ -380,7 +380,7 @@ Container@OBSERVER_WIDGETS:
Align: Right Align: Right
Shadow: True Shadow: True
Label@SPENT_HEADER: Label@SPENT_HEADER:
X: 460 X: 480
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Font: Bold Font: Bold
@@ -388,7 +388,7 @@ Container@OBSERVER_WIDGETS:
Align: Right Align: Right
Shadow: True Shadow: True
Label@HARVESTERS_HEADER: Label@HARVESTERS_HEADER:
X: 540 X: 560
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Font: Bold Font: Bold
@@ -396,7 +396,7 @@ Container@OBSERVER_WIDGETS:
Align: Right Align: Right
Shadow: True Shadow: True
Label@DERRICKS_HEADER: Label@DERRICKS_HEADER:
X: 630 X: 650
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Font: Bold Font: Bold
@@ -695,7 +695,7 @@ Container@OBSERVER_WIDGETS:
ScrollItem@ECONOMY_PLAYER_TEMPLATE: ScrollItem@ECONOMY_PLAYER_TEMPLATE:
X: 0 X: 0
Y: 0 Y: 0
Width: 715 Width: 735
Height: 24 Height: 24
BaseName: scrollitem-nohover BaseName: scrollitem-nohover
Children: Children:
@@ -730,43 +730,43 @@ Container@OBSERVER_WIDGETS:
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Align: Right Align: Right
Shadow: True Shadow: True
Label@EARNED_MIN: Label@INCOME:
X: 240 X: 240
Y: 0 Y: 0
Width: 60 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Align: Right Align: Right
Shadow: True Shadow: True
Label@ASSETS: Label@ASSETS:
X: 300 X: 320
Y: 0 Y: 0
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Align: Right Align: Right
Shadow: True Shadow: True
Label@EARNED: Label@EARNED:
X: 380 X: 400
Y: 0 Y: 0
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Align: Right Align: Right
Shadow: True Shadow: True
Label@SPENT: Label@SPENT:
X: 460 X: 480
Y: 0 Y: 0
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Align: Right Align: Right
Shadow: True Shadow: True
Label@HARVESTERS: Label@HARVESTERS:
X: 540 X: 560
Y: 0 Y: 0
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Align: Right Align: Right
Shadow: True Shadow: True
Label@DERRICKS: Label@DERRICKS:
X: 630 X: 650
Y: 0 Y: 0
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
@@ -926,7 +926,7 @@ Container@OBSERVER_WIDGETS:
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Align: Right Align: Right
Shadow: True Shadow: True
Container@EARNED_THIS_MIN_GRAPH_CONTAINER: Container@INCOME_GRAPH_CONTAINER:
X: 0 X: 0
Y: 30 Y: 30
Width: PARENT_RIGHT Width: PARENT_RIGHT
@@ -939,21 +939,20 @@ Container@OBSERVER_WIDGETS:
Width: PARENT_RIGHT Width: PARENT_RIGHT
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Color: 00000090 Color: 00000090
LineGraph@EARNED_THIS_MIN_GRAPH: LineGraph@INCOME_GRAPH:
X: 0 X: 0
Y: 0 Y: 0
Width: PARENT_RIGHT Width: PARENT_RIGHT
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
ValueFormat: ${0} ValueFormat: ${0}
XAxisValueFormat: {0}
YAxisValueFormat: ${0:F0} YAxisValueFormat: ${0:F0}
XAxisSize: 20 XAxisSize: 40
YAxisSize: 10 XAxisTicksPerLabel: 2
XAxisLabel: Game Minute XAxisLabel: Game Minute
YAxisLabel: Earnings YAxisLabel: Earnings
LabelFont: TinyBold LabelFont: TinyBold
AxisFont: TinyBold AxisFont: TinyBold
Container@ARMY_THIS_MIN_GRAPH_CONTAINER: Container@ARMY_VALUE_GRAPH_CONTAINER:
X: 0 X: 0
Y: 30 Y: 30
Width: PARENT_RIGHT Width: PARENT_RIGHT
@@ -966,16 +965,15 @@ Container@OBSERVER_WIDGETS:
Width: PARENT_RIGHT Width: PARENT_RIGHT
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Color: 00000090 Color: 00000090
LineGraph@ARMY_THIS_MIN_GRAPH: LineGraph@ARMY_VALUE_GRAPH:
X: 0 X: 0
Y: 0 Y: 0
Width: PARENT_RIGHT Width: PARENT_RIGHT
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
ValueFormat: ${0} ValueFormat: ${0}
XAxisValueFormat: {0}
YAxisValueFormat: ${0:F0} YAxisValueFormat: ${0:F0}
XAxisSize: 20 XAxisSize: 40
YAxisSize: 10 XAxisTicksPerLabel: 2
XAxisLabel: Game Minute XAxisLabel: Game Minute
YAxisLabel: Army Value YAxisLabel: Army Value
LabelFont: TinyBold LabelFont: TinyBold

View File

@@ -292,7 +292,7 @@ Container@OBSERVER_WIDGETS:
Container@ECONOMY_STATS_HEADERS: Container@ECONOMY_STATS_HEADERS:
X: 0 X: 0
Y: 0 Y: 0
Width: 625 Width: 645
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Children: Children:
ColorBlock@HEADER_COLOR: ColorBlock@HEADER_COLOR:
@@ -323,16 +323,16 @@ Container@OBSERVER_WIDGETS:
Text: Cash Text: Cash
Align: Right Align: Right
Shadow: True Shadow: True
Label@EARNED_MIN_HEADER: Label@INCOME_HEADER:
X: 240 X: 240
Width: 60 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Font: Bold Font: Bold
Text: $/min Text: Income
Align: Right Align: Right
Shadow: True Shadow: True
Label@ASSETS_HEADER: Label@ASSETS_HEADER:
X: 300 X: 320
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Font: Bold Font: Bold
@@ -340,7 +340,7 @@ Container@OBSERVER_WIDGETS:
Align: Right Align: Right
Shadow: True Shadow: True
Label@EARNED_HEADER: Label@EARNED_HEADER:
X: 380 X: 400
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Font: Bold Font: Bold
@@ -348,7 +348,7 @@ Container@OBSERVER_WIDGETS:
Align: Right Align: Right
Shadow: True Shadow: True
Label@SPENT_HEADER: Label@SPENT_HEADER:
X: 460 X: 480
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Font: Bold Font: Bold
@@ -356,7 +356,7 @@ Container@OBSERVER_WIDGETS:
Align: Right Align: Right
Shadow: True Shadow: True
Label@HARVESTERS_HEADER: Label@HARVESTERS_HEADER:
X: 540 X: 560
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Font: Bold Font: Bold
@@ -653,7 +653,7 @@ Container@OBSERVER_WIDGETS:
ScrollItem@ECONOMY_PLAYER_TEMPLATE: ScrollItem@ECONOMY_PLAYER_TEMPLATE:
X: 0 X: 0
Y: 0 Y: 0
Width: 625 Width: 645
Height: 24 Height: 24
BaseName: scrollitem-nohover BaseName: scrollitem-nohover
Children: Children:
@@ -688,36 +688,36 @@ Container@OBSERVER_WIDGETS:
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Align: Right Align: Right
Shadow: True Shadow: True
Label@EARNED_MIN: Label@INCOME:
X: 240 X: 240
Y: 0 Y: 0
Width: 60 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Align: Right Align: Right
Shadow: True Shadow: True
Label@ASSETS: Label@ASSETS:
X: 300 X: 320
Y: 0 Y: 0
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Align: Right Align: Right
Shadow: True Shadow: True
Label@EARNED: Label@EARNED:
X: 380 X: 400
Y: 0 Y: 0
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Align: Right Align: Right
Shadow: True Shadow: True
Label@SPENT: Label@SPENT:
X: 460 X: 480
Y: 0 Y: 0
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Align: Right Align: Right
Shadow: True Shadow: True
Label@HARVESTERS: Label@HARVESTERS:
X: 540 X: 560
Y: 0 Y: 0
Width: 80 Width: 80
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
@@ -879,7 +879,7 @@ Container@OBSERVER_WIDGETS:
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Align: Right Align: Right
Shadow: True Shadow: True
Container@EARNED_THIS_MIN_GRAPH_CONTAINER: Container@INCOME_GRAPH_CONTAINER:
X: 0 X: 0
Y: 30 Y: 30
Width: PARENT_RIGHT Width: PARENT_RIGHT
@@ -892,21 +892,20 @@ Container@OBSERVER_WIDGETS:
Width: PARENT_RIGHT Width: PARENT_RIGHT
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Color: 00000090 Color: 00000090
LineGraph@EARNED_THIS_MIN_GRAPH: LineGraph@INCOME_GRAPH:
X: 0 X: 0
Y: 0 Y: 0
Width: PARENT_RIGHT Width: PARENT_RIGHT
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
ValueFormat: ${0} ValueFormat: ${0}
XAxisValueFormat: {0}
YAxisValueFormat: ${0:F0} YAxisValueFormat: ${0:F0}
XAxisSize: 20 XAxisSize: 40
YAxisSize: 10 XAxisTicksPerLabel: 2
XAxisLabel: Game Minute XAxisLabel: Game Minute
YAxisLabel: Earnings YAxisLabel: Earnings
LabelFont: TinyBold LabelFont: TinyBold
AxisFont: TinyBold AxisFont: TinyBold
Container@ARMY_THIS_MIN_GRAPH_CONTAINER: Container@ARMY_VALUE_GRAPH_CONTAINER:
X: 0 X: 0
Y: 30 Y: 30
Width: PARENT_RIGHT Width: PARENT_RIGHT
@@ -919,16 +918,15 @@ Container@OBSERVER_WIDGETS:
Width: PARENT_RIGHT Width: PARENT_RIGHT
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Color: 00000090 Color: 00000090
LineGraph@ARMY_THIS_MIN_GRAPH: LineGraph@ARMY_VALUE_GRAPH:
X: 0 X: 0
Y: 0 Y: 0
Width: PARENT_RIGHT Width: PARENT_RIGHT
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
ValueFormat: ${0} ValueFormat: ${0}
XAxisValueFormat: {0}
YAxisValueFormat: ${0:F0} YAxisValueFormat: ${0:F0}
XAxisSize: 20 XAxisSize: 40
YAxisSize: 10 XAxisTicksPerLabel: 2
XAxisLabel: Game Minute XAxisLabel: Game Minute
YAxisLabel: Army Value YAxisLabel: Army Value
LabelFont: TinyBold LabelFont: TinyBold