add Shroud selector to spectator mode, closes #2463
This commit is contained in:
@@ -42,28 +42,16 @@ namespace OpenRA
|
|||||||
public readonly Shroud LocalShroud;
|
public readonly Shroud LocalShroud;
|
||||||
|
|
||||||
public Player RenderedPlayer;
|
public Player RenderedPlayer;
|
||||||
public Shroud RenderedShroud {
|
public Shroud RenderedShroud { get { return RenderedPlayer != null ? RenderedPlayer.Shroud : LocalShroud; } }
|
||||||
get {
|
|
||||||
if(RenderedPlayer == null)
|
|
||||||
{
|
|
||||||
return LocalShroud;
|
|
||||||
}else{
|
|
||||||
return RenderedPlayer.Shroud;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void SetLocalPlayer(string pr)
|
public void SetLocalPlayer(string pr)
|
||||||
{
|
{
|
||||||
if (!(orderManager.Connection is ReplayConnection))
|
if (orderManager.Connection is ReplayConnection)
|
||||||
{
|
return;
|
||||||
LocalPlayer = Players.FirstOrDefault(p => p.InternalName == pr);
|
|
||||||
RenderedPlayer = LocalPlayer;
|
LocalPlayer = Players.FirstOrDefault(p => p.InternalName == pr);
|
||||||
}else{
|
RenderedPlayer = LocalPlayer;
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public readonly Actor WorldActor;
|
public readonly Actor WorldActor;
|
||||||
|
|||||||
@@ -10,7 +10,9 @@
|
|||||||
|
|
||||||
using OpenRA.Traits;
|
using OpenRA.Traits;
|
||||||
using OpenRA.Widgets;
|
using OpenRA.Widgets;
|
||||||
|
using System;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace OpenRA.Mods.RA.Widgets.Logic
|
namespace OpenRA.Mods.RA.Widgets.Logic
|
||||||
{
|
{
|
||||||
@@ -56,6 +58,37 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
|||||||
optionsBG.Get<ButtonWidget>("SURRENDER").IsVisible = () => false;
|
optionsBG.Get<ButtonWidget>("SURRENDER").IsVisible = () => false;
|
||||||
|
|
||||||
Ui.Root.Get<ButtonWidget>("INGAME_STATS_BUTTON").OnClick = () => gameRoot.Get("OBSERVER_STATS").Visible ^= true;
|
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()
|
void UnregisterEvents()
|
||||||
@@ -68,5 +101,12 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
|||||||
{
|
{
|
||||||
gameRoot.Get<ChatDisplayWidget>("CHAT_DISPLAY").AddLine(c, from, text);
|
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
|
Width:PARENT_RIGHT-19
|
||||||
Height:PARENT_BOTTOM-19
|
Height:PARENT_BOTTOM-19
|
||||||
WorldInteractionController:INTERACTION_CONTROLLER
|
WorldInteractionController:INTERACTION_CONTROLLER
|
||||||
|
DropDownButton@SHROUD_SELECTOR:
|
||||||
|
X:WINDOW_RIGHT-250
|
||||||
|
Y:260
|
||||||
|
Width:240
|
||||||
|
Height:25
|
||||||
|
Font:Bold
|
||||||
|
Visible:true
|
||||||
WorldTooltip:
|
WorldTooltip:
|
||||||
Background@INGAME_OPTIONS_BG:
|
Background@INGAME_OPTIONS_BG:
|
||||||
X:(WINDOW_RIGHT - WIDTH)/2
|
X:(WINDOW_RIGHT - WIDTH)/2
|
||||||
|
|||||||
Reference in New Issue
Block a user