Add observer vision stats.

This commit is contained in:
Matthias Mailänder
2022-10-03 12:55:45 +02:00
committed by abcdefg30
parent e7dcbb3c2d
commit eb897d755e
7 changed files with 219 additions and 116 deletions

View File

@@ -69,6 +69,7 @@ namespace OpenRA.Traits
{
public enum SourceType : byte { PassiveVisibility, Shroud, Visibility }
public event Action<PPos> OnShroudChanged;
public int RevealedCells { get; private set; }
enum ShroudCellType : byte { Shroud, Fog, Visible }
class ShroudSource
@@ -155,6 +156,9 @@ namespace OpenRA.Traits
ExploreMapEnabled = gs.OptionOrDefault("explored", info.ExploredMapCheckboxEnabled);
if (ExploreMapEnabled)
self.World.AddFrameEndTask(w => ExploreAll());
if (!fogEnabled && ExploreMapEnabled)
RevealedCells = map.ProjectedCells.Length;
}
void ITick.Tick(Actor self)
@@ -205,6 +209,17 @@ namespace OpenRA.Traits
var puv = touched.PPosFromIndex(index);
if (map.Contains(puv))
OnShroudChanged(puv);
if (!disabledChanged && (fogEnabled || !ExploreMapEnabled))
{
if (type == ShroudCellType.Visible)
RevealedCells++;
else if (fogEnabled && oldResolvedType == ShroudCellType.Visible)
RevealedCells--;
}
if (self.Owner.WinState == WinState.Lost)
RevealedCells = 0;
}
}

View File

@@ -341,6 +341,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
var armyText = new CachedTransform<int, string>(i => "$" + i);
template.Get<LabelWidget>("ARMY_VALUE").GetText = () => armyText.Update(stats.ArmyValue);
var visionText = new CachedTransform<int, string>(i => Vision(i));
template.Get<LabelWidget>("VISION").GetText = () => player.Shroud.Disabled ? "100%" : visionText.Update(player.Shroud.RevealedCells);
return template;
}
@@ -569,6 +572,11 @@ namespace OpenRA.Mods.Common.Widgets.Logic
return (world.WorldTick == 0 ? 0 : orders / (world.WorldTick / 1500.0)).ToString("F1");
}
string Vision(int revealedCells)
{
return Math.Ceiling(revealedCells / (float)world.Map.ProjectedCells.Length * 100).ToString("F0") + "%";
}
static Color GetPowerColor(PowerState state)
{
if (state == PowerState.Critical)

View File

@@ -602,7 +602,7 @@ Container@OBSERVER_WIDGETS:
Container@COMBAT_STATS_HEADERS:
X: 0
Y: 0
Width: 730
Width: 760
Height: PARENT_BOTTOM
Children:
ColorBlock@HEADER_COLOR:
@@ -648,48 +648,57 @@ Container@OBSERVER_WIDGETS:
Label@UNITS_KILLED_HEADER:
X: 310
Y: 0
Width: 90
Width: 75
Height: PARENT_BOTTOM
Font: Bold
Text: Units Killed
Text: U. Killed
Align: Right
Shadow: True
Label@UNITS_DEAD_HEADER:
X: 400
X: 385
Y: 0
Width: 80
Width: 75
Height: PARENT_BOTTOM
Font: Bold
Text: Units Lost
Align: Right
Shadow: True
Label@BUILDINGS_KILLED_HEADER:
X: 480
Y: 0
Width: 85
Height: PARENT_BOTTOM
Font: Bold
Text: Bldg Killed
Align: Right
Shadow: True
Label@BUILDINGS_DEAD_HEADER:
X: 565
X: 460
Y: 0
Width: 75
Height: PARENT_BOTTOM
Font: Bold
Text: Bldg Lost
Text: B. Killed
Align: Right
Shadow: True
Label@BUILDINGS_DEAD_HEADER:
X: 535
Y: 0
Width: 75
Height: PARENT_BOTTOM
Font: Bold
Text: B. Lost
Align: Right
Shadow: True
Label@ARMY_VALUE_HEADER:
X: 640
X: 610
Y: 0
Width: 85
Width: 90
Height: PARENT_BOTTOM
Font: Bold
Text: Army Value
Align: Right
Shadow: True
Label@VISION_HEADER:
X: 700
Y: 0
Width: 60
Height: PARENT_BOTTOM
Font: Bold
Text: Vision
Align: Right
Shadow: True
ScrollPanel@PLAYER_STATS_PANEL:
X: 0
Y: 54
@@ -1008,7 +1017,7 @@ Container@OBSERVER_WIDGETS:
ScrollItem@COMBAT_PLAYER_TEMPLATE:
X: 0
Y: 0
Width: 730
Width: 760
Height: 24
Background: scrollitem-nohover
Children:
@@ -1053,38 +1062,45 @@ Container@OBSERVER_WIDGETS:
Label@UNITS_KILLED:
X: 310
Y: 0
Width: 90
Width: 75
Height: PARENT_BOTTOM
Align: Right
Shadow: True
Label@UNITS_DEAD:
X: 400
X: 385
Y: 0
Width: 80
Width: 75
Height: PARENT_BOTTOM
Align: Right
Shadow: True
Label@BUILDINGS_KILLED:
X: 480
X: 460
Y: 0
Width: 85
Width: 75
Height: PARENT_BOTTOM
Align: Right
Shadow: True
Label@BUILDINGS_DEAD:
X: 565
X: 535
Y: 0
Width: 75
Height: PARENT_BOTTOM
Align: Right
Shadow: True
Label@ARMY_VALUE:
X: 640
X: 605
Y: 0
Width: 85
Height: PARENT_BOTTOM
Align: Right
Shadow: True
Label@VISION:
X: 690
Y: 0
Width: 60
Height: PARENT_BOTTOM
Align: Right
Shadow: True
Container@INCOME_GRAPH_CONTAINER:
X: 0
Y: 30

View File

@@ -475,7 +475,7 @@ Container@OBSERVER_WIDGETS:
Container@COMBAT_STATS_HEADERS:
X: 0
Y: 0
Width: 735
Width: 760
Height: PARENT_BOTTOM
Children:
ColorBlock@HEADER_COLOR:
@@ -519,43 +519,43 @@ Container@OBSERVER_WIDGETS:
Align: Right
Shadow: True
Label@UNITS_KILLED_HEADER:
X: 305
X: 310
Y: 0
Width: 90
Width: 75
Height: PARENT_BOTTOM
Font: Bold
Text: Units Killed
Text: U. Killed
Align: Right
Shadow: True
Label@UNITS_DEAD_HEADER:
X: 395
X: 385
Y: 0
Width: 80
Width: 75
Height: PARENT_BOTTOM
Font: Bold
Text: Units Lost
Text: U. Lost
Align: Right
Shadow: True
Label@BUILDINGS_KILLED_HEADER:
X: 475
X: 460
Y: 0
Width: 85
Width: 75
Height: PARENT_BOTTOM
Font: Bold
Text: Bldg Killed
Text: B. Killed
Align: Right
Shadow: True
Label@BUILDINGS_DEAD_HEADER:
X: 560
X: 535
Y: 0
Width: 80
Width: 75
Height: PARENT_BOTTOM
Font: Bold
Text: Bldg Lost
Text: B. Lost
Align: Right
Shadow: True
Label@ARMY_VALUE_HEADER:
X: 640
X: 610
Y: 0
Width: 90
Height: PARENT_BOTTOM
@@ -563,6 +563,15 @@ Container@OBSERVER_WIDGETS:
Text: Army Value
Align: Right
Shadow: True
Label@VISION_HEADER:
X: 700
Y: 0
Width: 60
Height: PARENT_BOTTOM
Font: Bold
Text: Vision
Align: Right
Shadow: True
ScrollPanel@PLAYER_STATS_PANEL:
X: 0
Y: 55
@@ -866,7 +875,7 @@ Container@OBSERVER_WIDGETS:
ScrollItem@COMBAT_PLAYER_TEMPLATE:
X: 0
Y: 0
Width: 735
Width: 760
Height: 25
Background: scrollitem-nohover
Children:
@@ -907,40 +916,47 @@ Container@OBSERVER_WIDGETS:
Align: Right
Shadow: True
Label@UNITS_KILLED:
X: 305
X: 310
Y: 0
Width: 90
Width: 75
Height: PARENT_BOTTOM
Align: Right
Shadow: True
Label@UNITS_DEAD:
X: 395
X: 385
Y: 0
Width: 80
Width: 75
Height: PARENT_BOTTOM
Align: Right
Shadow: True
Label@BUILDINGS_KILLED:
X: 475
X: 460
Y: 0
Width: 85
Width: 75
Height: PARENT_BOTTOM
Align: Right
Shadow: True
Label@BUILDINGS_DEAD:
X: 560
X: 535
Y: 0
Width: 80
Width: 75
Height: PARENT_BOTTOM
Align: Right
Shadow: True
Label@ARMY_VALUE:
X: 640
X: 610
Y: 0
Width: 90
Height: PARENT_BOTTOM
Align: Right
Shadow: True
Label@VISION:
X: 700
Y: 0
Width: 60
Height: PARENT_BOTTOM
Align: Right
Shadow: True
Container@INCOME_GRAPH_CONTAINER:
X: 0
Y: 30

View File

@@ -495,7 +495,7 @@ Container@OBSERVER_WIDGETS:
Container@COMBAT_STATS_HEADERS:
X: 0
Y: 0
Width: 735
Width: 755
Height: PARENT_BOTTOM
Children:
ColorBlock@HEADER_COLOR:
@@ -541,41 +541,41 @@ Container@OBSERVER_WIDGETS:
Label@UNITS_KILLED_HEADER:
X: 305
Y: 0
Width: 90
Width: 75
Height: PARENT_BOTTOM
Font: Bold
Text: Units Killed
Text: U. Killed
Align: Right
Shadow: True
Label@UNITS_DEAD_HEADER:
X: 395
X: 380
Y: 0
Width: 80
Width: 75
Height: PARENT_BOTTOM
Font: Bold
Text: Units Lost
Text: U. Lost
Align: Right
Shadow: True
Label@BUILDINGS_KILLED_HEADER:
X: 475
X: 455
Y: 0
Width: 85
Width: 75
Height: PARENT_BOTTOM
Font: Bold
Text: Bldg Killed
Text: B. Killed
Align: Right
Shadow: True
Label@BUILDINGS_DEAD_HEADER:
X: 560
X: 530
Y: 0
Width: 80
Width: 75
Height: PARENT_BOTTOM
Font: Bold
Text: Bldg Lost
Text: B. Lost
Align: Right
Shadow: True
Label@ARMY_VALUE_HEADER:
X: 640
X: 605
Y: 0
Width: 90
Height: PARENT_BOTTOM
@@ -583,6 +583,15 @@ Container@OBSERVER_WIDGETS:
Text: Army Value
Align: Right
Shadow: True
Label@VISION_HEADER:
X: 695
Y: 0
Width: 60
Height: PARENT_BOTTOM
Font: Bold
Text: Vision
Align: Right
Shadow: True
ScrollPanel@PLAYER_STATS_PANEL:
X: 0
Y: 55
@@ -889,7 +898,7 @@ Container@OBSERVER_WIDGETS:
ScrollItem@COMBAT_PLAYER_TEMPLATE:
X: 0
Y: 0
Width: 735
Width: 755
Height: 25
Background: scrollitem-nohover
Children:
@@ -932,38 +941,45 @@ Container@OBSERVER_WIDGETS:
Label@UNITS_KILLED:
X: 305
Y: 0
Width: 90
Width: 75
Height: PARENT_BOTTOM
Align: Right
Shadow: True
Label@UNITS_DEAD:
X: 395
X: 380
Y: 0
Width: 80
Width: 75
Height: PARENT_BOTTOM
Align: Right
Shadow: True
Label@BUILDINGS_KILLED:
X: 475
X: 455
Y: 0
Width: 85
Width: 75
Height: PARENT_BOTTOM
Align: Right
Shadow: True
Label@BUILDINGS_DEAD:
X: 560
X: 530
Y: 0
Width: 80
Width: 75
Height: PARENT_BOTTOM
Align: Right
Shadow: True
Label@ARMY_VALUE:
X: 640
X: 605
Y: 0
Width: 90
Height: PARENT_BOTTOM
Align: Right
Shadow: True
Label@VISION:
X: 695
Y: 0
Width: 60
Height: PARENT_BOTTOM
Align: Right
Shadow: True
Container@INCOME_GRAPH_CONTAINER:
X: 0
Y: 30

View File

@@ -543,7 +543,7 @@ Container@OBSERVER_WIDGETS:
Container@COMBAT_STATS_HEADERS:
X: 0
Y: 0
Width: 740
Width: 760
Height: PARENT_BOTTOM
Children:
ColorBlock@HEADER_COLOR:
@@ -589,41 +589,41 @@ Container@OBSERVER_WIDGETS:
Label@UNITS_KILLED_HEADER:
X: 310
Y: 0
Width: 90
Width: 75
Height: PARENT_BOTTOM
Font: Bold
Text: Units Killed
Text: U. Killed
Align: Right
Shadow: True
Label@UNITS_DEAD_HEADER:
X: 400
X: 385
Y: 0
Width: 80
Width: 75
Height: PARENT_BOTTOM
Font: Bold
Text: Units Lost
Text: U. Lost
Align: Right
Shadow: True
Label@BUILDINGS_KILLED_HEADER:
X: 480
X: 460
Y: 0
Width: 85
Width: 75
Height: PARENT_BOTTOM
Font: Bold
Text: Bldg Killed
Text: B. Killed
Align: Right
Shadow: True
Label@BUILDINGS_DEAD_HEADER:
X: 565
X: 535
Y: 0
Width: 80
Width: 75
Height: PARENT_BOTTOM
Font: Bold
Text: Bldg Lost
Text: B. Lost
Align: Right
Shadow: True
Label@ARMY_VALUE_HEADER:
X: 645
X: 610
Y: 0
Width: 90
Height: PARENT_BOTTOM
@@ -631,6 +631,15 @@ Container@OBSERVER_WIDGETS:
Text: Army Value
Align: Right
Shadow: True
Label@VISION_HEADER:
X: 700
Y: 0
Width: 60
Height: PARENT_BOTTOM
Font: Bold
Text: Vision
Align: Right
Shadow: True
ScrollPanel@PLAYER_STATS_PANEL:
X: 0
Y: 54
@@ -951,7 +960,7 @@ Container@OBSERVER_WIDGETS:
ScrollItem@COMBAT_PLAYER_TEMPLATE:
X: 0
Y: 0
Width: 740
Width: 760
Height: 24
Background: scrollitem-nohover
Children:
@@ -996,38 +1005,45 @@ Container@OBSERVER_WIDGETS:
Label@UNITS_KILLED:
X: 310
Y: 0
Width: 90
Width: 75
Height: PARENT_BOTTOM
Align: Right
Shadow: True
Label@UNITS_DEAD:
X: 400
X: 385
Y: 0
Width: 80
Width: 75
Height: PARENT_BOTTOM
Align: Right
Shadow: True
Label@BUILDINGS_KILLED:
X: 480
X: 460
Y: 0
Width: 85
Width: 75
Height: PARENT_BOTTOM
Align: Right
Shadow: True
Label@BUILDINGS_DEAD:
X: 565
X: 535
Y: 0
Width: 80
Width: 75
Height: PARENT_BOTTOM
Align: Right
Shadow: True
Label@ARMY_VALUE:
X: 645
X: 610
Y: 0
Width: 90
Height: PARENT_BOTTOM
Align: Right
Shadow: True
Label@VISION:
X: 700
Y: 0
Width: 60
Height: PARENT_BOTTOM
Align: Right
Shadow: True
Container@INCOME_GRAPH_CONTAINER:
X: 0
Y: 30

View File

@@ -495,7 +495,7 @@ Container@OBSERVER_WIDGETS:
Container@COMBAT_STATS_HEADERS:
X: 0
Y: 0
Width: 740
Width: 760
Height: PARENT_BOTTOM
Children:
ColorBlock@HEADER_COLOR:
@@ -541,41 +541,41 @@ Container@OBSERVER_WIDGETS:
Label@UNITS_KILLED_HEADER:
X: 310
Y: 0
Width: 90
Width: 75
Height: PARENT_BOTTOM
Font: Bold
Text: Units Killed
Text: U. Killed
Align: Right
Shadow: True
Label@UNITS_DEAD_HEADER:
X: 400
X: 385
Y: 0
Width: 80
Width: 75
Height: PARENT_BOTTOM
Font: Bold
Text: Units Lost
Text: U. Lost
Align: Right
Shadow: True
Label@BUILDINGS_KILLED_HEADER:
X: 480
X: 460
Y: 0
Width: 85
Width: 75
Height: PARENT_BOTTOM
Font: Bold
Text: Bldg Killed
Text: B. Killed
Align: Right
Shadow: True
Label@BUILDINGS_DEAD_HEADER:
X: 565
X: 535
Y: 0
Width: 80
Width: 75
Height: PARENT_BOTTOM
Font: Bold
Text: Bldg Lost
Text: B. Lost
Align: Right
Shadow: True
Label@ARMY_VALUE_HEADER:
X: 645
X: 610
Y: 0
Width: 90
Height: PARENT_BOTTOM
@@ -583,6 +583,15 @@ Container@OBSERVER_WIDGETS:
Text: Army Value
Align: Right
Shadow: True
Label@VISION_HEADER:
X: 700
Y: 0
Width: 60
Height: PARENT_BOTTOM
Font: Bold
Text: Vision
Align: Right
Shadow: True
ScrollPanel@PLAYER_STATS_PANEL:
X: 0
Y: 54
@@ -896,7 +905,7 @@ Container@OBSERVER_WIDGETS:
ScrollItem@COMBAT_PLAYER_TEMPLATE:
X: 0
Y: 0
Width: 740
Width: 760
Height: 24
Background: scrollitem-nohover
Children:
@@ -941,38 +950,45 @@ Container@OBSERVER_WIDGETS:
Label@UNITS_KILLED:
X: 310
Y: 0
Width: 90
Width: 75
Height: PARENT_BOTTOM
Align: Right
Shadow: True
Label@UNITS_DEAD:
X: 400
X: 385
Y: 0
Width: 80
Width: 75
Height: PARENT_BOTTOM
Align: Right
Shadow: True
Label@BUILDINGS_KILLED:
X: 480
X: 460
Y: 0
Width: 85
Width: 75
Height: PARENT_BOTTOM
Align: Right
Shadow: True
Label@BUILDINGS_DEAD:
X: 565
X: 535
Y: 0
Width: 80
Width: 75
Height: PARENT_BOTTOM
Align: Right
Shadow: True
Label@ARMY_VALUE:
X: 645
X: 610
Y: 0
Width: 90
Height: PARENT_BOTTOM
Align: Right
Shadow: True
Label@VISION:
X: 700
Y: 0
Width: 60
Height: PARENT_BOTTOM
Align: Right
Shadow: True
Container@INCOME_GRAPH_CONTAINER:
X: 0
Y: 30