Implement the new color picker.

This commit is contained in:
Paul Chote
2013-04-27 01:28:35 +12:00
parent e240b9ca3d
commit 70f705bdc7
13 changed files with 162 additions and 235 deletions

View File

@@ -17,56 +17,32 @@ namespace OpenRA.Mods.RA.Widgets.Logic
{
public class ColorPickerLogic
{
ColorRamp ramp;
[ObjectCreator.UseCtor]
public ColorPickerLogic(Widget widget, ColorRamp initialRamp, Action<ColorRamp> onChange,
Action<ColorRamp> onSelect, WorldRenderer worldRenderer)
public ColorPickerLogic(Widget widget, HSLColor initialColor, Action<HSLColor> onChange, WorldRenderer worldRenderer)
{
var panel = widget;
ramp = initialRamp;
var hueSlider = panel.Get<SliderWidget>("HUE");
var satSlider = panel.Get<SliderWidget>("SAT");
var lumSlider = panel.Get<SliderWidget>("LUM");
var hueSlider = widget.Get<SliderWidget>("HUE");
var mixer = widget.Get<ColorMixerWidget>("MIXER");
var randomButton = widget.GetOrNull<ButtonWidget>("RANDOM_BUTTON");
Action sliderChanged = () =>
{
ramp = new ColorRamp((byte)(255*hueSlider.Value),
(byte)(255*satSlider.Value),
(byte)(255*lumSlider.Value),
10);
onChange(ramp);
};
hueSlider.OnChange += _ => mixer.Set(hueSlider.Value);
mixer.OnChange += () => onChange(mixer.Color);
hueSlider.OnChange += _ => sliderChanged();
satSlider.OnChange += _ => sliderChanged();
lumSlider.OnChange += _ => sliderChanged();
Action updateSliders = () =>
{
hueSlider.Value = ramp.Color.H / 255f;
satSlider.Value = ramp.Color.S / 255f;
lumSlider.Value = ramp.Color.L / 255f;
};
panel.Get<ButtonWidget>("SAVE_BUTTON").OnClick = () => onSelect(ramp);
var randomButton = panel.Get<ButtonWidget>("RANDOM_BUTTON");
if (randomButton != null)
randomButton.OnClick = () =>
{
// Avoid colors with low sat or lum
var hue = (byte)Game.CosmeticRandom.Next(255);
var sat = (byte)Game.CosmeticRandom.Next(255);
var lum = (byte)Game.CosmeticRandom.Next(51,255);
var sat = (byte)Game.CosmeticRandom.Next(70, 255);
var lum = (byte)Game.CosmeticRandom.Next(70, 255);
ramp = new ColorRamp(hue, sat, lum, 10);
updateSliders();
sliderChanged();
mixer.Set(new HSLColor(hue, sat, lum));
hueSlider.Value = hue / 255f;
};
// Set the initial state
updateSliders();
onChange(ramp);
mixer.Set(initialColor);
hueSlider.Value = initialColor.H / 255f;
onChange(mixer.Color);
}
}
}

View File

@@ -103,28 +103,27 @@ namespace OpenRA.Mods.RA.Widgets.Logic
public static void ShowColorDropDown(DropDownButtonWidget color, Session.Client client,
OrderManager orderManager, ColorPreviewManagerWidget preview)
{
Action<ColorRamp> onSelect = c =>
Action onExit = () =>
{
if (client.Bot == null)
{
Game.Settings.Player.ColorRamp = c;
Game.Settings.Player.ColorRamp = preview.Ramp;
Game.Settings.Save();
}
color.RemovePanel();
orderManager.IssueOrder(Order.Command("color {0} {1}".F(client.Index, c)));
orderManager.IssueOrder(Order.Command("color {0} {1}".F(client.Index, preview.Ramp)));
};
Action<ColorRamp> onChange = c => preview.Ramp = c;
Action<HSLColor> onChange = c => preview.Ramp = new ColorRamp(c, 10);
var colorChooser = Game.LoadWidget(orderManager.world, "COLOR_CHOOSER", null, new WidgetArgs()
{
{ "onSelect", onSelect },
{ "onChange", onChange },
{ "initialRamp", client.ColorRamp }
{ "initialColor", client.ColorRamp.Color }
});
color.AttachPanel(colorChooser);
color.AttachPanel(colorChooser, onExit);
}
public static Dictionary<int2, Session.Client> GetSpawnClients(OrderManager orderManager, Map map)