diff --git a/OpenRA.Server/Server.cs b/OpenRA.Server/Server.cs index 3b47febc5c..679c51bce7 100644 --- a/OpenRA.Server/Server.cs +++ b/OpenRA.Server/Server.cs @@ -58,11 +58,12 @@ namespace OpenRA.Server throw new InvalidOperationException("Already got 8 players"); } - static int ChooseFreePalette() + static string ChooseFreePalette() { + // TODO: FIX for (var i = 0; i < 8; i++) - if (lobbyInfo.Clients.All(c => c.Palette != i)) - return i; + //if (lobbyInfo.Clients.All(c => c.Palette != i)) + return "player"+i; throw new InvalidOperationException("No free palettes"); } @@ -247,14 +248,15 @@ namespace OpenRA.Server SendChatTo( conn, "You can't change your color after the game has started" ); return true; } - - int pal; - if (!int.TryParse(s, out pal) || pal < 0 || pal > 7) + int pali; + + if (!int.TryParse(s, out pali) || pali < 0 || pali > 7) { Console.WriteLine("Invalid palette: {0}", s); return false; } - + string pal = "player"+pali; + if (lobbyInfo.Clients.Where( c => c != GetClient(conn) ).Any( c => c.Palette == pal )) { SendChatTo( conn, "You can't be the same color as another player" ); diff --git a/OpenRa.FileFormats/Session.cs b/OpenRa.FileFormats/Session.cs index 7b672d11bd..17840142fb 100644 --- a/OpenRa.FileFormats/Session.cs +++ b/OpenRa.FileFormats/Session.cs @@ -20,7 +20,7 @@ namespace OpenRa.FileFormats public class Client { public int Index; - public int Palette; + public string Palette; public int Race; // public int SpawnPoint; public string Name; diff --git a/OpenRa.Game/Chat.cs b/OpenRa.Game/Chat.cs index bafd46ce16..20449cc254 100644 --- a/OpenRa.Game/Chat.cs +++ b/OpenRa.Game/Chat.cs @@ -39,21 +39,9 @@ namespace OpenRa typing += c; } - public static readonly Color[] paletteColors = - { - Color.FromArgb(228, 200, 112), - Color.FromArgb(56, 72, 125), - Color.FromArgb(238, 0, 0), - Color.FromArgb(198,97,0), - Color.FromArgb(28,109,97), - Color.FromArgb(153,76,53), - Color.FromArgb(76,101,60), - Color.FromArgb(133,113,101), - }; - public void AddLine(Player p, string text) { - AddLine(paletteColors[(int) p.Palette], p.PlayerName, text); + AddLine(p.Color, p.PlayerName, text); } public void AddLine(Color c, string from, string text) diff --git a/OpenRa.Game/Chrome.cs b/OpenRa.Game/Chrome.cs index bb47ad0b1f..7704cafa6a 100644 --- a/OpenRa.Game/Chrome.cs +++ b/OpenRa.Game/Chrome.cs @@ -193,7 +193,7 @@ namespace OpenRa DrawRadar( world ); DrawPower( world ); - rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, chromeCollection, "moneybin"), new float2(Game.viewport.Width - 320, 0), PaletteType.Chrome); + rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, chromeCollection, "moneybin"), new float2(Game.viewport.Width - 320, 0), "chrome"); DrawMoney( world ); rgbaRenderer.Flush(); DrawButtons( world ); @@ -316,7 +316,7 @@ namespace OpenRa DrawDialogBackground(mapRect, panelSprites, false); rgbaRenderer.DrawSprite(mapChooserSprite, new float2(mapRect.Location) + new float2(4, 4), - PaletteType.Chrome, + "chrome", new float2(mapRect.Size) - new float2(8, 8)); rgbaRenderer.Flush(); @@ -350,14 +350,15 @@ namespace OpenRa AddButton(r, _ => { }); } - bool PaletteAvailable(int palette) { return Game.LobbyInfo.Clients.All(c => c.Palette != palette); } + bool PaletteAvailable(string palette) { return Game.LobbyInfo.Clients.All(c => c.Palette != palette); } void CyclePalette(bool left) { var d = left ? 1 : 7; - var newpalette = ((int)Game.world.LocalPlayer.Palette + d) % 8; - while (!PaletteAvailable(newpalette) && newpalette != (int)Game.world.LocalPlayer.Palette) - newpalette = (newpalette + d) % 8; + // TODO: FIX + var newpalette = 1;//((int)Game.world.LocalPlayer.Palette + d) % 8; + //while (!PaletteAvailable(newpalette) && newpalette != (int)Game.world.LocalPlayer.Palette) + // newpalette = (newpalette + d) % 8; Game.IssueOrder( Order.Chat("/pal " + newpalette)); @@ -446,7 +447,7 @@ namespace OpenRa AddButton(paletteRect, CyclePalette); shpRenderer.DrawSprite(colorBlock, new float2(paletteRect.Left + 4, paletteRect.Top + 4), - (PaletteType)client.Palette); + client.Palette); var raceRect = new Rectangle(r.Left + 290, y - 2, 65, 22); DrawDialogBackground(raceRect, panelSprites, false); @@ -463,7 +464,7 @@ namespace OpenRa shpRenderer.DrawSprite(colorBlock, new float2(paletteRect.Left + 4, paletteRect.Top + 4), - (PaletteType)client.Palette); + client.Palette); renderer.DrawText(((Race)client.Race).ToString(), new int2(r.Left + 300, y), Color.White); renderer.DrawText(client.State.ToString(), new int2(r.Left + 370, y), Color.White); @@ -530,12 +531,12 @@ namespace OpenRa hasRadar = hasNewRadar; - rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, radarCollection, "left"), radarOrigin, PaletteType.Chrome); - rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, radarCollection, "right"), radarOrigin + new float2(201, 0), PaletteType.Chrome); - rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, radarCollection, "bottom"), radarOrigin + new float2(0, 192), PaletteType.Chrome); + rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, radarCollection, "left"), radarOrigin, "chrome"); + rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, radarCollection, "right"), radarOrigin + new float2(201, 0), "chrome"); + rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, radarCollection, "bottom"), radarOrigin + new float2(0, 192), "chrome"); if (radarAnimating) - rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, radarCollection, "bg"), radarOrigin + new float2(9, 0), PaletteType.Chrome); + rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, radarCollection, "bg"), radarOrigin + new float2(9, 0), "chrome"); rgbaRenderer.Flush(); @@ -567,7 +568,7 @@ namespace OpenRa var producing = queue.CurrentItem(groupName); var index = q.Key == currentTab ? 2 : (producing != null && producing.Done) ? 1 : 0; var race = (world.LocalPlayer.Race == Race.Allies) ? "allies" : "soviet"; - rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer,"tabs-"+tabKeys[index], race+"-"+q.Key), new float2(x, y), PaletteType.Chrome); + rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer,"tabs-"+tabKeys[index], race+"-"+q.Key), new float2(x, y), "chrome"); buttons.Add(Pair.New(new RectangleF(x, y, tabWidth, tabHeight), (Action)(isLmb => HandleTabClick(groupName)))); @@ -600,7 +601,7 @@ namespace OpenRa var x = Game.viewport.Width - 65; foreach (var d in moneyDigits.Reverse()) { - rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, digitCollection, (d - '0').ToString()), new float2(x, 6), PaletteType.Chrome); + rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, digitCollection, (d - '0').ToString()), new float2(x, 6), "chrome"); x -= 14; } } @@ -655,7 +656,7 @@ namespace OpenRa lastPowerDrainedPos = float2.Lerp(lastPowerDrainedPos.GetValueOrDefault(powerDrainedTemp), powerDrainedTemp, .3f); float2 powerDrainLevel = new float2(lastPowerDrainedPos.Value-indicator.size.X/2, barStart.Y-1); - rgbaRenderer.DrawSprite(indicator, powerDrainLevel, PaletteType.Chrome); + rgbaRenderer.DrawSprite(indicator, powerDrainLevel, "chrome"); rgbaRenderer.Flush(); } @@ -675,7 +676,7 @@ namespace OpenRa repairButton.ReplaceAnim(Game.controller.orderGenerator is RepairOrderGenerator ? "pressed" : "normal"); AddButton(repairRect, isLmb => Game.controller.ToggleInputMode()); } - shpRenderer.DrawSprite(repairButton.Image, repairDrawPos, PaletteType.Chrome); + shpRenderer.DrawSprite(repairButton.Image, repairDrawPos, "chrome"); // Sell Rectangle sellRect = new Rectangle(buttonOrigin.X+40, buttonOrigin.Y, @@ -686,7 +687,7 @@ namespace OpenRa sellButton.ReplaceAnim(Game.controller.orderGenerator is SellOrderGenerator ? "pressed" : "normal"); AddButton(sellRect, isLmb => Game.controller.ToggleInputMode()); - shpRenderer.DrawSprite(sellButton.Image, sellDrawPos, PaletteType.Chrome); + shpRenderer.DrawSprite(sellButton.Image, sellDrawPos, "chrome"); shpRenderer.Flush(); if (Game.Settings.PowerDownBuildings) @@ -700,7 +701,7 @@ namespace OpenRa pwrdownButton.ReplaceAnim(Game.controller.orderGenerator is PowerDownOrderGenerator ? "pressed" : "normal"); AddButton(pwrdownRect, isLmb => Game.controller.ToggleInputMode()); - shpRenderer.DrawSprite(pwrdownButton.Image, pwrdownDrawPos, PaletteType.Chrome); + shpRenderer.DrawSprite(pwrdownButton.Image, pwrdownDrawPos, "chrome"); } shpRenderer.Flush(); @@ -713,7 +714,7 @@ namespace OpenRa optionsButton.ReplaceAnim(optionsPressed ? "left-pressed" : "left-normal"); AddButton(optionsRect, isLmb => optionsPressed = !optionsPressed); - shpRenderer.DrawSprite(optionsButton.Image, optionsDrawPos, PaletteType.Chrome); + shpRenderer.DrawSprite(optionsButton.Image, optionsDrawPos, "chrome"); shpRenderer.Flush(); renderer.DrawText("Options", new int2((int)(optionsButton.Image.size.X - renderer.MeasureText("Options").X)/2, -2) , Color.White); @@ -739,26 +740,26 @@ namespace OpenRa if (ss.Length > 8) for( var x = r.Left + (int)ss[2].size.X; x < r.Right - (int)ss[3].size.X; x += (int)ss[8].size.X ) for( var y = r.Top + (int)ss[0].size.Y; y < r.Bottom - (int)ss[1].size.Y; y += (int)ss[8].size.Y ) - sr.DrawSprite(ss[8], new float2(x, y), PaletteType.Chrome); + sr.DrawSprite(ss[8], new float2(x, y), "chrome"); //draw borders for (var y = r.Top + (int)ss[0].size.Y; y < r.Bottom - (int)ss[1].size.Y; y += (int)ss[1].size.Y) { - sr.DrawSprite(ss[2], new float2(r.Left, y), PaletteType.Chrome); - sr.DrawSprite(ss[3], new float2(r.Right - ss[3].size.X, y), PaletteType.Chrome); + sr.DrawSprite(ss[2], new float2(r.Left, y), "chrome"); + sr.DrawSprite(ss[3], new float2(r.Right - ss[3].size.X, y), "chrome"); } for (var x = r.Left + (int)ss[2].size.X; x < r.Right - (int)ss[3].size.X; x += (int)ss[3].size.X) { - sr.DrawSprite(ss[0], new float2(x, r.Top), PaletteType.Chrome); - sr.DrawSprite(ss[1], new float2(x, r.Bottom - ss[1].size.Y), PaletteType.Chrome); + sr.DrawSprite(ss[0], new float2(x, r.Top), "chrome"); + sr.DrawSprite(ss[1], new float2(x, r.Bottom - ss[1].size.Y), "chrome"); } - sr.DrawSprite(ss[4], new float2(r.Left, r.Top), PaletteType.Chrome); - sr.DrawSprite(ss[5], new float2(r.Right - ss[5].size.X, r.Top), PaletteType.Chrome); - sr.DrawSprite(ss[6], new float2(r.Left, r.Bottom - ss[6].size.Y), PaletteType.Chrome); - sr.DrawSprite(ss[7], new float2(r.Right - ss[7].size.X, r.Bottom - ss[7].size.Y), PaletteType.Chrome); + sr.DrawSprite(ss[4], new float2(r.Left, r.Top), "chrome"); + sr.DrawSprite(ss[5], new float2(r.Right - ss[5].size.X, r.Top), "chrome"); + sr.DrawSprite(ss[6], new float2(r.Left, r.Bottom - ss[6].size.Y), "chrome"); + sr.DrawSprite(ss[7], new float2(r.Right - ss[7].size.X, r.Bottom - ss[7].size.Y), "chrome"); sr.Flush(); renderer.Device.DisableScissor(); @@ -858,7 +859,7 @@ namespace OpenRa string tooltipItem = null; // Draw the top border - rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, paletteCollection, "top"), new float2(origin.X - 9, origin.Y - 9), PaletteType.Chrome); + rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, paletteCollection, "top"), new float2(origin.X - 9, origin.Y - 9), "chrome"); // Draw the icons int lasty = -1; @@ -867,7 +868,7 @@ namespace OpenRa // Draw the background for this row if (y != lasty) { - rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, paletteCollection, "bg-" + (y % 4).ToString()), new float2(origin.X - 9, origin.Y + 48 * y), PaletteType.Chrome); + rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, paletteCollection, "bg-" + (y % 4).ToString()), new float2(origin.X - 9, origin.Y + 48 * y), "chrome"); rgbaRenderer.Flush(); lasty = y; } @@ -876,7 +877,7 @@ namespace OpenRa var drawPos = new float2(rect.Location); var isBuildingSomething = queue.CurrentItem(queueName) != null; - shpRenderer.DrawSprite(tabSprites[item.Name], drawPos, PaletteType.Chrome); + shpRenderer.DrawSprite(tabSprites[item.Name], drawPos, "chrome"); var firstOfThis = queue.AllItems(queueName).FirstOrDefault(a => a.Item == item.Name); @@ -892,7 +893,7 @@ namespace OpenRa * NumClockFrames / firstOfThis.TotalTime); clock.Tick(); - shpRenderer.DrawSprite(clock.Image, drawPos, PaletteType.Chrome); + shpRenderer.DrawSprite(clock.Image, drawPos, "chrome"); if (firstOfThis.Done) { @@ -934,23 +935,23 @@ namespace OpenRa while (y < paletteRows) { - rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, paletteCollection, "bg-" + (y % 4).ToString()), new float2(origin.X - 9, origin.Y + 48 * y), PaletteType.Chrome); + rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, paletteCollection, "bg-" + (y % 4).ToString()), new float2(origin.X - 9, origin.Y + 48 * y), "chrome"); y++; } foreach (var ob in overlayBits) - shpRenderer.DrawSprite(ob.First, ob.Second, PaletteType.Chrome); + shpRenderer.DrawSprite(ob.First, ob.Second, "chrome"); shpRenderer.Flush(); - rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, paletteCollection, "bottom"), new float2(origin.X - 9, origin.Y - 1 + 48 * y), PaletteType.Chrome); + rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, paletteCollection, "bottom"), new float2(origin.X - 9, origin.Y - 1 + 48 * y), "chrome"); // Draw dock - rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, paletteCollection, "dock-top"), new float2(Game.viewport.Width - 14, origin.Y - 23), PaletteType.Chrome); + rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, paletteCollection, "dock-top"), new float2(Game.viewport.Width - 14, origin.Y - 23), "chrome"); for (int i = 0; i < y; i++) { - rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, paletteCollection, "dock-" + (y % 4).ToString()), new float2(Game.viewport.Width - 14, origin.Y + 48 * i), PaletteType.Chrome); + rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, paletteCollection, "dock-" + (y % 4).ToString()), new float2(Game.viewport.Width - 14, origin.Y + 48 * i), "chrome"); } - rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, paletteCollection, "dock-bottom"), new float2(Game.viewport.Width - 14, origin.Y - 1 + 48 * y), PaletteType.Chrome); + rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, paletteCollection, "dock-bottom"), new float2(Game.viewport.Width - 14, origin.Y - 1 + 48 * y), "chrome"); rgbaRenderer.Flush(); if (tooltipItem != null) @@ -1054,7 +1055,7 @@ namespace OpenRa { var tooltipSprite = ChromeProvider.GetImage(renderer, chromeCollection, "tooltip-bg"); var p = pos.ToFloat2() - new float2(tooltipSprite.size.X, 0); - rgbaRenderer.DrawSprite(tooltipSprite, p, PaletteType.Chrome); + rgbaRenderer.DrawSprite(tooltipSprite, p, "chrome"); rgbaRenderer.Flush(); var info = Rules.Info[unit]; @@ -1104,10 +1105,10 @@ namespace OpenRa if (numPowers == 0) return; - rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, chromeCollection, "specialbin-top"), new float2(0, 14), PaletteType.Chrome); + rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, chromeCollection, "specialbin-top"), new float2(0, 14), "chrome"); for (var i = 1; i < numPowers; i++) - rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, chromeCollection, "specialbin-middle"), new float2(0, 14 + i * 51), PaletteType.Chrome); - rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, chromeCollection, "specialbin-bottom"), new float2(0, 14 + numPowers * 51), PaletteType.Chrome); + rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, chromeCollection, "specialbin-middle"), new float2(0, 14 + i * 51), "chrome"); + rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, chromeCollection, "specialbin-bottom"), new float2(0, 14 + numPowers * 51), "chrome"); rgbaRenderer.Flush(); @@ -1122,14 +1123,14 @@ namespace OpenRa if (sp.IsAvailable) { var drawPos = new float2(5, y); - shpRenderer.DrawSprite(image, drawPos, PaletteType.Chrome); + shpRenderer.DrawSprite(image, drawPos, "chrome"); clock.PlayFetchIndex("idle", () => (sp.TotalTime - sp.RemainingTime) * NumClockFrames / sp.TotalTime); clock.Tick(); - shpRenderer.DrawSprite(clock.Image, drawPos, PaletteType.Chrome); + shpRenderer.DrawSprite(clock.Image, drawPos, "chrome"); var rect = new Rectangle(5, y, 64, 48); if (sp.IsReady) @@ -1137,7 +1138,7 @@ namespace OpenRa ready.Play("ready"); shpRenderer.DrawSprite(ready.Image, drawPos + new float2((64 - ready.Image.size.X) / 2, 2), - PaletteType.Chrome); + "chrome"); } AddButton(rect, HandleSupportPower(sp)); @@ -1174,7 +1175,7 @@ namespace OpenRa void DrawSupportPowerTooltip(World world, SupportPower sp, int2 pos) { var tooltipSprite = ChromeProvider.GetImage(renderer, chromeCollection, "tooltip-bg"); - rgbaRenderer.DrawSprite(tooltipSprite, pos, PaletteType.Chrome); + rgbaRenderer.DrawSprite(tooltipSprite, pos, "chrome"); rgbaRenderer.Flush(); pos += new int2(5, 5); diff --git a/OpenRa.Game/Effects/Bullet.cs b/OpenRa.Game/Effects/Bullet.cs index 1de4ed8bd1..2857c00515 100755 --- a/OpenRa.Game/Effects/Bullet.cs +++ b/OpenRa.Game/Effects/Bullet.cs @@ -98,14 +98,14 @@ namespace OpenRa.Effects if (Projectile.High || Projectile.Arcing) { if (Projectile.Shadow) - yield return new Renderable(anim.Image, pos - .5f * anim.Image.size, PaletteType.Shadow); + yield return new Renderable(anim.Image, pos - .5f * anim.Image.size, "shadow"); var highPos = pos - new float2(0, (VisualDest - Src).Length * height * 4 * at * (1 - at)); yield return new Renderable(anim.Image, highPos - .5f * anim.Image.size, Owner.Palette); } else - yield return new Renderable(anim.Image, pos - .5f * anim.Image.size, Projectile.UnderWater ? PaletteType.Shadow : Owner.Palette); + yield return new Renderable(anim.Image, pos - .5f * anim.Image.size, Projectile.UnderWater ? "shadow" : Owner.Palette); } } } diff --git a/OpenRa.Game/Effects/Explosion.cs b/OpenRa.Game/Effects/Explosion.cs index 19215cb6fb..d0b8d17353 100755 --- a/OpenRa.Game/Effects/Explosion.cs +++ b/OpenRa.Game/Effects/Explosion.cs @@ -22,7 +22,7 @@ namespace OpenRa.Effects public IEnumerable Render() { - yield return new Renderable(anim.Image, pos - .5f * anim.Image.size, 0); + yield return new Renderable(anim.Image, pos - .5f * anim.Image.size, "effect"); } public Player Owner { get { return null; } } diff --git a/OpenRa.Game/Effects/FlashTarget.cs b/OpenRa.Game/Effects/FlashTarget.cs index 8d9fdf2412..8851b261d3 100755 --- a/OpenRa.Game/Effects/FlashTarget.cs +++ b/OpenRa.Game/Effects/FlashTarget.cs @@ -29,7 +29,7 @@ namespace OpenRa.Effects { if (remainingTicks % 2 == 0) foreach (var r in target.Render()) - yield return r.WithPalette(PaletteType.Highlight); + yield return r.WithPalette("highlight"); } } } diff --git a/OpenRa.Game/Effects/Missile.cs b/OpenRa.Game/Effects/Missile.cs index a22cb6d7b7..b03eb15713 100755 --- a/OpenRa.Game/Effects/Missile.cs +++ b/OpenRa.Game/Effects/Missile.cs @@ -86,7 +86,7 @@ namespace OpenRa.Effects public IEnumerable Render() { - yield return new Renderable(anim.Image, Pos - 0.5f * anim.Image.size - new float2(0, Altitude), 0); + yield return new Renderable(anim.Image, Pos - 0.5f * anim.Image.size - new float2(0, Altitude), "effect"); } } } diff --git a/OpenRa.Game/Effects/MoveFlash.cs b/OpenRa.Game/Effects/MoveFlash.cs index 7aa214f0a5..737e80bba5 100755 --- a/OpenRa.Game/Effects/MoveFlash.cs +++ b/OpenRa.Game/Effects/MoveFlash.cs @@ -24,7 +24,7 @@ namespace OpenRa.Effects public IEnumerable Render() { - yield return new Renderable(anim.Image, pos - .5f * anim.Image.size, PaletteType.Shadow); + yield return new Renderable(anim.Image, pos - .5f * anim.Image.size, "shadow"); } } } diff --git a/OpenRa.Game/Effects/RepairIndicator.cs b/OpenRa.Game/Effects/RepairIndicator.cs index 988c21bf3b..4314908e39 100755 --- a/OpenRa.Game/Effects/RepairIndicator.cs +++ b/OpenRa.Game/Effects/RepairIndicator.cs @@ -21,7 +21,7 @@ namespace OpenRa.Effects public IEnumerable Render() { yield return new Renderable(anim.Image, - a.CenterLocation - .5f * anim.Image.size, PaletteType.Chrome); + a.CenterLocation - .5f * anim.Image.size, "chrome"); } } } diff --git a/OpenRa.Game/Effects/Smoke.cs b/OpenRa.Game/Effects/Smoke.cs index b3b3dfd97d..d27237db27 100755 --- a/OpenRa.Game/Effects/Smoke.cs +++ b/OpenRa.Game/Effects/Smoke.cs @@ -24,7 +24,7 @@ namespace OpenRa.Effects public IEnumerable Render() { - yield return new Renderable(anim.Image, pos - .5f * anim.Image.size, 0); + yield return new Renderable(anim.Image, pos - .5f * anim.Image.size, "effect"); } } } diff --git a/OpenRa.Game/Effects/TeslaZap.cs b/OpenRa.Game/Effects/TeslaZap.cs index f9baeb8d65..1f64fd124e 100755 --- a/OpenRa.Game/Effects/TeslaZap.cs +++ b/OpenRa.Game/Effects/TeslaZap.cs @@ -46,7 +46,7 @@ namespace OpenRa.Effects var y = d.Y; while( y >= prev.Y + 8 ) { - yield return new Renderable( tesla.GetSprite( 2 ), (float2)( from + prev - new int2( 0, 8 ) ), 0 ); + yield return new Renderable( tesla.GetSprite( 2 ), (float2)( from + prev - new int2( 0, 8 ) ), "effect"); prev.Y += 8; } } @@ -58,26 +58,26 @@ namespace OpenRa.Effects var y = i * d.Y / d.X; if( y <= prev.Y - 8 ) { - yield return new Renderable(tesla.GetSprite(3), (float2)(from + prev - new int2(8, 16)), 0); + yield return new Renderable(tesla.GetSprite(3), (float2)(from + prev - new int2(8, 16)), "effect"); prev.Y -= 8; while( y <= prev.Y - 8 ) { - yield return new Renderable(tesla.GetSprite(2), (float2)(from + prev - new int2(0, 16)), 0); + yield return new Renderable(tesla.GetSprite(2), (float2)(from + prev - new int2(0, 16)), "effect"); prev.Y -= 8; } } else if( y >= prev.Y + 8 ) { - yield return new Renderable(tesla.GetSprite(0), (float2)(from + prev - new int2(8, 8)), 0); + yield return new Renderable(tesla.GetSprite(0), (float2)(from + prev - new int2(8, 8)), "effect"); prev.Y += 8; while( y >= prev.Y + 8 ) { - yield return new Renderable(tesla.GetSprite(2), (float2)(from + prev - new int2(0, 8)), 0); + yield return new Renderable(tesla.GetSprite(2), (float2)(from + prev - new int2(0, 8)), "effect"); prev.Y += 8; } } else - yield return new Renderable(tesla.GetSprite(1), (float2)(from + prev - new int2(8, 8)), 0); + yield return new Renderable(tesla.GetSprite(1), (float2)(from + prev - new int2(8, 8)), "effect"); prev.X += 8; } diff --git a/OpenRa.Game/Graphics/HardwarePalette.cs b/OpenRa.Game/Graphics/HardwarePalette.cs index eb0ae9801e..eca43c4584 100644 --- a/OpenRa.Game/Graphics/HardwarePalette.cs +++ b/OpenRa.Game/Graphics/HardwarePalette.cs @@ -2,45 +2,42 @@ using System.Collections.Generic; using System.Drawing; using OpenRa.FileFormats; using OpenRa.Traits; +using System; namespace OpenRa.Graphics { - public enum PaletteType - { - Gold, Blue, Red, Orange, Teal, Salmon, Green, Gray, - Shadow, Invuln, Disabled, Highlight, Shroud, Chrome, - Terrain - }; - class HardwarePalette : Sheet { - const int maxEntries = 16; + const int maxEntries = 32; int allocated = 0; + // We need to store the Palettes themselves for the remap palettes to work + // We should probably try to fix this somehow + static Dictionary palettes; + public HardwarePalette(Renderer renderer, Map map) : base(renderer,new Size(256, maxEntries)) { - - Palette pal = new Palette(FileSystem.Open(map.Theater + ".pal")); - AddPalette(pal); // Gold - - foreach (string remap in new string[] { "blue", "red", "orange", "teal", "salmon", "green", "gray" }) - AddPalette(new Palette(pal, new PlayerColorRemap(FileSystem.Open(remap + ".rem")))); - - AddPalette(new Palette(pal, new SingleColorRemap(Color.FromArgb(140, 0, 0, 0)))); // Shadow - AddPalette(new Palette(pal, new SingleColorRemap(Color.FromArgb(128, 128, 0, 0)))); // Invulnerable (Iron Curtain) - AddPalette(new Palette(pal, new SingleColorRemap(Color.FromArgb(180, 0, 0, 0)))); // Disabled / Low power - AddPalette(new Palette(pal, new SingleColorRemap(Color.FromArgb(128, 255, 255, 255)))); // Highlight - AddPalette(new Palette(pal, new ShroudPaletteRemap())); // Shroud - AddPalette(pal); // Chrome (it's like gold, but we're not going to hax it in palettemods) + palettes = new Dictionary(); } - - public int AddPalette(Palette p) + public Palette GetPalette(string name) { - for (int i = 0; i < 256; i++) - this[new Point(i, allocated)] = p.GetColor(i); + try { return palettes[name]; } + catch (KeyNotFoundException) + { + throw new InvalidOperationException( + "Palette `{0}` does not exist".F(name)); + } + } + public int AddPalette(string name, Palette p) + { + palettes.Add(name, p); + for (int i = 0; i < 256; i++) + { + this[new Point(i, allocated)] = p.GetColor(i); + } return allocated++; } diff --git a/OpenRa.Game/Graphics/Minimap.cs b/OpenRa.Game/Graphics/Minimap.cs index 540e2b519b..20219d4956 100644 --- a/OpenRa.Game/Graphics/Minimap.cs +++ b/OpenRa.Game/Graphics/Minimap.cs @@ -35,7 +35,6 @@ namespace OpenRa.Graphics sprite = new Sprite(sheet, rect, TextureChannel.Alpha); mapOnlySprite = new Sprite(mapOnlySheet, rect, TextureChannel.Alpha); - playerColors = Util.MakeArray(8, b => Color.FromArgb(alpha, Chat.paletteColors[b])); shroudColor = Color.FromArgb(alpha, Color.Black); } @@ -58,7 +57,6 @@ namespace OpenRa.Graphics .Select(a => Color.FromArgb(alpha, pal.GetColor(a))).ToArray(); }); - Color[] playerColors; static Color shroudColor; public void InvalidateOre() { oreLayer = null; } @@ -107,7 +105,7 @@ namespace OpenRa.Graphics foreach (var a in world.Queries.WithTrait()) *(c + (a.Actor.Location.Y * bitmapData.Stride >> 2) + a.Actor.Location.X) = - playerColors[(int)a.Actor.Owner.Palette].ToArgb(); + Color.FromArgb(alpha, a.Actor.Owner.Color).ToArgb(); for (var y = world.Map.YOffset; y < world.Map.YOffset + world.Map.Height; y++) for (var x = world.Map.XOffset; x < world.Map.XOffset + world.Map.Width; x++) @@ -120,7 +118,7 @@ namespace OpenRa.Graphics var b = world.WorldActor.traits.Get().GetBuildingAt(new int2(x, y)); if (b != null) *(c + (y * bitmapData.Stride >> 2) + x) = - (b.Owner != null ? playerColors[(int)b.Owner.Palette] : colors[4]).ToArgb(); + (b.Owner != null ? Color.FromArgb(alpha, b.Owner.Color) : colors[4]).ToArgb(); } } @@ -131,7 +129,7 @@ namespace OpenRa.Graphics public void Draw(RectangleF rect, bool mapOnly) { rgbaRenderer.DrawSprite(mapOnly ? mapOnlySprite : sprite, - new float2(rect.X, rect.Y), PaletteType.Chrome, new float2(rect.Width, rect.Height)); + new float2(rect.X, rect.Y), "chrome", new float2(rect.Width, rect.Height)); rgbaRenderer.Flush(); } } diff --git a/OpenRa.Game/Graphics/OverlayRenderer.cs b/OpenRa.Game/Graphics/OverlayRenderer.cs index cc9fdd0fc0..7968841efb 100755 --- a/OpenRa.Game/Graphics/OverlayRenderer.cs +++ b/OpenRa.Game/Graphics/OverlayRenderer.cs @@ -49,7 +49,7 @@ namespace OpenRa.Graphics { var location = new int2(x, y); spriteRenderer.DrawSprite(smudgeSprites[tr.smudge - 1], - Game.CellSize * (float2)location, 0); + Game.CellSize * (float2)location, "terrain"); } var o = tr.overlay; @@ -62,7 +62,7 @@ namespace OpenRa.Graphics else if (Ore.overlayIsOre[o]) spriteIndex = map.MapTiles[x,y].density - 1; else if (Ore.overlayIsGems[o]) spriteIndex = map.MapTiles[x,y].density - 1; spriteRenderer.DrawSprite(sprites[spriteIndex], - Game.CellSize * (float2)location, PaletteType.Terrain); + Game.CellSize * (float2)location, "terrain"); } } diff --git a/OpenRa.Game/Graphics/SpriteRenderer.cs b/OpenRa.Game/Graphics/SpriteRenderer.cs index 109e8a3695..ec523ce86a 100644 --- a/OpenRa.Game/Graphics/SpriteRenderer.cs +++ b/OpenRa.Game/Graphics/SpriteRenderer.cs @@ -54,18 +54,18 @@ namespace OpenRa.Graphics } } - public void DrawSprite(Sprite s, float2 location, PaletteType palette) + public void DrawSprite(Sprite s, float2 location, string palette) { DrawSprite(s, location, palette, s.size); } - public void DrawSprite(Sprite s, float2 location, PaletteType palette, float2 size) + public void DrawSprite(Sprite s, float2 location, string palette, float2 size) { if (s.sheet != currentSheet) Flush(); currentSheet = s.sheet; - Util.FastCreateQuad(vertices, indices, location.ToInt2(), s, (int)palette, nv, ni, size); + Util.FastCreateQuad(vertices, indices, location.ToInt2(), s, Game.world.WorldRenderer.GetPaletteIndex(palette), nv, ni, size); nv += 4; ni += 6; if (++sprites >= spritesPerBatch) Flush(); diff --git a/OpenRa.Game/Graphics/TerrainRenderer.cs b/OpenRa.Game/Graphics/TerrainRenderer.cs index 1a558ddb82..cc3516f412 100644 --- a/OpenRa.Game/Graphics/TerrainRenderer.cs +++ b/OpenRa.Game/Graphics/TerrainRenderer.cs @@ -15,7 +15,7 @@ namespace OpenRa.Graphics Map map; OverlayRenderer overlayRenderer; - public TerrainRenderer(World world, Renderer renderer) + public TerrainRenderer(World world, Renderer renderer, WorldRenderer wr) { this.renderer = renderer; this.map = world.Map; @@ -34,7 +34,9 @@ namespace OpenRa.Graphics for( int i = map.XOffset ; i < map.XOffset + map.Width; i++ ) { Sprite tile = tileMapping[map.MapTiles[i, j]]; - Util.FastCreateQuad(vertices, indices, Game.CellSize * new float2(i, j), tile, (int)PaletteType.Terrain, nv, ni, tile.size); + //var bar = Game.world.WorldRenderer; + var foo = wr.GetPaletteIndex("terrain"); + Util.FastCreateQuad(vertices, indices, Game.CellSize * new float2(i, j), tile, foo, nv, ni, tile.size); nv += 4; ni += 6; } diff --git a/OpenRa.Game/Graphics/Viewport.cs b/OpenRa.Game/Graphics/Viewport.cs index 291fed28d0..48a5343e69 100644 --- a/OpenRa.Game/Graphics/Viewport.cs +++ b/OpenRa.Game/Graphics/Viewport.cs @@ -80,7 +80,7 @@ namespace OpenRa.Graphics } var c = Game.chrome.HitTest(mousePos) ? Cursor.Default : Game.controller.ChooseCursor( world ); - cursorRenderer.DrawSprite(c.GetSprite((int)cursorFrame), mousePos + Location - c.GetHotspot(), 0); + cursorRenderer.DrawSprite(c.GetSprite((int)cursorFrame), mousePos + Location - c.GetHotspot(), "cursor"); cursorRenderer.Flush(); renderer.EndFrame(); diff --git a/OpenRa.Game/Graphics/WorldRenderer.cs b/OpenRa.Game/Graphics/WorldRenderer.cs index 246b9ee729..ceb2abcb86 100644 --- a/OpenRa.Game/Graphics/WorldRenderer.cs +++ b/OpenRa.Game/Graphics/WorldRenderer.cs @@ -24,16 +24,29 @@ namespace OpenRa.Graphics this.world = world; this.renderer = renderer; - terrainRenderer = new TerrainRenderer(world, renderer); + terrainRenderer = new TerrainRenderer(world, renderer, this); spriteRenderer = new SpriteRenderer(renderer, true); lineRenderer = new LineRenderer(renderer); uiOverlay = new UiOverlay(spriteRenderer); palette = new HardwarePalette(renderer, world.Map); Log.Write("Created worldrenderer"); } + + // TODO: Implement + public int GetPaletteIndex(string name) + { + return 0; + } + + public Palette GetPalette(string name) + { + return palette.GetPalette(name); + } + + public void AddPalette(string name, Palette pal) { - palette.AddPalette(pal); + palette.AddPalette(name, pal); } void DrawSpriteList(RectangleF rect, @@ -229,7 +242,7 @@ namespace OpenRa.Graphics var pipImages = new Animation("pips"); pipImages.PlayFetchIndex("groups", () => (int)group); pipImages.Tick(); - spriteRenderer.DrawSprite(pipImages.Image, basePosition + new float2(-8, 1), PaletteType.Chrome); + spriteRenderer.DrawSprite(pipImages.Image, basePosition + new float2(-8, 1), "chrome"); } void DrawPips(Actor selectedUnit, float2 basePosition) @@ -244,7 +257,7 @@ namespace OpenRa.Graphics { var pipImages = new Animation("pips"); pipImages.PlayRepeating(pipStrings[(int)pip]); - spriteRenderer.DrawSprite(pipImages.Image, pipxyBase + pipxyOffset, PaletteType.Chrome); + spriteRenderer.DrawSprite(pipImages.Image, pipxyBase + pipxyOffset, "chrome"); pipxyOffset += new float2(4, 0); if (pipxyOffset.X+5 > selectedUnit.GetBounds(false).Width) @@ -274,7 +287,7 @@ namespace OpenRa.Graphics var tagImages = new Animation("pips"); tagImages.PlayRepeating(tagStrings[(int)tag]); - spriteRenderer.DrawSprite(tagImages.Image, tagxyBase + tagxyOffset, PaletteType.Chrome); + spriteRenderer.DrawSprite(tagImages.Image, tagxyBase + tagxyOffset, "chrome"); // Increment row tagxyOffset.Y += 8; diff --git a/OpenRa.Game/OpenRa.Game.csproj b/OpenRa.Game/OpenRa.Game.csproj index 9491c31d90..75ef178d7d 100644 --- a/OpenRa.Game/OpenRa.Game.csproj +++ b/OpenRa.Game/OpenRa.Game.csproj @@ -218,8 +218,11 @@ + + + diff --git a/OpenRa.Game/Player.cs b/OpenRa.Game/Player.cs index 33fc57eb44..a77606da42 100644 --- a/OpenRa.Game/Player.cs +++ b/OpenRa.Game/Player.cs @@ -5,6 +5,7 @@ using OpenRa.GameRules; using OpenRa.Graphics; using OpenRa.Traits; using OpenRa.FileFormats; +using System.Drawing; namespace OpenRa { @@ -13,7 +14,7 @@ namespace OpenRa public class Player { public Actor PlayerActor; - public PaletteType Palette; + public string Palette; public int Kills; public string PlayerName; public string InternalName; @@ -27,7 +28,18 @@ namespace OpenRa public int PowerDrained = 0; public World World { get { return PlayerActor.World; } } - + + public Color Color; + /* + Color.FromArgb(228, 200, 112), + Color.FromArgb(56, 72, 125), + Color.FromArgb(238, 0, 0), + Color.FromArgb(198,97,0), + Color.FromArgb(28,109,97), + Color.FromArgb(153,76,53), + Color.FromArgb(76,101,60), + Color.FromArgb(133,113,101), + */ public Shroud Shroud; public Player( World world, int index, Session.Client client ) @@ -37,7 +49,7 @@ namespace OpenRa this.Index = index; this.InternalName = "Multi{0}".F(index); - this.Palette = client != null ? (PaletteType)client.Palette : (PaletteType)index; + this.Palette = client != null ? "player"+client.Palette : "player"+index; this.PlayerName = client != null ? client.Name : "Player {0}".F(index+1); this.Race = client != null ? (Race)client.Race : Race.Allies; } @@ -160,10 +172,10 @@ namespace OpenRa Race = (Race)client.Race; } - if (Palette != (PaletteType)client.Palette) + if (Palette != client.Palette) { - Game.chat.AddLine(this, "has changed color to {0}".F((PaletteType)client.Palette)); - Palette = (PaletteType)client.Palette; + Game.chat.AddLine(this, "has changed color to {0}".F(client.Palette)); + Palette = client.Palette; } } } diff --git a/OpenRa.Game/Shroud.cs b/OpenRa.Game/Shroud.cs index a70a239463..59639c5293 100644 --- a/OpenRa.Game/Shroud.cs +++ b/OpenRa.Game/Shroud.cs @@ -173,21 +173,21 @@ namespace OpenRa { r.DrawSprite(sprites[starti,j], Game.CellSize * new float2(starti, j), - PaletteType.Shroud, + "shroud", new float2(Game.CellSize * (i - starti), Game.CellSize)); starti = i+1; } r.DrawSprite(sprites[i, j], Game.CellSize * new float2(i, j), - PaletteType.Shroud); + "shroud"); starti = i+1; } if (starti < maxx) r.DrawSprite(sprites[starti, j], Game.CellSize * new float2(starti, j), - PaletteType.Shroud, + "shroud", new float2(Game.CellSize * (maxx - starti), Game.CellSize)); } } diff --git a/OpenRa.Game/Traits/Bridge.cs b/OpenRa.Game/Traits/Bridge.cs index cbbb238513..77a7276877 100644 --- a/OpenRa.Game/Traits/Bridge.cs +++ b/OpenRa.Game/Traits/Bridge.cs @@ -36,7 +36,7 @@ namespace OpenRa.Traits public IEnumerable Render(Actor self) { foreach (var t in TileSprites[state]) - yield return new Renderable(t.Value, Game.CellSize * t.Key, PaletteType.Gold); + yield return new Renderable(t.Value, Game.CellSize * t.Key, "terrain"); } public int StateFromTemplate(TileTemplate t) diff --git a/OpenRa.Game/Traits/Building.cs b/OpenRa.Game/Traits/Building.cs index fe1821df7b..f11a302276 100644 --- a/OpenRa.Game/Traits/Building.cs +++ b/OpenRa.Game/Traits/Building.cs @@ -125,7 +125,7 @@ namespace OpenRa.Traits { yield return a; if (Disabled) - yield return a.WithPalette(PaletteType.Disabled); + yield return a.WithPalette("disabled"); } } } diff --git a/OpenRa.Game/Traits/ChronoshiftPaletteEffect.cs b/OpenRa.Game/Traits/ChronoshiftPaletteEffect.cs index cb452e958f..02450abd04 100644 --- a/OpenRa.Game/Traits/ChronoshiftPaletteEffect.cs +++ b/OpenRa.Game/Traits/ChronoshiftPaletteEffect.cs @@ -25,7 +25,7 @@ namespace OpenRa.Traits { if (remainingFrames == 0) return; - + /* TODO: FIX ME var frac = (float)remainingFrames / chronoEffectLength; for( var y = 0; y < (int)PaletteType.Chrome; y++ ) for (var x = 0; x < 256; x++) @@ -35,6 +35,7 @@ namespace OpenRa.Traits var desat = Color.FromArgb(orig.A, lum, lum, lum); b.SetPixel(x, y, Graphics.Util.Lerp(frac, orig, desat)); } + */ } } } diff --git a/OpenRa.Game/Traits/Cloak.cs b/OpenRa.Game/Traits/Cloak.cs index 6bd0b9fe1f..a24cf80cc3 100644 --- a/OpenRa.Game/Traits/Cloak.cs +++ b/OpenRa.Game/Traits/Cloak.cs @@ -31,7 +31,7 @@ namespace OpenRa.Traits return rs; if (self.Owner == self.World.LocalPlayer) - return rs.Select(a => a.WithPalette(PaletteType.Shadow)); + return rs.Select(a => a.WithPalette("shadow")); else return new Renderable[] { }; } diff --git a/OpenRa.Game/Traits/PaletteFromFile.cs b/OpenRa.Game/Traits/PaletteFromFile.cs index d48b0b9af8..2f903acb2b 100644 --- a/OpenRa.Game/Traits/PaletteFromFile.cs +++ b/OpenRa.Game/Traits/PaletteFromFile.cs @@ -7,10 +7,9 @@ namespace OpenRa.Traits { class PaletteFromFileInfo : ITraitInfo { - public readonly string Name = "Undefined"; - public readonly string Theatre = "Undefined"; - public readonly string Filename = ""; - public readonly string Remap = ""; + public readonly string Name = null; + public readonly string Theatre = null; + public readonly string Filename = null; public object Create(Actor self) { return new PaletteFromFile(self, this); } } @@ -18,11 +17,11 @@ namespace OpenRa.Traits { public PaletteFromFile(Actor self, PaletteFromFileInfo info) { - Log.Write("Created palette"); - if (info.Theatre == "Undefined" || + if (info.Theatre == null || info.Theatre.ToLowerInvariant() == self.World.Map.Theater.ToLowerInvariant()) { - self.World.WorldRenderer.AddPalette(info.Name, new Palette(FileSystem.Open("temperat_ra.pal"))); + Log.Write("Loading palette {0} from file {1}", info.Name, info.Filename); + self.World.WorldRenderer.AddPalette(info.Name, new Palette(FileSystem.Open(info.Filename))); } } } diff --git a/OpenRa.Game/Traits/PaletteFromRGBA.cs b/OpenRa.Game/Traits/PaletteFromRGBA.cs new file mode 100644 index 0000000000..c6c39134d8 --- /dev/null +++ b/OpenRa.Game/Traits/PaletteFromRGBA.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Drawing; +using OpenRa.FileFormats; + +namespace OpenRa.Traits +{ + class PaletteFromRGBAInfo : ITraitInfo + { + public readonly string Name = null; + public readonly string Theatre = null; + public readonly int R = 0; + public readonly int G = 0; + public readonly int B = 0; + public readonly int A = 255; + public object Create(Actor self) { return new PaletteFromRGBA(self, this); } + } + + class PaletteFromRGBA + { + public PaletteFromRGBA(Actor self, PaletteFromRGBAInfo info) + { + if (info.Theatre == null || + info.Theatre.ToLowerInvariant() == self.World.Map.Theater.ToLowerInvariant()) + { + Log.Write("Loading palette {0} from RGBA {1} {2} {3} {4}",info.Name,info.R,info.G,info.B,info.A); + // TODO: This shouldn't rely on a base palette + var wr = self.World.WorldRenderer; + var pal = wr.GetPalette("player0"); + wr.AddPalette(info.Name, new Palette(pal, new SingleColorRemap(Color.FromArgb(info.A, info.R, info.G, info.B)))); + } + } + } +} diff --git a/OpenRa.Game/Traits/PaletteFromRemap.cs b/OpenRa.Game/Traits/PaletteFromRemap.cs new file mode 100644 index 0000000000..bcbff4091a --- /dev/null +++ b/OpenRa.Game/Traits/PaletteFromRemap.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using OpenRa.FileFormats; + +namespace OpenRa.Traits +{ + class PaletteFromRemapInfo : ITraitInfo + { + public readonly string Name = null; + public readonly string Theatre = null; + public readonly string BasePalette = null; + public readonly string Remap = null; + public object Create(Actor self) { return new PaletteFromRemap(self, this); } + } + + class PaletteFromRemap + { + public PaletteFromRemap(Actor self, PaletteFromRemapInfo info) + { + if (info.Theatre == null || + info.Theatre.ToLowerInvariant() == self.World.Map.Theater.ToLowerInvariant()) + { + Log.Write("Loading palette {0} from theatre {1} with remap {2}", info.Name, info.BasePalette, info.Remap); + var wr = self.World.WorldRenderer; + var pal = wr.GetPalette(info.BasePalette); + var newpal = (info.Remap == null) ? pal : new Palette(pal, new PlayerColorRemap(FileSystem.Open(info.Remap))); + wr.AddPalette(info.Name, newpal); + } + } + } +} diff --git a/OpenRa.Game/Traits/Submarine.cs b/OpenRa.Game/Traits/Submarine.cs index 6a589d472a..1f30b0c465 100644 --- a/OpenRa.Game/Traits/Submarine.cs +++ b/OpenRa.Game/Traits/Submarine.cs @@ -34,7 +34,7 @@ namespace OpenRa.Traits return rs; if (self.Owner == self.World.LocalPlayer) - return rs.Select(a => a.WithPalette(PaletteType.Shadow)); + return rs.Select(a => a.WithPalette("shadow")); else return new Renderable[] { }; } diff --git a/OpenRa.Game/Traits/TraitsInterfaces.cs b/OpenRa.Game/Traits/TraitsInterfaces.cs index 534039cc47..7d08e53276 100644 --- a/OpenRa.Game/Traits/TraitsInterfaces.cs +++ b/OpenRa.Game/Traits/TraitsInterfaces.cs @@ -71,10 +71,10 @@ namespace OpenRa.Traits { public readonly Sprite Sprite; public readonly float2 Pos; - public readonly PaletteType Palette; + public readonly string Palette; public readonly int ZOffset; - public Renderable(Sprite sprite, float2 pos, PaletteType palette, int zOffset) + public Renderable(Sprite sprite, float2 pos, string palette, int zOffset) { Sprite = sprite; Pos = pos; @@ -82,10 +82,10 @@ namespace OpenRa.Traits ZOffset = zOffset; } - public Renderable(Sprite sprite, float2 pos, PaletteType palette) + public Renderable(Sprite sprite, float2 pos, string palette) : this(sprite, pos, palette, 0) { } - public Renderable WithPalette(PaletteType newPalette) { return new Renderable(Sprite, Pos, newPalette, ZOffset); } + public Renderable WithPalette(string newPalette) { return new Renderable(Sprite, Pos, newPalette, ZOffset); } public Renderable WithZOffset(int newOffset) { return new Renderable(Sprite, Pos, Palette, newOffset); } public Renderable WithPos(float2 newPos) { return new Renderable(Sprite, newPos, Palette, ZOffset); } } diff --git a/OpenRa.Game/Traits/Util.cs b/OpenRa.Game/Traits/Util.cs index bbc01df953..2313e3f9e5 100755 --- a/OpenRa.Game/Traits/Util.cs +++ b/OpenRa.Game/Traits/Util.cs @@ -120,7 +120,7 @@ namespace OpenRa.Traits public static Renderable Centered(Actor self, Sprite s, float2 location) { - var pal = self.Owner == null ? 0 : self.Owner.Palette; + var pal = self.Owner == null ? "player0" : self.Owner.Palette; var loc = location - 0.5f * s.size; return new Renderable(s, loc.Round(), pal); } diff --git a/OpenRa.Game/Traits/WithShadow.cs b/OpenRa.Game/Traits/WithShadow.cs index b7013d43b8..1ccc50203e 100644 --- a/OpenRa.Game/Traits/WithShadow.cs +++ b/OpenRa.Game/Traits/WithShadow.cs @@ -14,7 +14,7 @@ namespace OpenRa.Traits { var unit = self.traits.Get(); - var shadowSprites = r.Select(a => a.WithPalette(PaletteType.Shadow)); + var shadowSprites = r.Select(a => a.WithPalette("shadow")); var flyingSprites = (unit.Altitude <= 0) ? r : r.Select(a => a.WithPos(a.Pos - new float2(0, unit.Altitude)).WithZOffset(3)); diff --git a/OpenRa.Game/UiOverlay.cs b/OpenRa.Game/UiOverlay.cs index 5d3c10ab14..c481f3b73e 100644 --- a/OpenRa.Game/UiOverlay.cs +++ b/OpenRa.Game/UiOverlay.cs @@ -39,7 +39,7 @@ namespace OpenRa for (var j = 0; j < 128; j++) for (var i = 0; i < 128; i++) if (world.WorldActor.traits.Get().GetUnitsAt(new int2(i, j)).Any()) - spriteRenderer.DrawSprite(unitDebug, Game.CellSize * new float2(i, j), 0); + spriteRenderer.DrawSprite(unitDebug, Game.CellSize * new float2(i, j), "terrain"); } public void DrawBuildingGrid( World world, string name, BuildingInfo bi ) @@ -51,7 +51,7 @@ namespace OpenRa foreach( var t in Footprint.Tiles( name, bi, topLeft ) ) spriteRenderer.DrawSprite( ( isCloseEnough && world.IsCellBuildable( t, bi.WaterBound ? UnitMovementType.Float : UnitMovementType.Wheel ) && !world.Map.ContainsResource( t ) ) - ? buildOk : buildBlocked, Game.CellSize * t, 0 ); + ? buildOk : buildBlocked, Game.CellSize * t, "terrain" ); spriteRenderer.Flush(); } diff --git a/OpenRa.Mods.RA/Effects/CrateEffect.cs b/OpenRa.Mods.RA/Effects/CrateEffect.cs index 152e396786..d4b70afca2 100644 --- a/OpenRa.Mods.RA/Effects/CrateEffect.cs +++ b/OpenRa.Mods.RA/Effects/CrateEffect.cs @@ -26,7 +26,7 @@ namespace OpenRa.Mods.RA.Effects public IEnumerable Render() { yield return new Renderable(anim.Image, - a.CenterLocation - .5f * anim.Image.size + doorOffset, PaletteType.Gold); + a.CenterLocation - .5f * anim.Image.size + doorOffset, "effect"); } } } diff --git a/OpenRa.Mods.RA/Effects/GpsSatellite.cs b/OpenRa.Mods.RA/Effects/GpsSatellite.cs index c2de1cec29..af8e7d3f37 100644 --- a/OpenRa.Mods.RA/Effects/GpsSatellite.cs +++ b/OpenRa.Mods.RA/Effects/GpsSatellite.cs @@ -28,7 +28,7 @@ namespace OpenRa.Mods.RA.Effects public IEnumerable Render() { - yield return new Renderable(anim.Image,offset, PaletteType.Gold); + yield return new Renderable(anim.Image,offset, "effect"); } } } diff --git a/OpenRa.Mods.RA/Effects/InvulnEffect.cs b/OpenRa.Mods.RA/Effects/InvulnEffect.cs index b6a546adc3..2066b97a3b 100644 --- a/OpenRa.Mods.RA/Effects/InvulnEffect.cs +++ b/OpenRa.Mods.RA/Effects/InvulnEffect.cs @@ -25,7 +25,7 @@ namespace OpenRa.Mods.RA.Effects public IEnumerable Render() { foreach (var r in a.Render()) - yield return r.WithPalette(PaletteType.Invuln); + yield return r.WithPalette("invuln"); } } } diff --git a/OpenRa.Mods.RA/Effects/Parachute.cs b/OpenRa.Mods.RA/Effects/Parachute.cs index b263d0bb97..5edd9de691 100644 --- a/OpenRa.Mods.RA/Effects/Parachute.cs +++ b/OpenRa.Mods.RA/Effects/Parachute.cs @@ -54,7 +54,7 @@ namespace OpenRa.Mods.RA.Effects public IEnumerable Render() { var pos = location - new float2(0, altitude); - yield return new Renderable(anim.Image, location - .5f * anim.Image.size, PaletteType.Shadow, 0); + yield return new Renderable(anim.Image, location - .5f * anim.Image.size, "shadow", 0); yield return new Renderable(anim.Image, pos - .5f * anim.Image.size, owner.Palette, 2); yield return new Renderable(paraAnim.Image, pos - .5f * paraAnim.Image.size, owner.Palette, 3); } diff --git a/OpenRa.Mods.RA/Effects/SatelliteLaunch.cs b/OpenRa.Mods.RA/Effects/SatelliteLaunch.cs index 1a40c7ff1e..6d385498d7 100644 --- a/OpenRa.Mods.RA/Effects/SatelliteLaunch.cs +++ b/OpenRa.Mods.RA/Effects/SatelliteLaunch.cs @@ -32,7 +32,7 @@ namespace OpenRa.Mods.RA.Effects public IEnumerable Render() { yield return new Renderable(doors.Image, - a.CenterLocation - .5f * doors.Image.size + doorOffset, PaletteType.Gold); + a.CenterLocation - .5f * doors.Image.size + doorOffset, "effect"); } } } diff --git a/mods/cnc/system.yaml b/mods/cnc/system.yaml index 87338c98c3..612f3509f4 100644 --- a/mods/cnc/system.yaml +++ b/mods/cnc/system.yaml @@ -14,7 +14,75 @@ World: WaterPaletteRotation: BuildingInfluence: UnitInfluence: - PaletteFromFile@1: + PaletteFromFile@terrain_temperat: Name: terrain + Filename: temperat_ra.pal + PaletteFromFile@player_temperat: + Name: player Theatre: temperat - Filename: temperat_ra.pal \ No newline at end of file + Filename: temperat.pal + PaletteFromRemap@player0: + Name: player0 + BasePalette: player + PaletteFromRemap@player1: + Name: player1 + BasePalette: player + Remap: blue.rem + PaletteFromRemap@player2: + Name: player2 + BasePalette: player + Remap: red.rem + PaletteFromRemap@player3: + Name: player3 + BasePalette: player + Remap: orange.rem + PaletteFromRemap@player4: + Name: player4 + BasePalette: player + Remap: teal.rem + PaletteFromRemap@player5: + Name: player5 + BasePalette: player + Remap: salmon.rem + PaletteFromRemap@player6: + Name: player6 + BasePalette: player + Remap: green.rem + PaletteFromRemap@player7: + Name: player7 + BasePalette: player + Remap: gray.rem + PaletteFromFile@chrome: + Name: chrome + Filename: temperat.pal + PaletteFromFile@effect: + Name: effect + Filename: temperat.pal + PaletteFromFile@cursor: + Name: cursor + Filename: temperat.pal + PaletteFromRGBA@shadow: + Name: shadow + R: 0 + G: 0 + B: 0 + A: 140 + PaletteFromRGBA@highlight: + Name: highlight + R: 255 + G: 255 + B: 255 + A: 128 + PaletteFromRGBA@invuln: + Name: invuln + R: 128 + G: 0 + B: 0 + A: 128 + PaletteFromRGBA@disabled: + Name: disabled + R: 0 + G: 0 + B: 0 + A: 180 + ShroudPalette: \ No newline at end of file