undo problematic caching

This commit is contained in:
Chris Forbes
2010-03-18 13:33:43 +13:00
parent 8a05af72b3
commit 07b0c77db4
4 changed files with 18 additions and 21 deletions

View File

@@ -102,7 +102,6 @@ namespace OpenRA
world = null; // trying to access the old world will NRE, rather than silently doing it wrong. world = null; // trying to access the old world will NRE, rather than silently doing it wrong.
Player.ResetPlayerColorList();
ChromeProvider.Initialize(manifest.Chrome); ChromeProvider.Initialize(manifest.Chrome);
world = new World(); world = new World();

View File

@@ -49,22 +49,20 @@ namespace OpenRA
public int PowerProvided = 0; public int PowerProvided = 0;
public int PowerDrained = 0; public int PowerDrained = 0;
public Shroud Shroud;
public World World { get { return PlayerActor.World; } } public World World { get { return PlayerActor.World; } }
public static List<Tuple<string, string, Color>> PlayerColors = new List<Tuple<string, string, Color>>(); public static List<Tuple<string, string, Color>> PlayerColors
public static void ResetPlayerColorList()
{ {
// This is unsafe if the mapchange introduces/removes mods that defines new colors get
// TODO: ensure that each player's palette index is reassigned appropriately
PlayerColors = new List<Tuple<string, string, Color>>();
}
public static void RegisterPlayerColor(string palette, string name, Color c)
{ {
PlayerColors.Add(new Tuple<string, string, Color>(palette, name, c)); return Game.world.WorldActor.Info.Traits.WithInterface<PlayerColorPaletteInfo>()
.Where(p => p.Playable)
.Select(p => Tuple.New(p.Name, p.DisplayName, p.Color))
.ToList();
}
} }
public Shroud Shroud;
public Player( World world, Session.Client client ) public Player( World world, Session.Client client )
{ {

View File

@@ -19,9 +19,9 @@
#endregion #endregion
using System; using System;
using System.Drawing;
using System.Linq; using System.Linq;
using OpenRA.Graphics; using OpenRA.Graphics;
using OpenRA.Traits.Activities;
namespace OpenRA.Traits namespace OpenRA.Traits
{ {
@@ -161,5 +161,7 @@ namespace OpenRA.Traits
return new[] { self.GetPrimaryWeapon(), self.GetSecondaryWeapon() } return new[] { self.GetPrimaryWeapon(), self.GetSecondaryWeapon() }
.Where(w => w != null).Max(w => w.Range); .Where(w => w != null).Max(w => w.Range);
} }
public static Color ArrayToColor(int[] x) { return Color.FromArgb(x[0], x[1], x[2]); }
} }
} }

View File

@@ -37,6 +37,8 @@ namespace OpenRA.Traits
public readonly bool Playable = true; public readonly bool Playable = true;
public object Create(Actor self) { return new PlayerColorPalette(self, this); } public object Create(Actor self) { return new PlayerColorPalette(self, this); }
public Color Color { get { return Util.ArrayToColor(DisplayColor); } }
} }
class PlayerColorPalette class PlayerColorPalette
@@ -46,17 +48,13 @@ namespace OpenRA.Traits
var wr = self.World.WorldRenderer; var wr = self.World.WorldRenderer;
var pal = wr.GetPalette(info.BasePalette); var pal = wr.GetPalette(info.BasePalette);
var newpal = new Palette(pal, new PlayerColorRemap( var newpal = new Palette(pal, new PlayerColorRemap(
ArrayToColor(info.Color1), Util.ArrayToColor(info.Color1),
ArrayToColor(info.Color2), Util.ArrayToColor(info.Color2),
info.SplitRamp)); info.SplitRamp));
wr.AddPalette(info.Name, newpal); wr.AddPalette(info.Name, newpal);
if (info.Playable)
Player.RegisterPlayerColor(info.Name, info.DisplayName,
ArrayToColor(info.DisplayColor));
} }
static Color ArrayToColor(int[] x) { return Color.FromArgb(x[0], x[1], x[2]); }
} }
} }