add Shroud selector to spectator mode, closes #2463
This commit is contained in:
@@ -42,28 +42,16 @@ namespace OpenRA
|
||||
public readonly Shroud LocalShroud;
|
||||
|
||||
public Player RenderedPlayer;
|
||||
public Shroud RenderedShroud {
|
||||
get {
|
||||
if(RenderedPlayer == null)
|
||||
{
|
||||
return LocalShroud;
|
||||
}else{
|
||||
return RenderedPlayer.Shroud;
|
||||
}
|
||||
}
|
||||
}
|
||||
public Shroud RenderedShroud { get { return RenderedPlayer != null ? RenderedPlayer.Shroud : LocalShroud; } }
|
||||
|
||||
|
||||
public void SetLocalPlayer(string pr)
|
||||
{
|
||||
if (!(orderManager.Connection is ReplayConnection))
|
||||
{
|
||||
LocalPlayer = Players.FirstOrDefault(p => p.InternalName == pr);
|
||||
RenderedPlayer = LocalPlayer;
|
||||
}else{
|
||||
|
||||
}
|
||||
|
||||
if (orderManager.Connection is ReplayConnection)
|
||||
return;
|
||||
|
||||
LocalPlayer = Players.FirstOrDefault(p => p.InternalName == pr);
|
||||
RenderedPlayer = LocalPlayer;
|
||||
}
|
||||
|
||||
public readonly Actor WorldActor;
|
||||
|
||||
@@ -10,7 +10,9 @@
|
||||
|
||||
using OpenRA.Traits;
|
||||
using OpenRA.Widgets;
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
|
||||
namespace OpenRA.Mods.RA.Widgets.Logic
|
||||
{
|
||||
@@ -56,6 +58,37 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
||||
optionsBG.Get<ButtonWidget>("SURRENDER").IsVisible = () => false;
|
||||
|
||||
Ui.Root.Get<ButtonWidget>("INGAME_STATS_BUTTON").OnClick = () => gameRoot.Get("OBSERVER_STATS").Visible ^= true;
|
||||
|
||||
var shroudSelector = Ui.Root.GetOrNull<DropDownButtonWidget>("SHROUD_SELECTOR");
|
||||
if (shroudSelector != null)
|
||||
{
|
||||
if (world.RenderedShroud == world.LocalShroud)
|
||||
shroudSelector.GetText = () => world.RenderedPlayer != null ? "{0}'s View".F(world.RenderedPlayer.PlayerName) : "Worldview";
|
||||
|
||||
shroudSelector.OnMouseDown = _ =>
|
||||
{
|
||||
|
||||
var options = world.Players.Where(p => !p.NonCombatant).Select(p => new DropDownOption
|
||||
{
|
||||
Title = "{0}'s View".F(p.PlayerName),
|
||||
IsSelected = () => world.RenderedPlayer == p,
|
||||
OnClick = () => { world.RenderedPlayer = p; world.RenderedShroud.Jank(); }
|
||||
}).ToList();
|
||||
options.Add(new DropDownOption
|
||||
{
|
||||
Title = "Worldview",
|
||||
IsSelected = () => world.RenderedPlayer == null,
|
||||
OnClick = () => { world.RenderedPlayer = null; world.RenderedShroud.Jank(); }
|
||||
});
|
||||
Func<DropDownOption, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) =>
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(template, option.IsSelected, option.OnClick);
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => option.Title;
|
||||
return item;
|
||||
};
|
||||
shroudSelector.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", options.Count() * 30, options, setupItem);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
void UnregisterEvents()
|
||||
@@ -68,5 +101,12 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
||||
{
|
||||
gameRoot.Get<ChatDisplayWidget>("CHAT_DISPLAY").AddLine(c, from, text);
|
||||
}
|
||||
|
||||
class DropDownOption
|
||||
{
|
||||
public string Title;
|
||||
public Func<bool> IsSelected;
|
||||
public Action OnClick;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -306,6 +306,13 @@ Container@OBSERVER_ROOT:
|
||||
Width:PARENT_RIGHT-19
|
||||
Height:PARENT_BOTTOM-19
|
||||
WorldInteractionController:INTERACTION_CONTROLLER
|
||||
DropDownButton@SHROUD_SELECTOR:
|
||||
X:WINDOW_RIGHT-250
|
||||
Y:260
|
||||
Width:240
|
||||
Height:25
|
||||
Font:Bold
|
||||
Visible:true
|
||||
WorldTooltip:
|
||||
Background@INGAME_OPTIONS_BG:
|
||||
X:(WINDOW_RIGHT - WIDTH)/2
|
||||
|
||||
Reference in New Issue
Block a user