diff --git a/OpenRa.Game/Graphics/HardwarePalette.cs b/OpenRa.Game/Graphics/HardwarePalette.cs index 841274dcc8..eb0ae9801e 100644 --- a/OpenRa.Game/Graphics/HardwarePalette.cs +++ b/OpenRa.Game/Graphics/HardwarePalette.cs @@ -33,12 +33,10 @@ namespace OpenRa.Graphics 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) - - Palette palTerrain = new Palette(FileSystem.Open("temperat_ra.pal")); - AddPalette(palTerrain); // Terrain } + - int AddPalette(Palette p) + public int AddPalette(Palette p) { for (int i = 0; i < 256; i++) this[new Point(i, allocated)] = p.GetColor(i); diff --git a/OpenRa.Game/Graphics/WorldRenderer.cs b/OpenRa.Game/Graphics/WorldRenderer.cs index 17af8d8bbd..246b9ee729 100644 --- a/OpenRa.Game/Graphics/WorldRenderer.cs +++ b/OpenRa.Game/Graphics/WorldRenderer.cs @@ -3,6 +3,7 @@ using System.Drawing; using System.Linq; using OpenRa.Traits; using System; +using OpenRa.FileFormats; namespace OpenRa.Graphics { @@ -28,8 +29,13 @@ namespace OpenRa.Graphics lineRenderer = new LineRenderer(renderer); uiOverlay = new UiOverlay(spriteRenderer); palette = new HardwarePalette(renderer, world.Map); + Log.Write("Created worldrenderer"); } - + public void AddPalette(string name, Palette pal) + { + palette.AddPalette(pal); + } + void DrawSpriteList(RectangleF rect, IEnumerable images) { diff --git a/OpenRa.Game/OpenRa.Game.csproj b/OpenRa.Game/OpenRa.Game.csproj index aa2d615897..9491c31d90 100644 --- a/OpenRa.Game/OpenRa.Game.csproj +++ b/OpenRa.Game/OpenRa.Game.csproj @@ -217,6 +217,7 @@ + diff --git a/OpenRa.Game/Traits/PaletteFromFile.cs b/OpenRa.Game/Traits/PaletteFromFile.cs new file mode 100644 index 0000000000..d48b0b9af8 --- /dev/null +++ b/OpenRa.Game/Traits/PaletteFromFile.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using OpenRa.FileFormats; + +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 object Create(Actor self) { return new PaletteFromFile(self, this); } + } + + class PaletteFromFile + { + public PaletteFromFile(Actor self, PaletteFromFileInfo info) + { + Log.Write("Created palette"); + if (info.Theatre == "Undefined" || + info.Theatre.ToLowerInvariant() == self.World.Map.Theater.ToLowerInvariant()) + { + self.World.WorldRenderer.AddPalette(info.Name, new Palette(FileSystem.Open("temperat_ra.pal"))); + } + } + } +} diff --git a/OpenRa.Game/World.cs b/OpenRa.Game/World.cs index a846218475..7b1f3730b6 100644 --- a/OpenRa.Game/World.cs +++ b/OpenRa.Game/World.cs @@ -56,13 +56,17 @@ namespace OpenRa public World() { Timer.Time( "----World.ctor" ); - + Map = new Map( Rules.AllRules ); Timer.Time( "new Map: {0}" ); TileSet = new TileSet( Map.TileSuffix ); SpriteSheetBuilder.Initialize( Map ); Timer.Time( "Tileset: {0}" ); + WorldRenderer = new WorldRenderer(this, Game.renderer); + Timer.Time("renderer: {0}"); + + oreFrequency = (int)(Rules.General.GrowthRate * 60 * 25); oreTicks = oreFrequency; Map.InitOreDensity(); @@ -83,9 +87,8 @@ namespace OpenRa PathFinder = new PathFinder(this); Timer.Time( "bridge, pathing: {0}" ); - WorldRenderer = new WorldRenderer(this, Game.renderer); Minimap = new Minimap(this, Game.renderer); - Timer.Time( "renderer, minimap: {0}" ); + Timer.Time( "minimap: {0}" ); Timer.Time( "----end World.ctor" ); } diff --git a/mods/cnc/system.yaml b/mods/cnc/system.yaml index 555e538df8..87338c98c3 100644 --- a/mods/cnc/system.yaml +++ b/mods/cnc/system.yaml @@ -13,4 +13,8 @@ Player: World: WaterPaletteRotation: BuildingInfluence: - UnitInfluence: \ No newline at end of file + UnitInfluence: + PaletteFromFile@1: + Name: terrain + Theatre: temperat + Filename: temperat_ra.pal \ No newline at end of file