messy first pass at fixing map change palette weirdness, etc

This commit is contained in:
Chris Forbes
2009-12-24 08:43:26 +13:00
parent a9010d1947
commit cf0be69f66
5 changed files with 32 additions and 6 deletions

View File

@@ -1,11 +1,13 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq;
namespace OpenRa.FileFormats namespace OpenRa.FileFormats
{ {
public static class FileSystem public static class FileSystem
{ {
static List<IFolder> mountedFolders = new List<IFolder>(); static List<IFolder> mountedFolders = new List<IFolder>();
static List<IFolder> temporaryMounts = new List<IFolder>();
public static void MountDefault( bool useAftermath ) public static void MountDefault( bool useAftermath )
{ {
@@ -33,6 +35,18 @@ namespace OpenRa.FileFormats
mountedFolders.Add(folder); mountedFolders.Add(folder);
} }
public static void MountTemporary(IFolder folder)
{
mountedFolders.Add(folder);
temporaryMounts.Add(folder);
}
public static void UnmountTemporaryPackages()
{
mountedFolders.RemoveAll(f => temporaryMounts.Contains(f));
temporaryMounts.Clear();
}
public static Stream Open(string filename) public static Stream Open(string filename)
{ {
foreach( IFolder folder in mountedFolders ) foreach( IFolder folder in mountedFolders )

View File

@@ -56,7 +56,9 @@ namespace OpenRa.Game
public static void ChangeMap(string mapName) public static void ChangeMap(string mapName)
{ {
SheetBuilder.Initialize(renderer); SheetBuilder.Initialize(renderer);
SpriteSheetBuilder.Initialize();
UnitSheetBuilder.Initialize();
FileSystem.UnmountTemporaryPackages();
Rules.LoadRules(mapName, usingAftermath); Rules.LoadRules(mapName, usingAftermath);
palette = new HardwarePalette(renderer, Rules.Map); palette = new HardwarePalette(renderer, Rules.Map);

View File

@@ -89,7 +89,7 @@ namespace OpenRa.Game
TechTree = new TechTree(); TechTree = new TechTree();
Map = new Map( AllRules ); Map = new Map( AllRules );
FileSystem.Mount( new Package( Rules.Map.Theater + ".mix" ) ); FileSystem.MountTemporary( new Package( Rules.Map.Theater + ".mix" ) );
TileSet = new TileSet( Map.TileSuffix ); TileSet = new TileSet( Map.TileSuffix );
} }

View File

@@ -5,8 +5,12 @@ namespace OpenRa.Game.Graphics
{ {
static class SpriteSheetBuilder static class SpriteSheetBuilder
{ {
static Dictionary<string, Sprite[]> sprites = public static void Initialize()
new Dictionary<string, Sprite[]>(); {
sprites = new Dictionary<string, Sprite[]>();
}
static Dictionary<string, Sprite[]> sprites;
public static Sprite LoadSprite(string filename, params string[] exts ) public static Sprite LoadSprite(string filename, params string[] exts )
{ {

View File

@@ -6,8 +6,14 @@ namespace OpenRa.Game.Graphics
{ {
static class UnitSheetBuilder static class UnitSheetBuilder
{ {
public static readonly List<Sprite> sprites = new List<Sprite>(); public static void Initialize()
static Dictionary<string, Range<int>> sequences = new Dictionary<string, Range<int>>(); {
sprites = new List<Sprite>();
sequences = new Dictionary<string, Range<int>>();
}
public static List<Sprite> sprites;
static Dictionary<string, Range<int>> sequences;
public static Range<int> GetUnit(string name) public static Range<int> GetUnit(string name)
{ {