Split the colorpicker logic into its own handler. Game.LoadWidget no longer adds the loaded widget to the RootWidget.
This commit is contained in:
@@ -113,14 +113,15 @@ namespace OpenRA
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Load a widget with world, orderManager, worldRenderer args, without adding it to the widget tree
|
||||||
public static Widget LoadWidget(World world, string widget, WidgetArgs args)
|
public static Widget LoadWidget(World world, string widget, WidgetArgs args)
|
||||||
{
|
{
|
||||||
return Widget.LoadWidget(widget, new WidgetArgs(args)
|
return Game.modData.WidgetLoader.LoadWidget(new WidgetArgs(args)
|
||||||
{
|
{
|
||||||
{ "world", world },
|
{ "world", world },
|
||||||
{ "orderManager", orderManager },
|
{ "orderManager", orderManager },
|
||||||
{ "worldRenderer", worldRenderer },
|
{ "worldRenderer", worldRenderer },
|
||||||
});
|
}, null, widget);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ActionQueue afterTickActions = new ActionQueue();
|
static ActionQueue afterTickActions = new ActionQueue();
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ namespace OpenRA.Mods.Cnc.Widgets
|
|||||||
readonly Action OnGameStart;
|
readonly Action OnGameStart;
|
||||||
readonly Action onExit;
|
readonly Action onExit;
|
||||||
readonly OrderManager orderManager;
|
readonly OrderManager orderManager;
|
||||||
readonly WorldRenderer worldRenderer;
|
|
||||||
|
|
||||||
public static ColorRamp CurrentColorPreview;
|
public static ColorRamp CurrentColorPreview;
|
||||||
static bool staticSetup;
|
static bool staticSetup;
|
||||||
@@ -121,11 +120,9 @@ namespace OpenRA.Mods.Cnc.Widgets
|
|||||||
internal CncLobbyLogic([ObjectCreator.Param( "widget" )] Widget lobby,
|
internal CncLobbyLogic([ObjectCreator.Param( "widget" )] Widget lobby,
|
||||||
[ObjectCreator.Param] OrderManager orderManager,
|
[ObjectCreator.Param] OrderManager orderManager,
|
||||||
[ObjectCreator.Param] Action onExit,
|
[ObjectCreator.Param] Action onExit,
|
||||||
[ObjectCreator.Param] Action onStart,
|
[ObjectCreator.Param] Action onStart)
|
||||||
[ObjectCreator.Param] WorldRenderer worldRenderer)
|
|
||||||
{
|
{
|
||||||
this.orderManager = orderManager;
|
this.orderManager = orderManager;
|
||||||
this.worldRenderer = worldRenderer;
|
|
||||||
this.OnGameStart = () => { Widget.CloseWindow(); onStart(); };
|
this.OnGameStart = () => { Widget.CloseWindow(); onStart(); };
|
||||||
this.onExit = onExit;
|
this.onExit = onExit;
|
||||||
|
|
||||||
@@ -287,19 +284,6 @@ namespace OpenRA.Mods.Cnc.Widgets
|
|||||||
chatPanel.AddChild(template);
|
chatPanel.AddChild(template);
|
||||||
chatPanel.ScrollToBottom();
|
chatPanel.ScrollToBottom();
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdatePlayerColor(float hf, float sf, float lf, float r)
|
|
||||||
{
|
|
||||||
var ramp = new ColorRamp((byte) (hf*255), (byte) (sf*255), (byte) (lf*255), (byte)(r*255));
|
|
||||||
Game.Settings.Player.ColorRamp = ramp;
|
|
||||||
Game.Settings.Save();
|
|
||||||
orderManager.IssueOrder(Order.Command("color {0}".F(ramp)));
|
|
||||||
}
|
|
||||||
|
|
||||||
void UpdateColorPreview(float hf, float sf, float lf, float r)
|
|
||||||
{
|
|
||||||
CurrentColorPreview = new ColorRamp((byte)(hf * 255), (byte)(sf * 255), (byte)(lf * 255), (byte)(r * 255));
|
|
||||||
}
|
|
||||||
|
|
||||||
void UpdateCurrentMap()
|
void UpdateCurrentMap()
|
||||||
{
|
{
|
||||||
@@ -406,30 +390,28 @@ namespace OpenRA.Mods.Cnc.Widgets
|
|||||||
if (Map.Players[s.MapPlayer].LockColor)
|
if (Map.Players[s.MapPlayer].LockColor)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
var colorChooser = Game.modData.WidgetLoader.LoadWidget( new WidgetArgs() { {"worldRenderer", worldRenderer} }, null, "COLOR_CHOOSER" );
|
Action<ColorRamp> onSelect = c =>
|
||||||
var hueSlider = colorChooser.GetWidget<SliderWidget>("HUE_SLIDER");
|
{
|
||||||
hueSlider.SetOffset(orderManager.LocalClient.ColorRamp.H / 255f);
|
Game.Settings.Player.ColorRamp = c;
|
||||||
|
Game.Settings.Save();
|
||||||
|
orderManager.IssueOrder(Order.Command("color {0}".F(c)));
|
||||||
|
};
|
||||||
|
|
||||||
var satSlider = colorChooser.GetWidget<SliderWidget>("SAT_SLIDER");
|
Action<ColorRamp> onChange = c =>
|
||||||
satSlider.SetOffset(orderManager.LocalClient.ColorRamp.S / 255f);
|
{
|
||||||
|
CurrentColorPreview = c;
|
||||||
var lumSlider = colorChooser.GetWidget<SliderWidget>("LUM_SLIDER");
|
};
|
||||||
lumSlider.SetOffset(orderManager.LocalClient.ColorRamp.L / 255f);
|
|
||||||
|
|
||||||
var rangeSlider = colorChooser.GetWidget<SliderWidget>("RANGE_SLIDER");
|
var colorChooser = Game.LoadWidget(orderManager.world, "COLOR_CHOOSER", new WidgetArgs()
|
||||||
rangeSlider.SetOffset(orderManager.LocalClient.ColorRamp.R / 255f);
|
{
|
||||||
|
{ "onSelect", onSelect },
|
||||||
hueSlider.OnChange += _ => UpdateColorPreview(hueSlider.GetOffset(), satSlider.GetOffset(), lumSlider.GetOffset(), rangeSlider.GetOffset());
|
{ "onChange", onChange },
|
||||||
satSlider.OnChange += _ => UpdateColorPreview(hueSlider.GetOffset(), satSlider.GetOffset(), lumSlider.GetOffset(), rangeSlider.GetOffset());
|
{ "initialRamp", orderManager.LocalClient.ColorRamp }
|
||||||
lumSlider.OnChange += _ => UpdateColorPreview(hueSlider.GetOffset(), satSlider.GetOffset(), lumSlider.GetOffset(), rangeSlider.GetOffset());
|
|
||||||
rangeSlider.OnChange += _ => UpdateColorPreview(hueSlider.GetOffset(), satSlider.GetOffset(), lumSlider.GetOffset(), rangeSlider.GetOffset());
|
|
||||||
UpdateColorPreview(hueSlider.GetOffset(), satSlider.GetOffset(), lumSlider.GetOffset(), rangeSlider.GetOffset());
|
|
||||||
|
|
||||||
CncDropDownButtonWidget.ShowDropPanel(color, colorChooser, new List<Widget>() {colorChooser.GetWidget("BUTTON_OK")}, () => {
|
|
||||||
UpdateColorPreview(hueSlider.GetOffset(), satSlider.GetOffset(), lumSlider.GetOffset(), rangeSlider.GetOffset());
|
|
||||||
UpdatePlayerColor(hueSlider.GetOffset(), satSlider.GetOffset(), lumSlider.GetOffset(), rangeSlider.GetOffset());
|
|
||||||
return true;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Console.WriteLine(colorChooser.Id);
|
||||||
|
|
||||||
|
CncDropDownButtonWidget.ShowDropPanel(color, colorChooser, new List<Widget>() { colorChooser.GetWidget("SAVE_BUTTON") }, () => true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -600,4 +582,51 @@ namespace OpenRA.Mods.Cnc.Widgets
|
|||||||
orderManager.IssueOrder(Order.Command("ready"));
|
orderManager.IssueOrder(Order.Command("ready"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class CncColorPickerLogic : IWidgetDelegate
|
||||||
|
{
|
||||||
|
ColorRamp ramp;
|
||||||
|
[ObjectCreator.UseCtor]
|
||||||
|
public CncColorPickerLogic([ObjectCreator.Param] Widget widget,
|
||||||
|
[ObjectCreator.Param] ColorRamp initialRamp,
|
||||||
|
[ObjectCreator.Param] Action<ColorRamp> onChange,
|
||||||
|
[ObjectCreator.Param] Action<ColorRamp> onSelect,
|
||||||
|
[ObjectCreator.Param] WorldRenderer worldRenderer)
|
||||||
|
{
|
||||||
|
var panel = widget.GetWidget("COLOR_CHOOSER");
|
||||||
|
var hueSlider = panel.GetWidget<SliderWidget>("HUE_SLIDER");
|
||||||
|
hueSlider.SetOffset(initialRamp.H / 255f);
|
||||||
|
|
||||||
|
var satSlider = panel.GetWidget<SliderWidget>("SAT_SLIDER");
|
||||||
|
satSlider.SetOffset(initialRamp.S / 255f);
|
||||||
|
|
||||||
|
var lumSlider = panel.GetWidget<SliderWidget>("LUM_SLIDER");
|
||||||
|
lumSlider.SetOffset(initialRamp.L / 255f);
|
||||||
|
|
||||||
|
var rangeSlider = panel.GetWidget<SliderWidget>("RANGE_SLIDER");
|
||||||
|
rangeSlider.SetOffset(initialRamp.R / 255f);
|
||||||
|
|
||||||
|
panel.GetWidget<CncMenuButtonWidget>("SAVE_BUTTON").OnClick = () =>
|
||||||
|
{
|
||||||
|
onSelect(ramp);
|
||||||
|
};
|
||||||
|
|
||||||
|
Action sliderChanged = () =>
|
||||||
|
{
|
||||||
|
ramp = new ColorRamp((byte)(255*hueSlider.GetOffset()),
|
||||||
|
(byte)(255*satSlider.GetOffset()),
|
||||||
|
(byte)(255*lumSlider.GetOffset()),
|
||||||
|
(byte)(255*rangeSlider.GetOffset()));
|
||||||
|
onChange(ramp);
|
||||||
|
};
|
||||||
|
|
||||||
|
hueSlider.OnChange += _ => sliderChanged();
|
||||||
|
satSlider.OnChange += _ => sliderChanged();
|
||||||
|
lumSlider.OnChange += _ => sliderChanged();
|
||||||
|
rangeSlider.OnChange += _ => sliderChanged();
|
||||||
|
|
||||||
|
// Set the initial state
|
||||||
|
sliderChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ namespace OpenRA.Mods.RA
|
|||||||
|
|
||||||
public void WorldLoaded(World world)
|
public void WorldLoaded(World world)
|
||||||
{
|
{
|
||||||
Game.LoadWidget(world, Info.Widget, new WidgetArgs());
|
Widget.RootWidget.AddChild(Game.LoadWidget(world, Info.Widget, new WidgetArgs()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -377,17 +377,18 @@ Container@SERVER_LOBBY:
|
|||||||
Text:Start Game
|
Text:Start Game
|
||||||
Background@COLOR_CHOOSER:
|
Background@COLOR_CHOOSER:
|
||||||
Id:COLOR_CHOOSER
|
Id:COLOR_CHOOSER
|
||||||
|
Delegate:CncColorPickerLogic
|
||||||
Background:panel-black
|
Background:panel-black
|
||||||
Width:315
|
Width:315
|
||||||
Height:120
|
Height:120
|
||||||
Children:
|
Children:
|
||||||
CncMenuButton@BUTTON_OK:
|
CncMenuButton@SAVE_BUTTON:
|
||||||
Id:BUTTON_OK
|
Id:SAVE_BUTTON
|
||||||
X:210
|
X:210
|
||||||
Y:80
|
Y:80
|
||||||
Width:90
|
Width:90
|
||||||
Height:25
|
Height:25
|
||||||
Text:Ok
|
Text:Save
|
||||||
Bold:True
|
Bold:True
|
||||||
ShpImage@FACT:
|
ShpImage@FACT:
|
||||||
Id:FACT
|
Id:FACT
|
||||||
|
|||||||
Reference in New Issue
Block a user