diff --git a/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj b/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj
index 0136ccbd8621..2bdb93e10a7c 100644
--- a/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj
+++ b/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj
@@ -75,7 +75,6 @@
-
diff --git a/OpenRA.Mods.Cnc/Widgets/Logic/CncLobbyLogic.cs b/OpenRA.Mods.Cnc/Widgets/Logic/CncLobbyLogic.cs
index 0e296ba87ada..03f856f0500c 100644
--- a/OpenRA.Mods.Cnc/Widgets/Logic/CncLobbyLogic.cs
+++ b/OpenRA.Mods.Cnc/Widgets/Logic/CncLobbyLogic.cs
@@ -12,7 +12,6 @@
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
-using OpenRA.FileFormats;
using OpenRA.Mods.RA;
using OpenRA.Mods.RA.Widgets.Logic;
using OpenRA.Network;
@@ -255,32 +254,6 @@ void UpdateCurrentMap()
title.Text = orderManager.LobbyInfo.GlobalSettings.ServerName;
}
- void ShowColorDropDown(DropDownButtonWidget color, Session.Client client)
- {
- Action onSelect = c =>
- {
- if (client.Bot == null)
- {
- Game.Settings.Player.ColorRamp = c;
- Game.Settings.Save();
- }
-
- color.RemovePanel();
- orderManager.IssueOrder(Order.Command("color {0} {1}".F(client.Index, c)));
- };
-
- Action onChange = c => PlayerPalettePreview.Ramp = c;
-
- var colorChooser = Game.LoadWidget(orderManager.world, "COLOR_CHOOSER", null, new WidgetArgs()
- {
- { "onSelect", onSelect },
- { "onChange", onChange },
- { "initialRamp", client.ColorRamp }
- });
-
- color.AttachPanel(colorChooser);
- }
-
void UpdatePlayerList()
{
// This causes problems for people who are in the process of editing their names (the widgets vanish from beneath them)
@@ -347,7 +320,7 @@ void UpdatePlayerList()
var color = template.GetWidget("COLOR");
color.IsDisabled = () => slot.LockColor || ready;
- color.OnMouseDown = _ => ShowColorDropDown(color, client);
+ color.OnMouseDown = _ => LobbyUtils.ShowColorDropDown(color, client, orderManager, PlayerPalettePreview);
var colorBlock = color.GetWidget("COLORBLOCK");
colorBlock.GetColor = () => client.ColorRamp.GetColor(0);
@@ -425,7 +398,7 @@ void UpdatePlayerList()
var color = template.GetWidget("COLOR");
color.IsDisabled = () => ready;
- color.OnMouseDown = _ => ShowColorDropDown(color, c);
+ color.OnMouseDown = _ => LobbyUtils.ShowColorDropDown(color, c, orderManager, PlayerPalettePreview);
var colorBlock = color.GetWidget("COLORBLOCK");
colorBlock.GetColor = () => c.ColorRamp.GetColor(0);
diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
index fd1852c838b9..d314a5e9d80c 100644
--- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
+++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
@@ -364,6 +364,7 @@
+
diff --git a/OpenRA.Mods.Cnc/Widgets/Logic/CncColorPickerLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/ColorPickerLogic.cs
similarity index 72%
rename from OpenRA.Mods.Cnc/Widgets/Logic/CncColorPickerLogic.cs
rename to OpenRA.Mods.RA/Widgets/Logic/ColorPickerLogic.cs
index 8c001be9dc81..e0e3905f9ddf 100644
--- a/OpenRA.Mods.Cnc/Widgets/Logic/CncColorPickerLogic.cs
+++ b/OpenRA.Mods.RA/Widgets/Logic/ColorPickerLogic.cs
@@ -13,13 +13,14 @@
using OpenRA.Graphics;
using OpenRA.Widgets;
-namespace OpenRA.Mods.Cnc.Widgets.Logic
+namespace OpenRA.Mods.RA.Widgets.Logic
{
- public class CncColorPickerLogic
+ public class ColorPickerLogic
{
ColorRamp ramp;
+
[ObjectCreator.UseCtor]
- public CncColorPickerLogic(Widget widget, ColorRamp initialRamp, Action onChange,
+ public ColorPickerLogic(Widget widget, ColorRamp initialRamp, Action onChange,
Action onSelect, WorldRenderer worldRenderer)
{
var panel = widget.GetWidget("COLOR_CHOOSER");
@@ -49,16 +50,19 @@ public class CncColorPickerLogic
};
panel.GetWidget("SAVE_BUTTON").OnClick = () => onSelect(ramp);
- panel.GetWidget("RANDOM_BUTTON").OnClick = () =>
- {
- var hue = (byte)Game.CosmeticRandom.Next(255);
- var sat = (byte)Game.CosmeticRandom.Next(255);
- var lum = (byte)Game.CosmeticRandom.Next(51,255);
- ramp = new ColorRamp(hue, sat, lum, 10);
- updateSliders();
- sliderChanged();
- };
+ var randomButton = panel.GetWidget("RANDOM_BUTTON");
+ if (randomButton != null)
+ randomButton.OnClick = () =>
+ {
+ var hue = (byte)Game.CosmeticRandom.Next(255);
+ var sat = (byte)Game.CosmeticRandom.Next(255);
+ var lum = (byte)Game.CosmeticRandom.Next(51,255);
+
+ ramp = new ColorRamp(hue, sat, lum, 10);
+ updateSliders();
+ sliderChanged();
+ };
// Set the initial state
updateSliders();
diff --git a/OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs
index 03bdbf1c7127..851f5311b688 100644
--- a/OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs
+++ b/OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs
@@ -12,8 +12,6 @@
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
-using OpenRA.FileFormats;
-using OpenRA.Graphics;
using OpenRA.Network;
using OpenRA.Traits;
using OpenRA.Widgets;
@@ -33,13 +31,11 @@ public class LobbyLogic
ColorPickerPaletteModifier PlayerPalettePreview;
readonly OrderManager orderManager;
- readonly WorldRenderer worldRenderer;
[ObjectCreator.UseCtor]
- internal LobbyLogic(Widget widget, World world, OrderManager orderManager, WorldRenderer worldRenderer)
+ internal LobbyLogic(Widget widget, World world, OrderManager orderManager)
{
this.orderManager = orderManager;
- this.worldRenderer = worldRenderer;
this.lobby = widget;
Game.BeforeGameStart += CloseWindow;
Game.LobbyInfoChanged += UpdateCurrentMap;
@@ -155,22 +151,6 @@ void AddChatLine(Color c, string from, string text)
lobby.GetWidget("CHAT_DISPLAY").AddLine(c, from, text);
}
- void UpdatePlayerColor(Session.Client client, float hf, float sf, float lf, float r)
- {
- var ramp = new ColorRamp((byte)(hf * 255), (byte)(sf * 255), (byte)(lf * 255), (byte)(r * 255));
- if (client == orderManager.LocalClient)
- {
- Game.Settings.Player.ColorRamp = ramp;
- Game.Settings.Save();
- }
- orderManager.IssueOrder(Order.Command("color {0} {1}".F(client.Index, ramp)));
- }
-
- void UpdateColorPreview(float hf, float sf, float lf, float r)
- {
- PlayerPalettePreview.Ramp = new ColorRamp((byte)(hf * 255), (byte)(sf * 255), (byte)(lf * 255), (byte)(r * 255));
- }
-
void UpdateCurrentMap()
{
if (MapUid == orderManager.LobbyInfo.GlobalSettings.Map) return;
@@ -181,39 +161,6 @@ void UpdateCurrentMap()
title.Text = "OpenRA Multiplayer Lobby - " + orderManager.LobbyInfo.GlobalSettings.ServerName + " - " + Map.Title;
}
- void ShowColorDropDown(DropDownButtonWidget color, Session.Client client)
- {
- var colorChooser = Game.modData.WidgetLoader.LoadWidget(new WidgetArgs() { { "worldRenderer", worldRenderer } }, null, "COLOR_CHOOSER");
- var hueSlider = colorChooser.GetWidget("HUE_SLIDER");
- hueSlider.Value = client.ColorRamp.H / 255f;
-
- var satSlider = colorChooser.GetWidget("SAT_SLIDER");
- satSlider.Value = client.ColorRamp.S / 255f;
-
- var lumSlider = colorChooser.GetWidget("LUM_SLIDER");
- lumSlider.Value = client.ColorRamp.L / 255f;
-
- var rangeSlider = colorChooser.GetWidget("RANGE_SLIDER");
- rangeSlider.Value = client.ColorRamp.R / 255f;
-
- Action updateColorPreview = () => UpdateColorPreview(hueSlider.Value, satSlider.Value, lumSlider.Value, rangeSlider.Value);
-
- hueSlider.OnChange += _ => updateColorPreview();
- satSlider.OnChange += _ => updateColorPreview();
- lumSlider.OnChange += _ => updateColorPreview();
- rangeSlider.OnChange += _ => updateColorPreview();
- updateColorPreview();
-
- colorChooser.GetWidget("BUTTON_OK").OnClick = () =>
- {
- updateColorPreview();
- UpdatePlayerColor(client, hueSlider.Value, satSlider.Value, lumSlider.Value, rangeSlider.Value);
- color.RemovePanel();
- };
-
- color.AttachPanel(colorChooser);
- }
-
void UpdatePlayerList()
{
// This causes problems for people who are in the process of editing their names (the widgets vanish from beneath them)
@@ -273,7 +220,7 @@ void UpdatePlayerList()
var color = template.GetWidget("COLOR");
color.IsDisabled = () => s.LockColor;
- color.OnMouseDown = _ => ShowColorDropDown(color, c);
+ color.OnMouseDown = _ => LobbyUtils.ShowColorDropDown(color, c, orderManager, PlayerPalettePreview);
var colorBlock = color.GetWidget("COLORBLOCK");
colorBlock.GetColor = () => c.ColorRamp.GetColor(0);
@@ -342,7 +289,7 @@ void UpdatePlayerList()
LobbyUtils.SetupNameWidget(orderManager, c, template.GetWidget("NAME"));
var color = template.GetWidget("COLOR");
- color.OnMouseDown = _ => ShowColorDropDown(color, c);
+ color.OnMouseDown = _ => LobbyUtils.ShowColorDropDown(color, c, orderManager, PlayerPalettePreview);
var colorBlock = color.GetWidget("COLORBLOCK");
colorBlock.GetColor = () => c.ColorRamp.GetColor(0);
diff --git a/OpenRA.Mods.RA/Widgets/Logic/LobbyUtils.cs b/OpenRA.Mods.RA/Widgets/Logic/LobbyUtils.cs
index ef896dd31f8a..16a937cadd51 100644
--- a/OpenRA.Mods.RA/Widgets/Logic/LobbyUtils.cs
+++ b/OpenRA.Mods.RA/Widgets/Logic/LobbyUtils.cs
@@ -120,6 +120,33 @@ public SlotDropDownOption(string title, string order, Func selected)
dropdown.ShowDropDown("RACE_DROPDOWN_TEMPLATE", 150, countryNames.Keys, setupItem);
}
+ public static void ShowColorDropDown(DropDownButtonWidget color, Session.Client client,
+ OrderManager orderManager, ColorPickerPaletteModifier preview)
+ {
+ Action onSelect = c =>
+ {
+ if (client.Bot == null)
+ {
+ Game.Settings.Player.ColorRamp = c;
+ Game.Settings.Save();
+ }
+
+ color.RemovePanel();
+ orderManager.IssueOrder(Order.Command("color {0} {1}".F(client.Index, c)));
+ };
+
+ Action onChange = c => preview.Ramp = c;
+
+ var colorChooser = Game.LoadWidget(orderManager.world, "COLOR_CHOOSER", null, new WidgetArgs()
+ {
+ { "onSelect", onSelect },
+ { "onChange", onChange },
+ { "initialRamp", client.ColorRamp }
+ });
+
+ color.AttachPanel(colorChooser);
+ }
+
public static Dictionary GetSpawnColors(OrderManager orderManager, Map map)
{
var spawns = map.GetSpawnPoints();
diff --git a/mods/cnc/chrome/dialogs.yaml b/mods/cnc/chrome/dialogs.yaml
index cf329f2a73c0..ae71a45c06b7 100644
--- a/mods/cnc/chrome/dialogs.yaml
+++ b/mods/cnc/chrome/dialogs.yaml
@@ -1,6 +1,6 @@
Background@COLOR_CHOOSER:
Id:COLOR_CHOOSER
- Logic:CncColorPickerLogic
+ Logic:ColorPickerLogic
Background:panel-black
Width:315
Height:130
diff --git a/mods/ra/chrome/lobby.yaml b/mods/ra/chrome/lobby.yaml
index 128737c419c3..6c0567ad0225 100644
--- a/mods/ra/chrome/lobby.yaml
+++ b/mods/ra/chrome/lobby.yaml
@@ -415,17 +415,26 @@ Background@SERVER_LOBBY:
Text: Allow Cheats
Background@COLOR_CHOOSER:
Id:COLOR_CHOOSER
+ Logic:ColorPickerLogic
Background:dialog2
Width:310
Height:120
Children:
- Button@BUTTON_OK:
- Id:BUTTON_OK
+ Button@SAVE_BUTTON:
+ Id:SAVE_BUTTON
X:210
Y:85
Width:90
Height:25
- Text:Ok
+ Text:Save
+ Font:Bold
+ Button@RANDOM_BUTTON:
+ Id:RANDOM_BUTTON
+ X:115
+ Y:85
+ Width:90
+ Height:25
+ Text:Random
Font:Bold
ShpImage@FACT:
Id:FACT
@@ -477,19 +486,3 @@ Background@COLOR_CHOOSER:
Ticks:5
MinimumValue: 0.2
MaximumValue: 1
- Label@RANGE_LABEL:
- X:0
- Y:80
- Width:40
- Height:20
- Align: Right
- Text: Ran:
- Slider@RANGE:
- Id:RANGE_SLIDER
- X:43
- Y:85
- Width:160
- Height:20
- Ticks:5
- MinimumValue: 0
- MaximumValue: 0.25