public ContentManager( Game game, FileSystem fileSystem, GraphicsDevice graphicsDevice, SageGame sageGame) { using (GameTrace.TraceDurationEvent("ContentManager()")) { _game = game; _fileSystem = fileSystem; GraphicsDevice = graphicsDevice; SageGame = sageGame; Language = LanguageUtility.ReadCurrentLanguage(game.Definition, fileSystem.RootDirectory); IniDataContext = new IniDataContext(); SubsystemLoader = Content.SubsystemLoader.Create(game.Definition, _fileSystem, game, this); switch (sageGame) { // Only load these INI files for a subset of games, because we can't parse them for others yet. case SageGame.CncGenerals: case SageGame.CncGeneralsZeroHour: case SageGame.Bfme: case SageGame.Bfme2: case SageGame.Bfme2Rotwk: SubsystemLoader.Load(Subsystem.Core); // TODO: Defer subsystem loading until necessary SubsystemLoader.Load(Subsystem.Audio); SubsystemLoader.Load(Subsystem.Players); SubsystemLoader.Load(Subsystem.ParticleSystems); SubsystemLoader.Load(Subsystem.ObjectCreation); SubsystemLoader.Load(Subsystem.Multiplayer); SubsystemLoader.Load(Subsystem.LinearCampaign); SubsystemLoader.Load(Subsystem.Wnd); SubsystemLoader.Load(Subsystem.Terrain); SubsystemLoader.Load(Subsystem.Credits); break; case SageGame.Cnc3: SubsystemLoader.Load(Subsystem.Core); break; default: break; } TranslationManager = Translation.TranslationManager.Instance; Translation.TranslationManager.LoadGameStrings(fileSystem, Language, sageGame); FontManager = new FontManager(); WndImageLoader = AddDisposable(new WndImageLoader(this, game.AssetStore)); } }
public ContentManager( Game game, FileSystem fileSystem, GraphicsDevice graphicsDevice, SageGame sageGame) { using (GameTrace.TraceDurationEvent("ContentManager()")) { _game = game; FileSystem = fileSystem; GraphicsDevice = graphicsDevice; SageGame = sageGame; Language = LanguageUtility.ReadCurrentLanguage(game.Definition, fileSystem); TranslationManager = Translation.TranslationManager.Instance; Translation.TranslationManager.LoadGameStrings(fileSystem, Language, game.Definition); LocaleSpecificEncoding = Encoding.GetEncoding(TranslationManager.CurrentLanguage.TextInfo.ANSICodePage); void OnLanguageChanged(object sender, EventArgs e) { //throw new NotImplementedException("Encoding change on LanguageChanged not implemented yet"); } TranslationManager.LanguageChanged += OnLanguageChanged; AddDisposeAction(() => TranslationManager.LanguageChanged -= OnLanguageChanged); IniDataContext = new IniDataContext(); SubsystemLoader = Content.SubsystemLoader.Create(game.Definition, FileSystem, game, this); switch (sageGame) { // Only load these INI files for a subset of games, because we can't parse them for others yet. // TODO: Defer subsystem loading until necessary case SageGame.CncGenerals: case SageGame.CncGeneralsZeroHour: SubsystemLoader.Load(Subsystem.Core); SubsystemLoader.Load(Subsystem.Audio); SubsystemLoader.Load(Subsystem.Players); SubsystemLoader.Load(Subsystem.ParticleSystems); SubsystemLoader.Load(Subsystem.ObjectCreation); SubsystemLoader.Load(Subsystem.Locomotors); SubsystemLoader.Load(Subsystem.Sciences); SubsystemLoader.Load(Subsystem.Weapons); SubsystemLoader.Load(Subsystem.FXList); SubsystemLoader.Load(Subsystem.Multiplayer); SubsystemLoader.Load(Subsystem.LinearCampaign); SubsystemLoader.Load(Subsystem.Wnd); SubsystemLoader.Load(Subsystem.Terrain); SubsystemLoader.Load(Subsystem.Credits); SubsystemLoader.Load(Subsystem.Damage); SubsystemLoader.Load(Subsystem.SpecialPower); SubsystemLoader.Load(Subsystem.InGameUI); SubsystemLoader.Load(Subsystem.Rank); SubsystemLoader.Load(Subsystem.Animation2D); break; case SageGame.Bfme: case SageGame.Bfme2: case SageGame.Bfme2Rotwk: SubsystemLoader.Load(Subsystem.Core); SubsystemLoader.Load(Subsystem.Audio); SubsystemLoader.Load(Subsystem.Players); SubsystemLoader.Load(Subsystem.ParticleSystems); SubsystemLoader.Load(Subsystem.ObjectCreation); SubsystemLoader.Load(Subsystem.Locomotors); SubsystemLoader.Load(Subsystem.Sciences); SubsystemLoader.Load(Subsystem.Weapons); SubsystemLoader.Load(Subsystem.FXList); SubsystemLoader.Load(Subsystem.Multiplayer); SubsystemLoader.Load(Subsystem.LinearCampaign); SubsystemLoader.Load(Subsystem.Wnd); SubsystemLoader.Load(Subsystem.Terrain); SubsystemLoader.Load(Subsystem.Credits); SubsystemLoader.Load(Subsystem.Damage); SubsystemLoader.Load(Subsystem.SpecialPower); SubsystemLoader.Load(Subsystem.InGameUI); SubsystemLoader.Load(Subsystem.Rank); SubsystemLoader.Load(Subsystem.Animation2D); SubsystemLoader.Load(Subsystem.ExperienceLevels); SubsystemLoader.Load(Subsystem.AttributeModifiers); break; case SageGame.Cnc3: case SageGame.Ra3: SubsystemLoader.Load(Subsystem.Core); break; default: break; } UpgradeManager.Initialize(_game.AssetStore); FontManager = new FontManager(Language, StringComparer.Create(TranslationManager.CurrentLanguage, true)); } }
public ContentManager( Game game, FileSystem fileSystem, GraphicsDevice graphicsDevice, SageGame sageGame, WndCallbackResolver wndCallbackResolver) { using (GameTrace.TraceDurationEvent("ContentManager()")) { _game = game; _fileSystem = fileSystem; GraphicsDevice = graphicsDevice; SageGame = sageGame; Language = LanguageUtility.ReadCurrentLanguage(game.Definition, fileSystem.RootDirectory); IniDataContext = new IniDataContext(fileSystem, sageGame); DataContext = new DataContext(); SubsystemLoader = Content.SubsystemLoader.Create(game.Definition, _fileSystem, IniDataContext); switch (sageGame) { // Only load these INI files for a subset of games, because we can't parse them for others yet. case SageGame.CncGenerals: case SageGame.CncGeneralsZeroHour: case SageGame.Bfme: case SageGame.Bfme2: case SageGame.Bfme2Rotwk: SubsystemLoader.Load(Subsystem.Core); // TODO: Move this somewhere else. // Subsystem.Core should load mouse and water config, but that isn't the case with at least BFME2. IniDataContext.LoadIniFile(@"Data\INI\Mouse.ini"); IniDataContext.LoadIniFile(@"Data\INI\Water.ini"); IniDataContext.LoadIniFile(@"Data\INI\AudioSettings.ini"); break; default: break; } // TODO: Defer subsystem loading until necessary switch (sageGame) { // Only load these INI files for a subset of games, because we can't parse them for others yet. case SageGame.CncGenerals: case SageGame.CncGeneralsZeroHour: case SageGame.Bfme: case SageGame.Bfme2: case SageGame.Bfme2Rotwk: SubsystemLoader.Load(Subsystem.Players); SubsystemLoader.Load(Subsystem.ParticleSystems); SubsystemLoader.Load(Subsystem.ObjectCreation); SubsystemLoader.Load(Subsystem.Multiplayer); SubsystemLoader.Load(Subsystem.LinearCampaign); break; default: break; } _contentLoaders = new Dictionary <Type, ContentLoader> { { typeof(Model), AddDisposable(new ModelLoader()) }, { typeof(Scene3D), AddDisposable(new MapLoader()) }, { typeof(Texture), AddDisposable(new TextureLoader(graphicsDevice)) }, { typeof(Window), AddDisposable(new WindowLoader(this, wndCallbackResolver, Language)) }, { typeof(AptWindow), AddDisposable(new AptLoader()) }, }; _cachedObjects = new Dictionary <string, object>(); TranslationManager = Translation.TranslationManager.Instance; Translation.TranslationManager.LoadGameStrings(fileSystem, Language, sageGame); _cachedFonts = new Dictionary <FontKey, Font>(); var linearClampSamplerDescription = SamplerDescription.Linear; linearClampSamplerDescription.AddressModeU = SamplerAddressMode.Clamp; linearClampSamplerDescription.AddressModeV = SamplerAddressMode.Clamp; linearClampSamplerDescription.AddressModeW = SamplerAddressMode.Clamp; LinearClampSampler = AddDisposable( graphicsDevice.ResourceFactory.CreateSampler(ref linearClampSamplerDescription)); var pointClampSamplerDescription = SamplerDescription.Point; pointClampSamplerDescription.AddressModeU = SamplerAddressMode.Clamp; pointClampSamplerDescription.AddressModeV = SamplerAddressMode.Clamp; pointClampSamplerDescription.AddressModeW = SamplerAddressMode.Clamp; PointClampSampler = AddDisposable( graphicsDevice.ResourceFactory.CreateSampler(ref pointClampSamplerDescription)); NullTexture = AddDisposable(graphicsDevice.ResourceFactory.CreateTexture(TextureDescription.Texture2D(1, 1, 1, 1, PixelFormat.R8_G8_B8_A8_UNorm, TextureUsage.Sampled))); _cachedNullStructuredBuffers = new Dictionary <uint, DeviceBuffer>(); SolidWhiteTexture = AddDisposable(graphicsDevice.CreateStaticTexture2D( 1, 1, 1, new TextureMipMapData( new byte[] { 255, 255, 255, 255 }, 4, 4, 1, 1), PixelFormat.R8_G8_B8_A8_UNorm)); ShaderResources = AddDisposable(new ShaderResourceManager(graphicsDevice, SolidWhiteTexture)); WndImageLoader = AddDisposable(new WndImageLoader(this, new MappedImageLoader(this))); _fallbackFonts = new FontCollection(); var assembly = Assembly.GetExecutingAssembly(); var fontStream = assembly.GetManifestResourceStream($"OpenSage.Content.Fonts.{_fallbackEmbeddedFont}-Regular.ttf"); _fallbackFonts.Install(fontStream); fontStream = assembly.GetManifestResourceStream($"OpenSage.Content.Fonts.{_fallbackEmbeddedFont}-Bold.ttf"); _fallbackFonts.Install(fontStream); } }
public ContentManager( Game game, FileSystem fileSystem, GraphicsDevice graphicsDevice, SageGame sageGame) { using (GameTrace.TraceDurationEvent("ContentManager()")) { _game = game; FileSystem = fileSystem; GraphicsDevice = graphicsDevice; SageGame = sageGame; Language = LanguageUtility.ReadCurrentLanguage(game.Definition, fileSystem.RootDirectory); TranslationManager = Translation.TranslationManager.Instance; Translation.TranslationManager.LoadGameStrings(fileSystem, Language, sageGame); LocaleSpecificEncoding = Encoding.GetEncoding(TranslationManager.CurrentLanguage.TextInfo.ANSICodePage); TranslationManager.LanguageChanged += (sender, e) => throw new NotImplementedException("Encoding change on LanguageChanged not implemented yet"); IniDataContext = new IniDataContext(); SubsystemLoader = Content.SubsystemLoader.Create(game.Definition, FileSystem, game, this); switch (sageGame) { // Only load these INI files for a subset of games, because we can't parse them for others yet. case SageGame.CncGenerals: case SageGame.CncGeneralsZeroHour: case SageGame.Bfme: case SageGame.Bfme2: case SageGame.Bfme2Rotwk: SubsystemLoader.Load(Subsystem.Core); // TODO: Defer subsystem loading until necessary SubsystemLoader.Load(Subsystem.Audio); SubsystemLoader.Load(Subsystem.Players); SubsystemLoader.Load(Subsystem.ParticleSystems); SubsystemLoader.Load(Subsystem.ObjectCreation); SubsystemLoader.Load(Subsystem.Locomotors); SubsystemLoader.Load(Subsystem.Weapons); SubsystemLoader.Load(Subsystem.FXList); SubsystemLoader.Load(Subsystem.Multiplayer); SubsystemLoader.Load(Subsystem.LinearCampaign); SubsystemLoader.Load(Subsystem.Wnd); SubsystemLoader.Load(Subsystem.Terrain); SubsystemLoader.Load(Subsystem.Credits); break; case SageGame.Cnc3: SubsystemLoader.Load(Subsystem.Core); break; default: break; } FontManager = new FontManager(Language, StringComparer.Create(TranslationManager.CurrentLanguage, true)); } }