Add IColorPickerManagerInfo interface
This commit is contained in:
@@ -177,16 +177,17 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
panel.GetOrNull<LabelWidget>("PALETTE_DESC").IsVisible = () => currentSprites != null || currentVoxel != null;
|
||||
}
|
||||
|
||||
var colorManager = modData.DefaultRules.Actors[SystemActors.World].TraitInfo<ColorPickerManagerInfo>();
|
||||
colorManager.Color = Game.Settings.Player.Color;
|
||||
var colorManager = modData.DefaultRules.Actors[SystemActors.World].TraitInfo<IColorPickerManagerInfo>();
|
||||
|
||||
var colorDropdown = panel.GetOrNull<DropDownButtonWidget>("COLOR");
|
||||
if (colorDropdown != null)
|
||||
{
|
||||
var color = Game.Settings.Player.Color;
|
||||
colorDropdown.IsDisabled = () => !colorPickerPalettes.Contains(currentPalette);
|
||||
colorDropdown.OnMouseDown = _ => ColorPickerLogic.ShowColorDropDown(colorDropdown, colorManager, worldRenderer);
|
||||
colorDropdown.OnMouseDown = _ => colorManager.ShowColorDropDown(colorDropdown, color, null, worldRenderer, c => color = c);
|
||||
colorDropdown.IsVisible = () => currentSprites != null || currentVoxel != null;
|
||||
panel.Get<ColorBlockWidget>("COLORBLOCK").GetColor = () => colorManager.Color;
|
||||
|
||||
panel.Get<ColorBlockWidget>("COLORBLOCK").GetColor = () => color;
|
||||
}
|
||||
|
||||
filenameInput = panel.Get<TextFieldWidget>("FILENAME_INPUT");
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using OpenRA.Graphics;
|
||||
using OpenRA.Mods.Common.Traits;
|
||||
using OpenRA.Primitives;
|
||||
using OpenRA.Widgets;
|
||||
@@ -25,7 +24,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
int paletteTabHighlighted = 0;
|
||||
|
||||
[ObjectCreator.UseCtor]
|
||||
public ColorPickerLogic(Widget widget, ModData modData, World world, Color initialColor, string initialFaction, Action<Color> onChange,
|
||||
public ColorPickerLogic(Widget widget, ModData modData, World world, Color initialColor, Action<Color> onChange, Action<Widget> extraLogic,
|
||||
Dictionary<string, MiniYaml> logicArgs)
|
||||
{
|
||||
var mixer = widget.Get<ColorMixerWidget>("MIXER");
|
||||
@@ -33,14 +32,17 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
// Set the initial state
|
||||
// All users need to use the same TraitInfo instance, chosen as the default mod rules
|
||||
var colorManager = modData.DefaultRules.Actors[SystemActors.World].TraitInfo<ColorPickerManagerInfo>();
|
||||
mixer.SetColorLimits(colorManager.HsvSaturationRange[0], colorManager.HsvSaturationRange[1], colorManager.HsvValueRange[0], colorManager.HsvValueRange[1]);
|
||||
var colorManager = modData.DefaultRules.Actors[SystemActors.World].TraitInfo<IColorPickerManagerInfo>();
|
||||
|
||||
var (sMin, sMax) = colorManager.SaturationRange;
|
||||
var (vMin, vMax) = colorManager.ValueRange;
|
||||
mixer.SetColorLimits(sMin, sMax, vMin, vMax);
|
||||
mixer.OnChange += () => onChange(mixer.Color);
|
||||
mixer.Set(initialColor);
|
||||
|
||||
hueSlider.OnChange += h =>
|
||||
{
|
||||
mixer.SetColorLimits(colorManager.HsvSaturationRange[0], colorManager.HsvSaturationRange[1], colorManager.HsvValueRange[0], colorManager.HsvValueRange[1], h);
|
||||
mixer.SetColorLimits(sMin, sMax, vMin, vMax, h);
|
||||
var (_, _, s, v) = mixer.Color.ToAhsv();
|
||||
mixer.Set(Color.FromAhsv(h, s, v));
|
||||
onChange(mixer.Color);
|
||||
@@ -64,34 +66,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
};
|
||||
}
|
||||
|
||||
if (initialFaction == null || !colorManager.FactionPreviewActors.TryGetValue(initialFaction, out var actorType))
|
||||
actorType = colorManager.PreviewActor;
|
||||
|
||||
if (actorType == null)
|
||||
{
|
||||
var message = "ColorPickerManager does not define a preview actor";
|
||||
if (initialFaction != null)
|
||||
message += " for faction " + initialFaction;
|
||||
message += "!";
|
||||
|
||||
throw new YamlException(message);
|
||||
}
|
||||
|
||||
var preview = widget.GetOrNull<ActorPreviewWidget>("PREVIEW");
|
||||
var actor = world.Map.Rules.Actors[actorType];
|
||||
|
||||
var td = new TypeDictionary
|
||||
{
|
||||
new OwnerInit(world.WorldActor.Owner),
|
||||
new FactionInit(world.WorldActor.Owner.PlayerReference.Faction)
|
||||
};
|
||||
|
||||
foreach (var api in actor.TraitInfos<IActorPreviewInitInfo>())
|
||||
foreach (var o in api.ActorPreviewInits(actor, ActorPreviewType.ColorPicker))
|
||||
td.Add(o);
|
||||
|
||||
preview?.SetPreview(actor, td);
|
||||
|
||||
// HACK: the value returned from the color mixer will generally not
|
||||
// be equal to the given initialColor due to its internal RGB -> HSL -> RGB
|
||||
// conversion. This conversion can sometimes convert a valid initial value
|
||||
@@ -205,20 +179,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
paletteTabHighlighted = 4;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public static void ShowColorDropDown(DropDownButtonWidget color, ColorPickerManagerInfo colorManager, WorldRenderer worldRenderer, Action onExit = null)
|
||||
{
|
||||
color.RemovePanel();
|
||||
|
||||
var colorChooser = Game.LoadWidget(worldRenderer.World, "COLOR_CHOOSER", null, new WidgetArgs()
|
||||
{
|
||||
{ "onChange", (Action<Color>)(c => colorManager.Color = c) },
|
||||
{ "initialColor", colorManager.Color },
|
||||
{ "initialFaction", null }
|
||||
});
|
||||
|
||||
color.AttachPanel(colorChooser, onExit);
|
||||
// Attach logic to preview actor.
|
||||
extraLogic(widget);
|
||||
}
|
||||
|
||||
public override void Tick()
|
||||
|
||||
@@ -76,9 +76,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
return true;
|
||||
};
|
||||
|
||||
var colorManager = modData.DefaultRules.Actors[SystemActors.World].TraitInfo<ColorPickerManagerInfo>();
|
||||
colorManager.Color = ps.Color;
|
||||
|
||||
var mouseControlDescClassic = widget.Get("MOUSE_CONTROL_DESC_CLASSIC");
|
||||
mouseControlDescClassic.IsVisible = () => gs.UseClassicMouseStyle;
|
||||
|
||||
@@ -114,11 +111,13 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
SettingsUtils.BindCheckboxPref(widget, "EDGESCROLL_CHECKBOX", gs, "ViewportEdgeScroll");
|
||||
|
||||
var colorManager = modData.DefaultRules.Actors[SystemActors.World].TraitInfo<IColorPickerManagerInfo>();
|
||||
|
||||
var colorDropdown = widget.Get<DropDownButtonWidget>("PLAYERCOLOR");
|
||||
colorDropdown.IsDisabled = () => worldRenderer.World.Type != WorldType.Shellmap;
|
||||
colorDropdown.OnMouseDown = _ => ColorPickerLogic.ShowColorDropDown(colorDropdown, colorManager, worldRenderer, () =>
|
||||
colorDropdown.OnMouseDown = _ => colorManager.ShowColorDropDown(colorDropdown, ps.Color, null, worldRenderer, color =>
|
||||
{
|
||||
Game.Settings.Player.Color = colorManager.Color;
|
||||
ps.Color = color;
|
||||
Game.Settings.Save();
|
||||
});
|
||||
colorDropdown.Get<ColorBlockWidget>("COLORBLOCK").GetColor = () => ps.Color;
|
||||
|
||||
@@ -90,7 +90,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
readonly Dictionary<string, LobbyFaction> factions = new();
|
||||
|
||||
readonly ColorPickerManagerInfo colorManager;
|
||||
readonly IColorPickerManagerInfo colorManager;
|
||||
|
||||
readonly TabCompletionLogic tabCompletion = new();
|
||||
|
||||
@@ -198,8 +198,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
editableSpectatorTemplate = players.Get("TEMPLATE_EDITABLE_SPECTATOR");
|
||||
nonEditableSpectatorTemplate = players.Get("TEMPLATE_NONEDITABLE_SPECTATOR");
|
||||
newSpectatorTemplate = players.Get("TEMPLATE_NEW_SPECTATOR");
|
||||
colorManager = modRules.Actors[SystemActors.World].TraitInfo<ColorPickerManagerInfo>();
|
||||
colorManager.Color = Game.Settings.Player.Color;
|
||||
colorManager = modRules.Actors[SystemActors.World].TraitInfo<IColorPickerManagerInfo>();
|
||||
|
||||
foreach (var f in modRules.Actors[SystemActors.World].TraitInfos<FactionInfo>())
|
||||
factions.Add(f.InternalName, new LobbyFaction { Selectable = f.Selectable, Name = f.Name, Side = f.Side, Description = f.Description });
|
||||
|
||||
@@ -241,31 +241,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
dropdown.ShowDropDown("FACTION_DROPDOWN_TEMPLATE", 154, options, SetupItem);
|
||||
}
|
||||
|
||||
public static void ShowColorDropDown(DropDownButtonWidget color, Session.Client client,
|
||||
OrderManager orderManager, WorldRenderer worldRenderer, ColorPickerManagerInfo colorManager)
|
||||
{
|
||||
void OnExit()
|
||||
{
|
||||
if (client == orderManager.LocalClient)
|
||||
{
|
||||
Game.Settings.Player.Color = colorManager.Color;
|
||||
Game.Settings.Save();
|
||||
}
|
||||
|
||||
color.RemovePanel();
|
||||
orderManager.IssueOrder(Order.Command($"color {client.Index} {colorManager.Color}"));
|
||||
}
|
||||
|
||||
var colorChooser = Game.LoadWidget(worldRenderer.World, "COLOR_CHOOSER", null, new WidgetArgs()
|
||||
{
|
||||
{ "onChange", (Action<Color>)(c => colorManager.Color = c) },
|
||||
{ "initialColor", client.Color },
|
||||
{ "initialFaction", client.Faction }
|
||||
});
|
||||
|
||||
color.AttachPanel(colorChooser, OnExit);
|
||||
}
|
||||
|
||||
public static void SelectSpawnPoint(OrderManager orderManager, MapPreviewWidget mapPreview, MapPreview preview, MouseInput mi)
|
||||
{
|
||||
if (orderManager.LocalClient.State == Session.ClientState.Ready)
|
||||
@@ -544,13 +519,22 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
};
|
||||
}
|
||||
|
||||
public static void SetupEditableColorWidget(Widget parent, Session.Slot s, Session.Client c, OrderManager orderManager, WorldRenderer worldRenderer, ColorPickerManagerInfo colorManager)
|
||||
public static void SetupEditableColorWidget(Widget parent, Session.Slot s, Session.Client c, OrderManager orderManager, WorldRenderer worldRenderer, IColorPickerManagerInfo colorManager)
|
||||
{
|
||||
var color = parent.Get<DropDownButtonWidget>("COLOR");
|
||||
color.IsDisabled = () => (s != null && s.LockColor) || orderManager.LocalClient.IsReady;
|
||||
color.OnMouseDown = _ => ShowColorDropDown(color, c, orderManager, worldRenderer, colorManager);
|
||||
var colorDropdown = parent.Get<DropDownButtonWidget>("COLOR");
|
||||
colorDropdown.IsDisabled = () => (s != null && s.LockColor) || orderManager.LocalClient.IsReady;
|
||||
colorDropdown.OnMouseDown = _ => colorManager.ShowColorDropDown(colorDropdown, c.Color, c.Faction, worldRenderer, color =>
|
||||
{
|
||||
if (c == orderManager.LocalClient)
|
||||
{
|
||||
Game.Settings.Player.Color = color;
|
||||
Game.Settings.Save();
|
||||
}
|
||||
|
||||
SetupColorWidget(color, c);
|
||||
orderManager.IssueOrder(Order.Command($"color {c.Index} {color}"));
|
||||
});
|
||||
|
||||
SetupColorWidget(colorDropdown, c);
|
||||
}
|
||||
|
||||
public static void SetupColorWidget(Widget parent, Session.Client c)
|
||||
|
||||
@@ -268,14 +268,13 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
return true;
|
||||
};
|
||||
|
||||
var colorManager = modData.DefaultRules.Actors[SystemActors.World].TraitInfo<ColorPickerManagerInfo>();
|
||||
colorManager.Color = ps.Color;
|
||||
var colorManager = modData.DefaultRules.Actors[SystemActors.World].TraitInfo<IColorPickerManagerInfo>();
|
||||
|
||||
var colorDropdown = panel.Get<DropDownButtonWidget>("PLAYERCOLOR");
|
||||
colorDropdown.IsDisabled = () => worldRenderer.World.Type != WorldType.Shellmap;
|
||||
colorDropdown.OnMouseDown = _ => ColorPickerLogic.ShowColorDropDown(colorDropdown, colorManager, worldRenderer, () =>
|
||||
colorDropdown.OnMouseDown = _ => colorManager.ShowColorDropDown(colorDropdown, ps.Color, null, worldRenderer, color =>
|
||||
{
|
||||
Game.Settings.Player.Color = colorManager.Color;
|
||||
ps.Color = color;
|
||||
Game.Settings.Save();
|
||||
});
|
||||
colorDropdown.Get<ColorBlockWidget>("COLORBLOCK").GetColor = () => ps.Color;
|
||||
|
||||
Reference in New Issue
Block a user