Use new mechanism for ra dropdowns
This commit is contained in:
@@ -333,8 +333,11 @@ namespace OpenRA.Mods.Cnc.Widgets
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (showBotOptions)
|
if (showBotOptions)
|
||||||
foreach (var bot in Rules.Info["player"].Traits.WithInterface<IBotInfo>().Select(t => t.Name))
|
foreach (var b in Rules.Info["player"].Traits.WithInterface<IBotInfo>().Select(t => t.Name))
|
||||||
|
{
|
||||||
|
var bot = b;
|
||||||
options.Add(new SlotDropDownOption("Bot: {0}".F(bot), "slot_bot {0} {1}".F(slot.Index, bot), () => slot.Bot == bot));
|
options.Add(new SlotDropDownOption("Bot: {0}".F(bot), "slot_bot {0} {1}".F(slot.Index, bot), () => slot.Bot == bot));
|
||||||
|
}
|
||||||
|
|
||||||
Func<SlotDropDownOption, ScrollItemWidget, ScrollItemWidget> setupItem = (o, itemTemplate) =>
|
Func<SlotDropDownOption, ScrollItemWidget, ScrollItemWidget> setupItem = (o, itemTemplate) =>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -190,89 +190,84 @@ namespace OpenRA.Mods.RA.Widgets.Delegates
|
|||||||
{
|
{
|
||||||
return orderManager.LobbyInfo.ClientInSlot( slot );
|
return orderManager.LobbyInfo.ClientInSlot( slot );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ShowSlotDropDown(Session.Slot slot, ButtonWidget name, bool showBotOptions)
|
class SlotDropDownOption
|
||||||
{
|
{
|
||||||
var dropDownOptions = new List<Pair<string, Action>>
|
public string Title;
|
||||||
|
public string Order;
|
||||||
|
public Func<bool> Selected;
|
||||||
|
|
||||||
|
public SlotDropDownOption(string title, string order, Func<bool> selected)
|
||||||
{
|
{
|
||||||
new Pair<string, Action>( "Open",
|
Title = title;
|
||||||
() => orderManager.IssueOrder( Order.Command( "slot_open " + slot.Index ) )),
|
Order = order;
|
||||||
new Pair<string, Action>( "Closed",
|
Selected = selected;
|
||||||
() => orderManager.IssueOrder( Order.Command( "slot_close " + slot.Index ) )),
|
|
||||||
};
|
|
||||||
|
|
||||||
if (showBotOptions)
|
|
||||||
{
|
|
||||||
var bots = Rules.Info["player"].Traits.WithInterface<IBotInfo>().Select(t => t.Name);
|
|
||||||
bots.Do(bot =>
|
|
||||||
dropDownOptions.Add(new Pair<string, Action>("Bot: {0}".F(bot),
|
|
||||||
() => orderManager.IssueOrder(Order.Command("slot_bot {0} {1}".F(slot.Index, bot))))));
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
DropDownButtonWidget.ShowDropDown( name,
|
|
||||||
dropDownOptions,
|
bool ShowSlotDropDown(DropDownButtonWidget dropdown, Session.Slot slot, bool showBotOptions)
|
||||||
(ac, w) => new LabelWidget
|
{
|
||||||
|
var options = new List<SlotDropDownOption>()
|
||||||
|
{
|
||||||
|
new SlotDropDownOption("Open", "slot_open "+slot.Index, () => (!slot.Closed && slot.Bot == null)),
|
||||||
|
new SlotDropDownOption("Closed", "slot_close "+slot.Index, () => slot.Closed)
|
||||||
|
};
|
||||||
|
|
||||||
|
if (showBotOptions)
|
||||||
|
foreach (var b in Rules.Info["player"].Traits.WithInterface<IBotInfo>().Select(t => t.Name))
|
||||||
{
|
{
|
||||||
Bounds = new Rectangle(0, 0, w, 24),
|
var bot = b;
|
||||||
Text = " {0}".F(ac.First),
|
options.Add(new SlotDropDownOption("Bot: {0}".F(bot), "slot_bot {0} {1}".F(slot.Index, bot), () => slot.Bot == bot));
|
||||||
OnMouseUp = mi => { ac.Second(); return true; },
|
}
|
||||||
});
|
Func<SlotDropDownOption, ScrollItemWidget, ScrollItemWidget> setupItem = (o, itemTemplate) =>
|
||||||
|
{
|
||||||
|
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||||
|
o.Selected,
|
||||||
|
() => orderManager.IssueOrder(Order.Command(o.Order)));
|
||||||
|
item.GetWidget<LabelWidget>("LABEL").GetText = () => o.Title;
|
||||||
|
return item;
|
||||||
|
};
|
||||||
|
|
||||||
|
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 150, options, setupItem);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ShowRaceDropDown(Session.Slot s, ButtonWidget race)
|
bool ShowRaceDropDown(DropDownButtonWidget dropdown, Session.Slot slot)
|
||||||
{
|
{
|
||||||
if (Map.Players[s.MapPlayer].LockRace)
|
if (Map.Players[slot.MapPlayer].LockRace)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
var dropDownOptions = new List<Pair<string, Action>>();
|
var sr = GetClientInSlot(slot).Country;
|
||||||
foreach (var c in CountryNames)
|
Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (race, itemTemplate) =>
|
||||||
{
|
{
|
||||||
var cc = c;
|
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||||
dropDownOptions.Add(new Pair<string, Action>( cc.Key,
|
() => sr == race,
|
||||||
() => orderManager.IssueOrder( Order.Command("race "+cc.Key) )) );
|
() => orderManager.IssueOrder(Order.Command("race "+race)));
|
||||||
|
item.GetWidget<LabelWidget>("LABEL").GetText = () => CountryNames[race];
|
||||||
|
var flag = item.GetWidget<ImageWidget>("FLAG");
|
||||||
|
flag.GetImageCollection = () => "flags";
|
||||||
|
flag.GetImageName = () => race;
|
||||||
|
return item;
|
||||||
};
|
};
|
||||||
|
|
||||||
DropDownButtonWidget.ShowDropDown( race,
|
dropdown.ShowDropDown("RACE_DROPDOWN_TEMPLATE", 150, CountryNames.Keys.ToList(), setupItem);
|
||||||
dropDownOptions,
|
|
||||||
(ac, w) =>
|
|
||||||
{
|
|
||||||
var ret = new LabelWidget
|
|
||||||
{
|
|
||||||
Bounds = new Rectangle(0, 0, w, 24),
|
|
||||||
Text = " {0}".F(CountryNames[ac.First]),
|
|
||||||
OnMouseUp = mi => { ac.Second(); return true; },
|
|
||||||
};
|
|
||||||
|
|
||||||
ret.AddChild(new ImageWidget
|
|
||||||
{
|
|
||||||
Bounds = new Rectangle(5, 5, 40, 15),
|
|
||||||
GetImageName = () => ac.First,
|
|
||||||
GetImageCollection = () => "flags",
|
|
||||||
});
|
|
||||||
return ret;
|
|
||||||
});
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ShowTeamDropDown(ButtonWidget team)
|
bool ShowTeamDropDown(DropDownButtonWidget dropdown, Session.Slot slot)
|
||||||
{
|
{
|
||||||
var dropDownOptions = new List<Pair<string, Action>>();
|
var c = GetClientInSlot(slot);
|
||||||
for (int i = 0; i <= Map.PlayerCount; i++)
|
Func<int, ScrollItemWidget, ScrollItemWidget> setupItem = (ii, itemTemplate) =>
|
||||||
{
|
{
|
||||||
var ii = i;
|
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||||
dropDownOptions.Add(new Pair<string, Action>( ii == 0 ? "-" : ii.ToString(),
|
() => c.Team == ii,
|
||||||
() => orderManager.IssueOrder( Order.Command("team "+ii) )) );
|
() => orderManager.IssueOrder(Order.Command("team "+ii)));
|
||||||
|
item.GetWidget<LabelWidget>("LABEL").GetText = () => ii == 0 ? "-" : ii.ToString();
|
||||||
|
return item;
|
||||||
};
|
};
|
||||||
|
|
||||||
DropDownButtonWidget.ShowDropDown( team,
|
var options = Graphics.Util.MakeArray(Map.PlayerCount, i => i).ToList();
|
||||||
dropDownOptions,
|
dropdown.ShowDropDown("TEAM_DROPDOWN_TEMPLATE", 150, options, setupItem);
|
||||||
(ac, w) => new LabelWidget
|
|
||||||
{
|
|
||||||
Bounds = new Rectangle(0, 0, w, 24),
|
|
||||||
Text = " {0}".F(ac.First),
|
|
||||||
OnMouseUp = mi => { ac.Second(); return true; },
|
|
||||||
});
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -327,18 +322,18 @@ namespace OpenRA.Mods.RA.Widgets.Delegates
|
|||||||
if (slot.Spectator)
|
if (slot.Spectator)
|
||||||
{
|
{
|
||||||
template = EmptySlotTemplateHost.Clone();
|
template = EmptySlotTemplateHost.Clone();
|
||||||
var name = template.GetWidget<ButtonWidget>("NAME");
|
var name = template.GetWidget<DropDownButtonWidget>("NAME");
|
||||||
name.GetText = () => s.Closed ? "Closed" : "Open";
|
name.GetText = () => s.Closed ? "Closed" : "Open";
|
||||||
name.OnMouseDown = _ => ShowSlotDropDown(s, name, false);
|
name.OnMouseDown = _ => ShowSlotDropDown(name, s, false);
|
||||||
var btn = template.GetWidget<ButtonWidget>("JOIN");
|
var btn = template.GetWidget<ButtonWidget>("JOIN");
|
||||||
btn.GetText = () => "Spectate in this slot";
|
btn.GetText = () => "Spectate in this slot";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
template = EmptySlotTemplateHost.Clone();
|
template = EmptySlotTemplateHost.Clone();
|
||||||
var name = template.GetWidget<ButtonWidget>("NAME");
|
var name = template.GetWidget<DropDownButtonWidget>("NAME");
|
||||||
name.GetText = () => s.Closed ? "Closed" : (s.Bot == null) ? "Open" : s.Bot;
|
name.GetText = () => s.Closed ? "Closed" : (s.Bot == null) ? "Open" : s.Bot;
|
||||||
name.OnMouseDown = _ => ShowSlotDropDown(s, name, Map.Players[ s.MapPlayer ].AllowBots);
|
name.OnMouseDown = _ => ShowSlotDropDown(name, s, Map.Players[ s.MapPlayer ].AllowBots);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -393,8 +388,8 @@ namespace OpenRA.Mods.RA.Widgets.Delegates
|
|||||||
var colorBlock = color.GetWidget<ColorBlockWidget>("COLORBLOCK");
|
var colorBlock = color.GetWidget<ColorBlockWidget>("COLORBLOCK");
|
||||||
colorBlock.GetColor = () => c.ColorRamp.GetColor(0);
|
colorBlock.GetColor = () => c.ColorRamp.GetColor(0);
|
||||||
|
|
||||||
var faction = template.GetWidget<ButtonWidget>("FACTION");
|
var faction = template.GetWidget<DropDownButtonWidget>("FACTION");
|
||||||
faction.OnMouseDown = _ => ShowRaceDropDown(s, faction);
|
faction.OnMouseDown = _ => ShowRaceDropDown(faction, s);
|
||||||
|
|
||||||
var factionname = faction.GetWidget<LabelWidget>("FACTIONNAME");
|
var factionname = faction.GetWidget<LabelWidget>("FACTIONNAME");
|
||||||
factionname.GetText = () => CountryNames[c.Country];
|
factionname.GetText = () => CountryNames[c.Country];
|
||||||
@@ -402,8 +397,8 @@ namespace OpenRA.Mods.RA.Widgets.Delegates
|
|||||||
factionflag.GetImageName = () => c.Country;
|
factionflag.GetImageName = () => c.Country;
|
||||||
factionflag.GetImageCollection = () => "flags";
|
factionflag.GetImageCollection = () => "flags";
|
||||||
|
|
||||||
var team = template.GetWidget<ButtonWidget>("TEAM");
|
var team = template.GetWidget<DropDownButtonWidget>("TEAM");
|
||||||
team.OnMouseDown = _ => ShowTeamDropDown(team);
|
team.OnMouseDown = _ => ShowTeamDropDown(team, s);
|
||||||
team.GetText = () => (c.Team == 0) ? "-" : c.Team.ToString();
|
team.GetText = () => (c.Team == 0) ? "-" : c.Team.ToString();
|
||||||
|
|
||||||
var status = template.GetWidget<CheckboxWidget>("STATUS");
|
var status = template.GetWidget<CheckboxWidget>("STATUS");
|
||||||
|
|||||||
@@ -89,4 +89,49 @@ ScrollPanel@LABEL_DROPDOWN_TEMPLATE:
|
|||||||
Id:LABEL
|
Id:LABEL
|
||||||
X:10
|
X:10
|
||||||
Width:PARENT_RIGHT-20
|
Width:PARENT_RIGHT-20
|
||||||
Height:25
|
Height:25
|
||||||
|
|
||||||
|
ScrollPanel@RACE_DROPDOWN_TEMPLATE:
|
||||||
|
Id:RACE_DROPDOWN_TEMPLATE
|
||||||
|
Width:DROPDOWN_WIDTH
|
||||||
|
Background:panel-black
|
||||||
|
Children:
|
||||||
|
ScrollItem@TEMPLATE:
|
||||||
|
Id:TEMPLATE
|
||||||
|
Width:PARENT_RIGHT-27
|
||||||
|
Height:25
|
||||||
|
X:2
|
||||||
|
Y:0
|
||||||
|
Visible:false
|
||||||
|
Children:
|
||||||
|
Image@FLAG:
|
||||||
|
Id:FLAG
|
||||||
|
X:5
|
||||||
|
Y:5
|
||||||
|
Width:30
|
||||||
|
Height:15
|
||||||
|
Label@LABEL:
|
||||||
|
Id:LABEL
|
||||||
|
X:40
|
||||||
|
Width:60
|
||||||
|
Height:25
|
||||||
|
|
||||||
|
ScrollPanel@TEAM_DROPDOWN_TEMPLATE:
|
||||||
|
Id:TEAM_DROPDOWN_TEMPLATE
|
||||||
|
Width:DROPDOWN_WIDTH
|
||||||
|
Background:panel-black
|
||||||
|
Children:
|
||||||
|
ScrollItem@TEMPLATE:
|
||||||
|
Id:TEMPLATE
|
||||||
|
Width:PARENT_RIGHT-27
|
||||||
|
Height:25
|
||||||
|
X:2
|
||||||
|
Y:0
|
||||||
|
Visible:false
|
||||||
|
Children:
|
||||||
|
Label@LABEL:
|
||||||
|
Id:LABEL
|
||||||
|
X:0
|
||||||
|
Width:PARENT_RIGHT
|
||||||
|
Height:25
|
||||||
|
Align:Center
|
||||||
@@ -380,48 +380,4 @@ Container@SERVER_LOBBY:
|
|||||||
Y:499
|
Y:499
|
||||||
Width:140
|
Width:140
|
||||||
Height:35
|
Height:35
|
||||||
Text:Start Game
|
Text:Start Game
|
||||||
|
|
||||||
ScrollPanel@RACE_DROPDOWN_TEMPLATE:
|
|
||||||
Id:RACE_DROPDOWN_TEMPLATE
|
|
||||||
Width:DROPDOWN_WIDTH
|
|
||||||
Background:panel-black
|
|
||||||
Children:
|
|
||||||
ScrollItem@TEMPLATE:
|
|
||||||
Id:TEMPLATE
|
|
||||||
Width:PARENT_RIGHT-27
|
|
||||||
Height:25
|
|
||||||
X:2
|
|
||||||
Y:0
|
|
||||||
Visible:false
|
|
||||||
Children:
|
|
||||||
Image@FLAG:
|
|
||||||
Id:FLAG
|
|
||||||
X:5
|
|
||||||
Y:5
|
|
||||||
Width:30
|
|
||||||
Height:15
|
|
||||||
Label@LABEL:
|
|
||||||
Id:LABEL
|
|
||||||
X:40
|
|
||||||
Width:60
|
|
||||||
Height:25
|
|
||||||
ScrollPanel@TEAM_DROPDOWN_TEMPLATE:
|
|
||||||
Id:TEAM_DROPDOWN_TEMPLATE
|
|
||||||
Width:DROPDOWN_WIDTH
|
|
||||||
Background:panel-black
|
|
||||||
Children:
|
|
||||||
ScrollItem@TEMPLATE:
|
|
||||||
Id:TEMPLATE
|
|
||||||
Width:PARENT_RIGHT-27
|
|
||||||
Height:25
|
|
||||||
X:2
|
|
||||||
Y:0
|
|
||||||
Visible:false
|
|
||||||
Children:
|
|
||||||
Label@LABEL:
|
|
||||||
Id:LABEL
|
|
||||||
X:0
|
|
||||||
Width:PARENT_RIGHT
|
|
||||||
Height:25
|
|
||||||
Align:Center
|
|
||||||
60
mods/ra/chrome/dropdowns.yaml
Normal file
60
mods/ra/chrome/dropdowns.yaml
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
ScrollPanel@LABEL_DROPDOWN_TEMPLATE:
|
||||||
|
Id:LABEL_DROPDOWN_TEMPLATE
|
||||||
|
Width:DROPDOWN_WIDTH
|
||||||
|
Children:
|
||||||
|
ScrollItem@TEMPLATE:
|
||||||
|
Id:TEMPLATE
|
||||||
|
Width:PARENT_RIGHT-27
|
||||||
|
Height:25
|
||||||
|
X:2
|
||||||
|
Y:0
|
||||||
|
Visible:false
|
||||||
|
Children:
|
||||||
|
Label@LABEL:
|
||||||
|
Id:LABEL
|
||||||
|
X:10
|
||||||
|
Width:PARENT_RIGHT-20
|
||||||
|
Height:25
|
||||||
|
|
||||||
|
ScrollPanel@RACE_DROPDOWN_TEMPLATE:
|
||||||
|
Id:RACE_DROPDOWN_TEMPLATE
|
||||||
|
Width:DROPDOWN_WIDTH
|
||||||
|
Children:
|
||||||
|
ScrollItem@TEMPLATE:
|
||||||
|
Id:TEMPLATE
|
||||||
|
Width:PARENT_RIGHT-27
|
||||||
|
Height:25
|
||||||
|
X:2
|
||||||
|
Y:0
|
||||||
|
Visible:false
|
||||||
|
Children:
|
||||||
|
Image@FLAG:
|
||||||
|
Id:FLAG
|
||||||
|
X:5
|
||||||
|
Y:5
|
||||||
|
Width:30
|
||||||
|
Height:15
|
||||||
|
Label@LABEL:
|
||||||
|
Id:LABEL
|
||||||
|
X:40
|
||||||
|
Width:60
|
||||||
|
Height:25
|
||||||
|
|
||||||
|
ScrollPanel@TEAM_DROPDOWN_TEMPLATE:
|
||||||
|
Id:TEAM_DROPDOWN_TEMPLATE
|
||||||
|
Width:DROPDOWN_WIDTH
|
||||||
|
Children:
|
||||||
|
ScrollItem@TEMPLATE:
|
||||||
|
Id:TEMPLATE
|
||||||
|
Width:PARENT_RIGHT-27
|
||||||
|
Height:25
|
||||||
|
X:2
|
||||||
|
Y:0
|
||||||
|
Visible:false
|
||||||
|
Children:
|
||||||
|
Label@LABEL:
|
||||||
|
Id:LABEL
|
||||||
|
X:0
|
||||||
|
Width:PARENT_RIGHT
|
||||||
|
Height:25
|
||||||
|
Align:Center
|
||||||
@@ -61,7 +61,7 @@ ChromeLayout:
|
|||||||
mods/ra/chrome/gamelobby.yaml
|
mods/ra/chrome/gamelobby.yaml
|
||||||
mods/ra/chrome/serverbrowser.yaml
|
mods/ra/chrome/serverbrowser.yaml
|
||||||
mods/ra/chrome/replaybrowser.yaml
|
mods/ra/chrome/replaybrowser.yaml
|
||||||
|
mods/ra/chrome/dropdowns.yaml
|
||||||
Weapons:
|
Weapons:
|
||||||
mods/ra/weapons.yaml
|
mods/ra/weapons.yaml
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user