diff --git a/OpenRA.Editor/Form1.cs b/OpenRA.Editor/Form1.cs index 17a4a0283a..83fbc517b9 100755 --- a/OpenRA.Editor/Form1.cs +++ b/OpenRA.Editor/Form1.cs @@ -558,7 +558,7 @@ namespace OpenRA.Editor if (player == null) return; - var color = player.ColorRamp.GetColor(0); + var color = player.Color.RGB; using( var brush = new SolidBrush(color) ) e.Graphics.FillRectangle( brush, e.Bounds.Left + 2, e.Bounds.Top + 2, e.Bounds.Height + 6, e.Bounds.Height - 4 ); using( var foreBrush = new SolidBrush(e.ForeColor) ) diff --git a/OpenRA.Editor/LegacyMapImporter.cs b/OpenRA.Editor/LegacyMapImporter.cs index 96161bad37..f1bf2208e4 100644 --- a/OpenRA.Editor/LegacyMapImporter.cs +++ b/OpenRA.Editor/LegacyMapImporter.cs @@ -83,18 +83,18 @@ namespace OpenRA.Editor }; // TODO: fix this -- will have bitrotted pretty badly. - static Dictionary> namedColorMapping = new Dictionary>() + static Dictionary namedColorMapping = new Dictionary() { - {"gold",Pair.New(Color.FromArgb(246,214,121),Color.FromArgb(40,32,8))}, - {"blue",Pair.New(Color.FromArgb(226,230,246),Color.FromArgb(8,20,52))}, - {"red",Pair.New(Color.FromArgb(255,20,0),Color.FromArgb(56,0,0))}, - {"neutral",Pair.New(Color.FromArgb(238,238,238),Color.FromArgb(44,28,24))}, - {"orange",Pair.New(Color.FromArgb(255,230,149),Color.FromArgb(56,0,0))}, - {"teal",Pair.New(Color.FromArgb(93,194,165),Color.FromArgb(0,32,32))}, - {"salmon",Pair.New(Color.FromArgb(210,153,125),Color.FromArgb(56,0,0))}, - {"green",Pair.New(Color.FromArgb(160,240,140),Color.FromArgb(20,20,20))}, - {"white",Pair.New(Color.FromArgb(255,255,255),Color.FromArgb(75,75,75))}, - {"black",Pair.New(Color.FromArgb(80,80,80),Color.FromArgb(5,5,5))}, + { "gold", HSLColor.FromRGB(246,214,121) }, + { "blue", HSLColor.FromRGB(226,230,246) }, + { "red", HSLColor.FromRGB(255,20,0) }, + { "neutral", HSLColor.FromRGB(238,238,238) }, + { "orange", HSLColor.FromRGB(255,230,149) }, + { "teal", HSLColor.FromRGB(93,194,165) }, + { "salmon", HSLColor.FromRGB(210,153,125) }, + { "green", HSLColor.FromRGB(160,240,140) }, + { "white", HSLColor.FromRGB(255,255,255) }, + { "black", HSLColor.FromRGB(80,80,80) }, }; int MapSize; @@ -460,19 +460,13 @@ namespace OpenRA.Editor break; } - var color = namedColorMapping[c]; - var pr = new PlayerReference { Name = section, OwnsWorld = section == "Neutral", NonCombatant = section == "Neutral", Race = race, - ColorRamp = new ColorRamp( - (byte)((color.First.GetHue() / 360.0f) * 255), - (byte)(color.First.GetSaturation() * 255), - (byte)(color.First.GetBrightness() * 255), - (byte)(color.Second.GetBrightness() * 255)) + Color = namedColorMapping[c] }; var neutral = new [] {"Neutral"}; diff --git a/OpenRA.Editor/Surface.cs b/OpenRA.Editor/Surface.cs index ea1823d478..fa8a4cb838 100755 --- a/OpenRA.Editor/Surface.cs +++ b/OpenRA.Editor/Surface.cs @@ -357,7 +357,7 @@ namespace OpenRA.Editor { var pr = Map.Players[name]; var pcpi = Rules.Info["player"].Traits.Get(); - var remap = new PlayerColorRemap(pcpi.RemapIndex, pr.ColorRamp); + var remap = new PlayerColorRemap(pcpi.RemapIndex, pr.Color, pcpi.Ramp); return new Palette(PlayerPalette, remap).AsSystemPalette(); } diff --git a/OpenRA.FileFormats/ColorRamp.cs b/OpenRA.FileFormats/ColorRamp.cs deleted file mode 100644 index 5f0d9f74cd..0000000000 --- a/OpenRA.FileFormats/ColorRamp.cs +++ /dev/null @@ -1,62 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2011 The OpenRA Developers (see AUTHORS) - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation. For more information, - * see COPYING. - */ -#endregion - -using System.Drawing; - -namespace OpenRA.FileFormats -{ - public struct ColorRamp - { - public readonly HSLColor Color; - public byte Ramp; - - public ColorRamp(HSLColor color, byte ramp) - { - Color = color; - Ramp = ramp; - } - - public ColorRamp(byte h, byte s, byte l, byte r) - { - Color = new HSLColor(h, s, l); - Ramp = r; - } - - /* returns a color along the Lum ramp */ - public Color GetColor(float t) - { - var l = float2.Lerp(Color.L, Color.L*Ramp/255f, t); - return HSLColor.RGBFromHSL(Color.H/255f, Color.S/255f, l/255f); - } - - public override string ToString() - { - return "{0},{1}".F(Color.ToString(), Ramp); - } - - public static bool operator ==(ColorRamp me, ColorRamp other) - { - return (me.Color == other.Color && me.Ramp == other.Ramp); - } - - public static bool operator !=(ColorRamp me, ColorRamp other) { return !(me == other); } - - public override int GetHashCode() { return Color.GetHashCode() ^ Ramp.GetHashCode(); } - - public override bool Equals(object obj) - { - if (obj == null) - return false; - - ColorRamp o = (ColorRamp)obj; - return o == this; - } - } -} diff --git a/OpenRA.FileFormats/FieldLoader.cs b/OpenRA.FileFormats/FieldLoader.cs index 4bf58bdacb..5c966eb114 100755 --- a/OpenRA.FileFormats/FieldLoader.cs +++ b/OpenRA.FileFormats/FieldLoader.cs @@ -148,15 +148,15 @@ namespace OpenRA.FileFormats return InvalidValueAction(x,fieldType, field); } - else if (fieldType == typeof(ColorRamp)) + else if (fieldType == typeof(HSLColor)) { var parts = x.Split(','); - if (parts.Length == 4) - return new ColorRamp( + // Allow old ColorRamp format to be parsed as HSLColor + if (parts.Length == 3 || parts.Length == 4) + return new HSLColor( (byte)int.Parse(parts[0]).Clamp(0, 255), (byte)int.Parse(parts[1]).Clamp(0, 255), - (byte)int.Parse(parts[2]).Clamp(0, 255), - (byte)int.Parse(parts[3]).Clamp(0, 255)); + (byte)int.Parse(parts[2]).Clamp(0, 255)); return InvalidValueAction(x, fieldType, field); } diff --git a/OpenRA.FileFormats/HSLColor.cs b/OpenRA.FileFormats/HSLColor.cs index 3b3eab81dd..ef95c203be 100644 --- a/OpenRA.FileFormats/HSLColor.cs +++ b/OpenRA.FileFormats/HSLColor.cs @@ -17,17 +17,14 @@ namespace OpenRA.FileFormats public readonly byte H; public readonly byte S; public readonly byte L; + public readonly Color RGB; public HSLColor(byte h, byte s, byte l) { H = h; S = s; L = l; - } - - public Color ToColor() - { - return RGBFromHSL(H / 255f, S / 255f, L / 255f); + RGB = RGBFromHSL(H / 255f, S / 255f, L / 255f); } public void ToHSV(out float h, out float s, out float v) @@ -47,6 +44,15 @@ namespace OpenRA.FileFormats return new HSLColor((byte)(255*h), (byte)(255*ss), (byte)(255*ll)); } + public static HSLColor FromRGB(int r, int g, int b) + { + var c = Color.FromArgb(r, g, b); + var h = (byte)((c.GetHue() / 360.0f) * 255); + var s = (byte)(c.GetSaturation() * 255); + var l = (byte)(c.GetBrightness() * 255); + return new HSLColor(h, s, l); + } + public static Color RGBFromHSL(float h, float s, float l) { // Convert from HSL to RGB diff --git a/OpenRA.FileFormats/Map/PlayerReference.cs b/OpenRA.FileFormats/Map/PlayerReference.cs index cb72a61f52..5107a913ae 100644 --- a/OpenRA.FileFormats/Map/PlayerReference.cs +++ b/OpenRA.FileFormats/Map/PlayerReference.cs @@ -28,8 +28,10 @@ namespace OpenRA.FileFormats public bool LockRace = false; public string Race; + // ColorRamp naming retained for backward compatibility public bool LockColor = false; - public ColorRamp ColorRamp = new ColorRamp(0,0,238,34); + public HSLColor ColorRamp = new HSLColor(0,0,238); + public HSLColor Color { get { return ColorRamp; } set { ColorRamp = value; }} public bool LockSpawn = false; public int Spawn = 0; diff --git a/OpenRA.FileFormats/OpenRA.FileFormats.csproj b/OpenRA.FileFormats/OpenRA.FileFormats.csproj index e2835f3e54..9f1021c641 100644 --- a/OpenRA.FileFormats/OpenRA.FileFormats.csproj +++ b/OpenRA.FileFormats/OpenRA.FileFormats.csproj @@ -77,7 +77,6 @@ - diff --git a/OpenRA.FileFormats/PlayerColorRemap.cs b/OpenRA.FileFormats/PlayerColorRemap.cs index 34fb706cd9..24befa83bb 100755 --- a/OpenRA.FileFormats/PlayerColorRemap.cs +++ b/OpenRA.FileFormats/PlayerColorRemap.cs @@ -8,6 +8,7 @@ */ #endregion +using System; using System.Collections.Generic; using System.Drawing; using System.Linq; @@ -24,18 +25,19 @@ namespace OpenRA.FileFormats return Ramp[i]; } - public PlayerColorRemap(int[] Ramp, ColorRamp c) + public PlayerColorRemap(int[] Ramp, HSLColor c, float rampFraction) { - var c1 = c.GetColor(0); - var c2 = c.GetColor(1); // temptemp: this can be expressed better - + // Increase luminosity if required to represent the full ramp + var rampRange = (byte)((1 - rampFraction)*c.L); + var c1 = new HSLColor(c.H, c.S, (byte)Math.Max(rampRange, c.L)).RGB; + var c2 = new HSLColor(c.H, c.S, (byte)Math.Max(0, c.L - rampRange)).RGB; var baseIndex = Ramp[0]; var RemapRamp = Ramp.Select(r => r - Ramp[0]).ToArray(); if (Ramp[0] > Ramp[15]) // reversed remapping - { + { baseIndex = Ramp[15]; - for (int i=15; i>0; i--) + for (var i = 15; i > 0; i--) RemapRamp = Ramp.Select(r => r - Ramp[15]).ToArray(); } diff --git a/OpenRA.Game/GameRules/Settings.cs b/OpenRA.Game/GameRules/Settings.cs index cbb55fec61..7fe4a0a860 100644 --- a/OpenRA.Game/GameRules/Settings.cs +++ b/OpenRA.Game/GameRules/Settings.cs @@ -110,7 +110,7 @@ namespace OpenRA.GameRules public class PlayerSettings { public string Name = "Newbie"; - public ColorRamp ColorRamp = new ColorRamp(75, 255, 180, 25); + public HSLColor Color = new HSLColor(75, 255, 180); public string LastServer = "localhost:1234"; } diff --git a/OpenRA.Game/Network/Session.cs b/OpenRA.Game/Network/Session.cs index 7896ced537..7c6a836b9a 100644 --- a/OpenRA.Game/Network/Session.cs +++ b/OpenRA.Game/Network/Session.cs @@ -47,9 +47,9 @@ namespace OpenRA.Network public class Client { public int Index; - public ColorRamp PreferredColorRamp; // Color that the client normally uses from settings.yaml. - public ColorRamp ColorRamp; // Actual color that the client is using. - // Usually the same as PreferredColorRamp but can be different on maps with locked colors. + public HSLColor PreferredColor; // Color that the client normally uses from settings.yaml. + public HSLColor Color; // Actual color that the client is using. + // Usually the same as PreferredColor but can be different on maps with locked colors. public string Country; public int SpawnPoint; public string Name; diff --git a/OpenRA.Game/Network/UnitOrders.cs b/OpenRA.Game/Network/UnitOrders.cs index ed65a20529..0aa368a004 100755 --- a/OpenRA.Game/Network/UnitOrders.cs +++ b/OpenRA.Game/Network/UnitOrders.cs @@ -45,7 +45,7 @@ namespace OpenRA.Network var player = world != null ? world.FindPlayerByClient(client) : null; var suffix = (player != null && player.WinState == WinState.Lost) ? " (Dead)" : ""; suffix = client.IsObserver ? " (Spectator)" : suffix; - Game.AddChatLine(client.ColorRamp.GetColor(0), client.Name + suffix, order.TargetString); + Game.AddChatLine(client.Color.RGB, client.Name + suffix, order.TargetString); } else Game.AddChatLine(Color.White, "(player {0})".F(clientId), order.TargetString); @@ -71,7 +71,7 @@ namespace OpenRA.Network if (world == null) { if (orderManager.LocalClient != null && client.Team == orderManager.LocalClient.Team) - Game.AddChatLine(client.ColorRamp.GetColor(0), client.Name + " (Team)", + Game.AddChatLine(client.Color.RGB, client.Name + " (Team)", order.TargetString); } else @@ -82,7 +82,7 @@ namespace OpenRA.Network if (world.LocalPlayer != null && player.Stances[world.LocalPlayer] == Stance.Ally || player.WinState == WinState.Lost) { var suffix = player.WinState == WinState.Lost ? " (Dead)" : " (Team)"; - Game.AddChatLine(client.ColorRamp.GetColor(0), client.Name + suffix, order.TargetString); + Game.AddChatLine(client.Color.RGB, client.Name + suffix, order.TargetString); } } } @@ -133,8 +133,8 @@ namespace OpenRA.Network var info = new Session.Client() { Name = Game.Settings.Player.Name, - PreferredColorRamp = Game.Settings.Player.ColorRamp, - ColorRamp = Game.Settings.Player.ColorRamp, + PreferredColor = Game.Settings.Player.Color, + Color = Game.Settings.Player.Color, Country = "random", SpawnPoint = 0, Team = 0, diff --git a/OpenRA.Game/Player.cs b/OpenRA.Game/Player.cs index abf87a34f7..7e36e2ca15 100644 --- a/OpenRA.Game/Player.cs +++ b/OpenRA.Game/Player.cs @@ -26,7 +26,7 @@ namespace OpenRA public int Deaths; public WinState WinState = WinState.Undefined; - public readonly ColorRamp ColorRamp; + public readonly HSLColor Color; public readonly string PlayerName; public readonly string InternalName; @@ -60,7 +60,7 @@ namespace OpenRA if (client != null) { ClientIndex = client.Index; - ColorRamp = client.ColorRamp; + Color = client.Color; PlayerName = client.Name; botType = client.Bot; Country = ChooseCountry(world, client.Country); @@ -69,7 +69,7 @@ namespace OpenRA { // Map player ClientIndex = 0; // Owned by the host (TODO: fix this) - ColorRamp = pr.ColorRamp; + Color = pr.Color; PlayerName = pr.Name; NonCombatant = pr.NonCombatant; botType = pr.Bot; diff --git a/OpenRA.Game/Server/Server.cs b/OpenRA.Game/Server/Server.cs index 70176592d6..a6fb8414c2 100644 --- a/OpenRA.Game/Server/Server.cs +++ b/OpenRA.Game/Server/Server.cs @@ -337,9 +337,9 @@ namespace OpenRA.Server if (pr == null) return; if (pr.LockColor) - c.ColorRamp = pr.ColorRamp; + c.Color = pr.Color; else - c.ColorRamp = c.PreferredColorRamp; + c.Color = c.PreferredColor; if (pr.LockRace) c.Country = pr.Race; if (pr.LockSpawn) diff --git a/OpenRA.Game/Traits/World/PlayerColorPalette.cs b/OpenRA.Game/Traits/World/PlayerColorPalette.cs index 6739068d2f..60199ffd78 100644 --- a/OpenRA.Game/Traits/World/PlayerColorPalette.cs +++ b/OpenRA.Game/Traits/World/PlayerColorPalette.cs @@ -16,15 +16,18 @@ namespace OpenRA.Traits [Desc("Add this to the Player actor definition.")] public class PlayerColorPaletteInfo : ITraitInfo { - [Desc("The Name of the palette to base off.")] + [Desc("The name of the palette to base off.")] public readonly string BasePalette = null; [Desc("The prefix for the resulting player palettes")] public readonly string BaseName = "player"; [Desc("Remap these indices to player colors.")] public readonly int[] RemapIndex = {}; + [Desc("Luminosity range to span.")] + public readonly float Ramp = 0.05f; + [Desc("Allow palette modifiers to change the palette.")] public readonly bool AllowModifiers = true; - public object Create( ActorInitializer init ) { return new PlayerColorPalette( init.self.Owner, this ); } + public object Create(ActorInitializer init) { return new PlayerColorPalette(init.self.Owner, this); } } public class PlayerColorPalette : IPalette @@ -32,18 +35,16 @@ namespace OpenRA.Traits readonly Player owner; readonly PlayerColorPaletteInfo info; - public PlayerColorPalette( Player owner, PlayerColorPaletteInfo info ) + public PlayerColorPalette(Player owner, PlayerColorPaletteInfo info) { this.owner = owner; this.info = info; } - public void InitPalette( WorldRenderer wr ) + public void InitPalette(WorldRenderer wr) { - var paletteName = "{0}{1}".F( info.BaseName, owner.InternalName ); - var newpal = new Palette(wr.Palette(info.BasePalette).Palette, - new PlayerColorRemap(info.RemapIndex, owner.ColorRamp)); - wr.AddPalette(paletteName, newpal, info.AllowModifiers); + var remap = new PlayerColorRemap(info.RemapIndex, owner.Color, info.Ramp); + wr.AddPalette(info.BaseName+owner.InternalName, new Palette(wr.Palette(info.BasePalette).Palette, remap), info.AllowModifiers); } } } diff --git a/OpenRA.Game/Widgets/MapPreviewWidget.cs b/OpenRA.Game/Widgets/MapPreviewWidget.cs index 3da666e6dc..9d98e38244 100644 --- a/OpenRA.Game/Widgets/MapPreviewWidget.cs +++ b/OpenRA.Game/Widgets/MapPreviewWidget.cs @@ -130,7 +130,7 @@ namespace OpenRA.Widgets TooltipSpawnIndex = -1; if (ShowSpawnPoints) { - var colors = SpawnClients().ToDictionary(c => c.Key, c => c.Value.ColorRamp.GetColor(0)); + var colors = SpawnClients().ToDictionary(c => c.Key, c => c.Value.Color.RGB); var spawnPoints = map.GetSpawnPoints().ToList(); foreach (var p in spawnPoints) diff --git a/OpenRA.Mods.Cnc/Widgets/Logic/CncConquestObjectivesLogic.cs b/OpenRA.Mods.Cnc/Widgets/Logic/CncConquestObjectivesLogic.cs index be81802353..6953dbc75d 100644 --- a/OpenRA.Mods.Cnc/Widgets/Logic/CncConquestObjectivesLogic.cs +++ b/OpenRA.Mods.Cnc/Widgets/Logic/CncConquestObjectivesLogic.cs @@ -49,7 +49,7 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic var item = itemTemplate.Clone(); var nameLabel = item.Get("NAME"); nameLabel.GetText = () => pp.WinState == WinState.Lost ? pp.PlayerName + " (Dead)" : pp.PlayerName; - nameLabel.GetColor = () => pp.ColorRamp.GetColor(0); + nameLabel.GetColor = () => pp.Color.RGB; var flag = item.Get("FACTIONFLAG"); flag.GetImageName = () => pp.Country.Race; diff --git a/OpenRA.Mods.Cnc/Widgets/Logic/CncSettingsLogic.cs b/OpenRA.Mods.Cnc/Widgets/Logic/CncSettingsLogic.cs index 57a9d266b2..27113f545e 100644 --- a/OpenRA.Mods.Cnc/Widgets/Logic/CncSettingsLogic.cs +++ b/OpenRA.Mods.Cnc/Widgets/Logic/CncSettingsLogic.cs @@ -55,11 +55,11 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic nameTextfield.Text = playerSettings.Name; colorPreview = panel.Get("COLOR_MANAGER"); - colorPreview.Ramp = playerSettings.ColorRamp; + colorPreview.Color = playerSettings.Color; var colorDropdown = generalPane.Get("COLOR"); colorDropdown.OnMouseDown = _ => ShowColorPicker(colorDropdown, playerSettings); - colorDropdown.Get("COLORBLOCK").GetColor = () => playerSettings.ColorRamp.GetColor(0); + colorDropdown.Get("COLORBLOCK").GetColor = () => playerSettings.Color.RGB; // Debug var perftextCheckbox = generalPane.Get("PERFTEXT_CHECKBOX"); @@ -155,17 +155,21 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic bool ShowColorPicker(DropDownButtonWidget color, PlayerSettings s) { - Action onExit = c => {s.ColorRamp = c; color.RemovePanel();}; - Action onChange = c => {colorPreview.Ramp = c;}; + Action onChange = c => colorPreview.Color = c; + Action onExit = () => + { + s.Color = colorPreview.Color; + color.RemovePanel(); + }; var colorChooser = Game.LoadWidget(world, "COLOR_CHOOSER", null, new WidgetArgs() { { "onExit", onExit }, { "onChange", onChange }, - { "initialRamp", s.ColorRamp } + { "initialColor", s.Color } }); - color.AttachPanel(colorChooser); + color.AttachPanel(colorChooser, onExit); return true; } diff --git a/OpenRA.Mods.Cnc/Widgets/Logic/WorldTooltipLogic.cs b/OpenRA.Mods.Cnc/Widgets/Logic/WorldTooltipLogic.cs index 978316a383..922e081c9f 100644 --- a/OpenRA.Mods.Cnc/Widgets/Logic/WorldTooltipLogic.cs +++ b/OpenRA.Mods.Cnc/Widgets/Logic/WorldTooltipLogic.cs @@ -55,7 +55,7 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic { flagRace = o.Country.Race; ownerName = o.PlayerName; - ownerColor = o.ColorRamp.GetColor(0); + ownerColor = o.Color.RGB; widget.Bounds.Height = doubleHeight; widget.Bounds.Width = Math.Max(widget.Bounds.Width, owner.Bounds.X + ownerFont.Measure(ownerName).X + 5); diff --git a/OpenRA.Mods.RA/Activities/DonateSupplies.cs b/OpenRA.Mods.RA/Activities/DonateSupplies.cs index 7a805cc826..c140c3f89e 100644 --- a/OpenRA.Mods.RA/Activities/DonateSupplies.cs +++ b/OpenRA.Mods.RA/Activities/DonateSupplies.cs @@ -35,7 +35,7 @@ namespace OpenRA.Mods.RA.Activities self.Destroy(); if (self.Owner.IsAlliedWith(self.World.RenderPlayer)) - self.World.AddFrameEndTask(w => w.Add(new CashTick(payload, 30, 2, target.CenterLocation, targetPlayer.ColorRamp.GetColor(0)))); + self.World.AddFrameEndTask(w => w.Add(new CashTick(payload, 30, 2, target.CenterLocation, targetPlayer.Color.RGB))); return this; } diff --git a/OpenRA.Mods.RA/Activities/Sell.cs b/OpenRA.Mods.RA/Activities/Sell.cs index 9a245177db..95f5a84ed6 100755 --- a/OpenRA.Mods.RA/Activities/Sell.cs +++ b/OpenRA.Mods.RA/Activities/Sell.cs @@ -32,10 +32,7 @@ namespace OpenRA.Mods.RA.Activities ns.Sold(self); if (refund > 0 && self.World.LocalPlayer != null && self.Owner.Stances[self.World.LocalPlayer] == Stance.Ally) - self.World.AddFrameEndTask( - w => w.Add(new CashTick(refund, 30, 2, - self.CenterLocation, - self.Owner.ColorRamp.GetColor(0)))); + self.World.AddFrameEndTask(w => w.Add(new CashTick(refund, 30, 2, self.CenterLocation, self.Owner.Color.RGB))); self.Destroy(); return this; diff --git a/OpenRA.Mods.RA/AppearsOnRadar.cs b/OpenRA.Mods.RA/AppearsOnRadar.cs index 714a8846f6..0d7316577a 100755 --- a/OpenRA.Mods.RA/AppearsOnRadar.cs +++ b/OpenRA.Mods.RA/AppearsOnRadar.cs @@ -42,7 +42,7 @@ namespace OpenRA.Mods.RA if (mod != null) return mod.RadarColorOverride(self); - return self.Owner.ColorRamp.GetColor(0); + return self.Owner.Color.RGB; } } } \ No newline at end of file diff --git a/OpenRA.Mods.RA/CashTrickler.cs b/OpenRA.Mods.RA/CashTrickler.cs index 3b74567b97..1a230d76ab 100644 --- a/OpenRA.Mods.RA/CashTrickler.cs +++ b/OpenRA.Mods.RA/CashTrickler.cs @@ -47,7 +47,7 @@ namespace OpenRA.Mods.RA self.Owner.PlayerActor.Trait().GiveCash(Info.Amount); ticks = Info.Period; if (Info.ShowTicks) - self.World.AddFrameEndTask(w => w.Add(new CashTick(Info.Amount, Info.TickLifetime, Info.TickVelocity, self.CenterLocation, self.Owner.ColorRamp.GetColor(0)))); + self.World.AddFrameEndTask(w => w.Add(new CashTick(Info.Amount, Info.TickLifetime, Info.TickVelocity, self.CenterLocation, self.Owner.Color.RGB))); } } } diff --git a/OpenRA.Mods.RA/Cloak.cs b/OpenRA.Mods.RA/Cloak.cs index ea823c9a23..b5a1cf770a 100644 --- a/OpenRA.Mods.RA/Cloak.cs +++ b/OpenRA.Mods.RA/Cloak.cs @@ -110,7 +110,7 @@ namespace OpenRA.Mods.RA public Color RadarColorOverride(Actor self) { - var c = self.Owner.ColorRamp.GetColor(0); + var c = self.Owner.Color.RGB; if (self.Owner == self.World.LocalPlayer && Cloaked) c = Color.FromArgb(128, c); return c; diff --git a/OpenRA.Mods.RA/Crates/GiveCashCrateAction.cs b/OpenRA.Mods.RA/Crates/GiveCashCrateAction.cs index 4146d0076d..43ecd9770e 100644 --- a/OpenRA.Mods.RA/Crates/GiveCashCrateAction.cs +++ b/OpenRA.Mods.RA/Crates/GiveCashCrateAction.cs @@ -34,7 +34,7 @@ namespace OpenRA.Mods.RA collector.Owner.PlayerActor.Trait().GiveCash(amount); if ((info as GiveCashCrateActionInfo).UseCashTick) - w.Add(new CashTick(amount, 20, 1, collector.CenterLocation, collector.Owner.ColorRamp.GetColor(0))); + w.Add(new CashTick(amount, 20, 1, collector.CenterLocation, collector.Owner.Color.RGB)); }); base.Activate(collector); diff --git a/OpenRA.Mods.RA/Effects/Contrail.cs b/OpenRA.Mods.RA/Effects/Contrail.cs index 6776b2db00..aad81bd457 100755 --- a/OpenRA.Mods.RA/Effects/Contrail.cs +++ b/OpenRA.Mods.RA/Effects/Contrail.cs @@ -61,7 +61,7 @@ namespace OpenRA.Mods.RA public static Color ChooseColor(Actor self) { - var ownerColor = Color.FromArgb(255, self.Owner.ColorRamp.GetColor(0)); + var ownerColor = Color.FromArgb(255, self.Owner.Color.RGB); return Exts.ColorLerp(0.5f, ownerColor, Color.White); } diff --git a/OpenRA.Mods.RA/Effects/LaserZap.cs b/OpenRA.Mods.RA/Effects/LaserZap.cs index 222add4877..6b515fd21c 100755 --- a/OpenRA.Mods.RA/Effects/LaserZap.cs +++ b/OpenRA.Mods.RA/Effects/LaserZap.cs @@ -29,7 +29,7 @@ namespace OpenRA.Mods.RA.Effects public IEffect Create(ProjectileArgs args) { - var c = UsePlayerColor ? args.firedBy.Owner.ColorRamp.GetColor(0) : Color; + var c = UsePlayerColor ? args.firedBy.Owner.Color.RGB : Color; return new LaserZap(args, this, c); } } diff --git a/OpenRA.Mods.RA/GivesBounty.cs b/OpenRA.Mods.RA/GivesBounty.cs index bdc7ec6fdb..33cb51e101 100644 --- a/OpenRA.Mods.RA/GivesBounty.cs +++ b/OpenRA.Mods.RA/GivesBounty.cs @@ -54,7 +54,7 @@ namespace OpenRA.Mods.RA var bounty = cost * GetMultiplier(self) * info.Percentage / 10000; if (bounty > 0 && e.Attacker.World.LocalPlayer != null && e.Attacker.Owner.Stances[e.Attacker.World.LocalPlayer] == Stance.Ally) - e.Attacker.World.AddFrameEndTask(w => w.Add(new CashTick(bounty, 20, 1, self.CenterLocation, e.Attacker.Owner.ColorRamp.GetColor(0)))); + e.Attacker.World.AddFrameEndTask(w => w.Add(new CashTick(bounty, 20, 1, self.CenterLocation, e.Attacker.Owner.Color.RGB))); e.Attacker.Owner.PlayerActor.Trait().GiveCash(bounty); } diff --git a/OpenRA.Mods.RA/InfiltrateForCash.cs b/OpenRA.Mods.RA/InfiltrateForCash.cs index 03fde1bc2c..8273e09838 100644 --- a/OpenRA.Mods.RA/InfiltrateForCash.cs +++ b/OpenRA.Mods.RA/InfiltrateForCash.cs @@ -45,7 +45,7 @@ namespace OpenRA.Mods.RA Sound.PlayToPlayer(self.Owner, info.SoundToVictim); self.World.AddFrameEndTask(w => w.Add(new CashTick(toGive, 30, 2, self.CenterLocation, - infiltrator.Owner.ColorRamp.GetColor(0)))); + infiltrator.Owner.Color.RGB))); } } } diff --git a/OpenRA.Mods.RA/OreRefinery.cs b/OpenRA.Mods.RA/OreRefinery.cs index b81ea2fb2d..2023e951ca 100644 --- a/OpenRA.Mods.RA/OreRefinery.cs +++ b/OpenRA.Mods.RA/OreRefinery.cs @@ -93,7 +93,7 @@ namespace OpenRA.Mods.RA { var temp = currentDisplayValue; if (self.World.LocalPlayer != null && self.Owner.Stances[self.World.LocalPlayer] == Stance.Ally) - self.World.AddFrameEndTask(w => w.Add(new CashTick(temp, Info.TickLifetime, Info.TickVelocity, self.CenterLocation, self.Owner.ColorRamp.GetColor(0)))); + self.World.AddFrameEndTask(w => w.Add(new CashTick(temp, Info.TickLifetime, Info.TickVelocity, self.CenterLocation, self.Owner.Color.RGB))); currentDisplayTick = Info.TickRate; currentDisplayValue = 0; } diff --git a/OpenRA.Mods.RA/ServerTraits/LobbyCommands.cs b/OpenRA.Mods.RA/ServerTraits/LobbyCommands.cs index 1d2b742c82..277849175b 100644 --- a/OpenRA.Mods.RA/ServerTraits/LobbyCommands.cs +++ b/OpenRA.Mods.RA/ServerTraits/LobbyCommands.cs @@ -225,7 +225,7 @@ namespace OpenRA.Mods.RA.Server var hue = (byte)server.Random.Next(255); var sat = (byte)server.Random.Next(255); var lum = (byte)server.Random.Next(51,255); - bot.ColorRamp = bot.PreferredColorRamp = new ColorRamp(hue, sat, lum, 10); + bot.Color = bot.PreferredColor = new HSLColor(hue, sat, lum); server.lobbyInfo.Clients.Add(bot); } @@ -520,7 +520,7 @@ namespace OpenRA.Mods.RA.Server return true; var ci = parts[1].Split(',').Select(cc => int.Parse(cc)).ToArray(); - targetClient.ColorRamp = targetClient.PreferredColorRamp = new ColorRamp((byte)ci[0], (byte)ci[1], (byte)ci[2], (byte)ci[3]); + targetClient.Color = targetClient.PreferredColor = new HSLColor((byte)ci[0], (byte)ci[1], (byte)ci[2]); server.SyncLobbyInfo(); return true; }} diff --git a/OpenRA.Mods.RA/Spy.cs b/OpenRA.Mods.RA/Spy.cs index 083769cbac..d5f87d15e5 100644 --- a/OpenRA.Mods.RA/Spy.cs +++ b/OpenRA.Mods.RA/Spy.cs @@ -117,9 +117,9 @@ namespace OpenRA.Mods.RA { if (!Disguised || self.World.LocalPlayer == null || self.Owner.Stances[self.World.LocalPlayer] == Stance.Ally) - return self.Owner.ColorRamp.GetColor(0); + return self.Owner.Color.RGB; - return disguisedAsPlayer.ColorRamp.GetColor(0); + return disguisedAsPlayer.Color.RGB; } void DisguiseAs(Actor target) diff --git a/OpenRA.Mods.RA/Widgets/ColorMixerWidget.cs b/OpenRA.Mods.RA/Widgets/ColorMixerWidget.cs index f95a477399..6065e6a97f 100755 --- a/OpenRA.Mods.RA/Widgets/ColorMixerWidget.cs +++ b/OpenRA.Mods.RA/Widgets/ColorMixerWidget.cs @@ -106,7 +106,7 @@ namespace OpenRA.Mods.RA.Widgets // Generate palette in HSV for (var v = 0; v < 256; v++) for (var s = 0; s < 256; s++) - *(c + (v * bitmapData.Stride >> 2) + s) = HSLColor.FromHSV(hue, s / 255f, (255 - v) / 255f).ToColor().ToArgb(); + *(c + (v * bitmapData.Stride >> 2) + s) = HSLColor.FromHSV(hue, s / 255f, (255 - v) / 255f).RGB.ToArgb(); } backBitmap.UnlockBits(bitmapData); @@ -139,7 +139,7 @@ namespace OpenRA.Mods.RA.Widgets var sprite = ChromeProvider.GetImage("lobby-bits", "colorpicker"); var pos = RenderOrigin + PxFromValue() - new int2(sprite.bounds.Width/2, sprite.bounds.Height/2); - WidgetUtils.FillRectWithColor(new Rectangle(pos.X + 3, pos.Y + 3, 10, 10), Color.ToColor()); + WidgetUtils.FillRectWithColor(new Rectangle(pos.X + 3, pos.Y + 3, 10, 10), Color.RGB); Game.Renderer.RgbaSpriteRenderer.DrawSprite(sprite, pos); } diff --git a/OpenRA.Mods.RA/Widgets/ColorPreviewManagerWidget.cs b/OpenRA.Mods.RA/Widgets/ColorPreviewManagerWidget.cs index 78562d1236..9097ae2ae8 100755 --- a/OpenRA.Mods.RA/Widgets/ColorPreviewManagerWidget.cs +++ b/OpenRA.Mods.RA/Widgets/ColorPreviewManagerWidget.cs @@ -22,9 +22,10 @@ namespace OpenRA.Mods.RA.Widgets { public readonly string Palette = "colorpicker"; public readonly int[] RemapIndices = {}; - public ColorRamp Ramp; + public readonly float Ramp = 0.05f; + public HSLColor Color; - ColorRamp cachedRamp; + HSLColor cachedColor; WorldRenderer worldRenderer; Palette preview; @@ -43,11 +44,11 @@ namespace OpenRA.Mods.RA.Widgets public override void Tick() { - if (cachedRamp == Ramp) + if (cachedColor == Color) return; - preview.ApplyRemap(new PlayerColorRemap(RemapIndices, Ramp)); - cachedRamp = Ramp; + preview.ApplyRemap(new PlayerColorRemap(RemapIndices, Color, Ramp)); + cachedColor = Color; } } } diff --git a/OpenRA.Mods.RA/Widgets/HueSliderWidget.cs b/OpenRA.Mods.RA/Widgets/HueSliderWidget.cs index 43fed4c232..18b7b878d6 100755 --- a/OpenRA.Mods.RA/Widgets/HueSliderWidget.cs +++ b/OpenRA.Mods.RA/Widgets/HueSliderWidget.cs @@ -38,7 +38,7 @@ namespace OpenRA.Mods.RA.Widgets { int* c = (int*)bitmapData.Scan0; for (var h = 0; h < 256; h++) - *(c + h) = HSLColor.FromHSV(h/255f, 1, 1).ToColor().ToArgb(); + *(c + h) = HSLColor.FromHSV(h/255f, 1, 1).RGB.ToArgb(); } hueBitmap.UnlockBits(bitmapData); diff --git a/OpenRA.Mods.RA/Widgets/Logic/DiplomacyLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/DiplomacyLogic.cs index a1b6b2af3b..b206383a3c 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/DiplomacyLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/DiplomacyLogic.cs @@ -89,7 +89,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic Text = p.PlayerName, Align = TextAlign.Left, Font = "Bold", - Color = p.ColorRamp.GetColor(0), + Color = p.Color.RGB, }; bg.AddChild(label); diff --git a/OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs index e57c09181e..7fcc47c8f9 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs @@ -106,7 +106,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic NonEditableSpectatorTemplate = Players.Get("TEMPLATE_NONEDITABLE_SPECTATOR"); NewSpectatorTemplate = Players.Get("TEMPLATE_NEW_SPECTATOR"); colorPreview = lobby.Get("COLOR_MANAGER"); - colorPreview.Ramp = Game.Settings.Player.ColorRamp; + colorPreview.Color = Game.Settings.Player.Color; var mapPreview = lobby.Get("MAP_PREVIEW"); mapPreview.IsVisible = () => Map != null; diff --git a/OpenRA.Mods.RA/Widgets/Logic/LobbyUtils.cs b/OpenRA.Mods.RA/Widgets/Logic/LobbyUtils.cs index b9a11e4a38..816715c9da 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/LobbyUtils.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/LobbyUtils.cs @@ -107,20 +107,20 @@ namespace OpenRA.Mods.RA.Widgets.Logic { if (client.Bot == null) { - Game.Settings.Player.ColorRamp = preview.Ramp; + Game.Settings.Player.Color = preview.Color; Game.Settings.Save(); } color.RemovePanel(); - orderManager.IssueOrder(Order.Command("color {0} {1}".F(client.Index, preview.Ramp))); + orderManager.IssueOrder(Order.Command("color {0} {1}".F(client.Index, preview.Color))); }; - Action onChange = c => preview.Ramp = new ColorRamp(c, 10); + Action onChange = c => preview.Color = c; var colorChooser = Game.LoadWidget(orderManager.world, "COLOR_CHOOSER", null, new WidgetArgs() { { "onChange", onChange }, - { "initialColor", client.ColorRamp.Color } + { "initialColor", client.Color } }); color.AttachPanel(colorChooser, onExit); @@ -282,7 +282,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic public static void SetupColorWidget(Widget parent, Session.Slot s, Session.Client c) { var color = parent.Get("COLORBLOCK"); - color.GetColor = () => c.ColorRamp.GetColor(0); + color.GetColor = () => c.Color.RGB; } public static void SetupEditableFactionWidget(Widget parent, Session.Slot s, Session.Client c, OrderManager orderManager, Dictionary countryNames) diff --git a/OpenRA.Mods.RA/Widgets/Logic/ObserverStatsLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/ObserverStatsLogic.cs index 5b7ca6436f..c0a268aee4 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/ObserverStatsLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/ObserverStatsLogic.cs @@ -155,7 +155,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic graph.GetSeries = () => players.Select(p => new LineGraphSeries( p.PlayerName, - p.ColorRamp.GetColor(0), + p.Color.RGB, (p.PlayerActor.TraitOrDefault() ?? new PlayerStatistics(p.PlayerActor)).EarnedSamples.Select(s => (float)s) )); @@ -302,7 +302,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic var playerName = template.Get("PLAYER"); playerName.GetText = () => player.PlayerName + (player.WinState == WinState.Undefined ? "" : " (" + player.WinState + ")"); - playerName.GetColor = () => player.ColorRamp.GetColor(0); + playerName.GetColor = () => player.Color.RGB; } static Color GetPowerColor(PowerState state) diff --git a/OpenRA.Mods.RA/Widgets/WorldTooltipWidget.cs b/OpenRA.Mods.RA/Widgets/WorldTooltipWidget.cs index 4326041e09..f11b638a42 100755 --- a/OpenRA.Mods.RA/Widgets/WorldTooltipWidget.cs +++ b/OpenRA.Mods.RA/Widgets/WorldTooltipWidget.cs @@ -80,7 +80,7 @@ namespace OpenRA.Mods.RA.Widgets if (ownerText != "") { Game.Renderer.Fonts["Regular"].DrawText(ownerText, - new float2(Viewport.LastMousePos.X + 65, Viewport.LastMousePos.Y + 50), actor.Owner.ColorRamp.GetColor(0)); + new float2(Viewport.LastMousePos.X + 65, Viewport.LastMousePos.Y + 50), actor.Owner.Color.RGB); Game.Renderer.Fonts["Regular"].DrawText(stanceText, new float2(Viewport.LastMousePos.X + 65 + ownerSize.X, Viewport.LastMousePos.Y + 50), Color.White); diff --git a/OpenRA.Mods.RA/World/DebugOverlay.cs b/OpenRA.Mods.RA/World/DebugOverlay.cs index 8aa63d0038..9afb185bc9 100644 --- a/OpenRA.Mods.RA/World/DebugOverlay.cs +++ b/OpenRA.Mods.RA/World/DebugOverlay.cs @@ -57,7 +57,7 @@ namespace OpenRA.Mods.RA foreach (var pair in layers) { - Color c = (pair.Key != null) ? pair.Key.ColorRamp.GetColor(0f) : Color.PaleTurquoise; + Color c = (pair.Key != null) ? pair.Key.Color.RGB : Color.PaleTurquoise; var layer = pair.Value; for (int j = mapBounds.Top; j <= mapBounds.Bottom; ++j)