From c9fd874b0705614cbeabc8fcdd08eade71aaba9b Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Sun, 30 Oct 2011 09:27:50 +1300 Subject: [PATCH] unify colorpickers across ra and cnc --- OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj | 1 - .../Widgets/Logic/CncLobbyLogic.cs | 31 +--------- OpenRA.Mods.RA/OpenRA.Mods.RA.csproj | 1 + .../Widgets/Logic/ColorPickerLogic.cs | 28 +++++---- OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs | 59 +------------------ OpenRA.Mods.RA/Widgets/Logic/LobbyUtils.cs | 27 +++++++++ mods/cnc/chrome/dialogs.yaml | 2 +- mods/ra/chrome/lobby.yaml | 31 ++++------ 8 files changed, 62 insertions(+), 118 deletions(-) rename OpenRA.Mods.Cnc/Widgets/Logic/CncColorPickerLogic.cs => OpenRA.Mods.RA/Widgets/Logic/ColorPickerLogic.cs (72%) 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