Esempio n. 1
0
 public Window(WndFile wndFile, Game game, WndCallbackResolver wndCallbackResolver)
     : this(wndFile.RootWindow.ScreenRect.CreationResolution, CreateRootControl(wndFile, game.ContentManager, game.AssetStore, wndCallbackResolver), game.ContentManager)
 {
     Game           = game;
     Bounds         = wndFile.RootWindow.ScreenRect.ToRectangle();
     LayoutInit     = wndCallbackResolver.GetWindowCallback(wndFile.LayoutBlock.LayoutInit);
     LayoutUpdate   = wndCallbackResolver.GetWindowCallback(wndFile.LayoutBlock.LayoutUpdate);
     LayoutShutdown = wndCallbackResolver.GetWindowCallback(wndFile.LayoutBlock.LayoutShutdown);
 }
Esempio n. 2
0
 private static Control CreateRootControl(
     WndFile wndFile,
     ContentManager contentManager,
     AssetStore assetStore,
     WndCallbackResolver wndCallbackResolver)
 {
     return(CreateRecursive(
                wndFile.RootWindow,
                contentManager,
                assetStore,
                wndCallbackResolver,
                wndFile.RootWindow.ScreenRect.UpperLeft));
 }
Esempio n. 3
0
        public Window(WndFile wndFile, Game game, WndCallbackResolver wndCallbackResolver)
            : this(wndFile.RootWindow.ScreenRect.CreationResolution, game.GraphicsLoadContext)
        {
            Game           = game;
            Bounds         = wndFile.RootWindow.ScreenRect.ToRectangle();
            LayoutInit     = wndCallbackResolver.GetWindowCallback(wndFile.LayoutBlock.LayoutInit);
            LayoutUpdate   = wndCallbackResolver.GetWindowCallback(wndFile.LayoutBlock.LayoutUpdate);
            LayoutShutdown = wndCallbackResolver.GetWindowCallback(wndFile.LayoutBlock.LayoutShutdown);

            Root = CreateRecursive(
                wndFile.RootWindow,
                ImageLoader,
                game.ContentManager,
                game.AssetStore,
                wndCallbackResolver,
                wndFile.RootWindow.ScreenRect.UpperLeft);
            Controls.Add(Root);
        }
Esempio n. 4
0
        public WindowLoader(ContentManager contentManager, WndCallbackResolver wndCallbackResolver)
        {
            _wndCallbackResolver = wndCallbackResolver;

            switch (contentManager.SageGame)
            {
            case SageGame.CncGenerals:
            case SageGame.CncGeneralsZeroHour:
                contentManager.IniDataContext.LoadIniFile(@"Data\English\HeaderTemplate.ini");
                break;

            case SageGame.BattleForMiddleEarth:
                contentManager.IniDataContext.LoadIniFile(@"lang\english\headertemplate.ini");
                break;

            case SageGame.BattleForMiddleEarthII:
                contentManager.IniDataContext.LoadIniFile(@"headertemplate.ini");
                break;
            }

            contentManager.IniDataContext.LoadIniFiles(@"Data\INI\MappedImages\HandCreated\");
            contentManager.IniDataContext.LoadIniFiles(@"Data\INI\MappedImages\TextureSize_512\");
        }
Esempio n. 5
0
        public WindowLoader(ContentManager contentManager, WndCallbackResolver wndCallbackResolver, string language)
        {
            _wndCallbackResolver = wndCallbackResolver;

            switch (contentManager.SageGame)
            {
            case SageGame.CncGenerals:
            case SageGame.CncGeneralsZeroHour:
                contentManager.IniDataContext.LoadIniFile($@"Data\{language}\HeaderTemplate.ini");
                break;

            case SageGame.Bfme:
                contentManager.IniDataContext.LoadIniFile($@"lang\{language}\headertemplate.ini");
                break;

            case SageGame.Bfme2:
            case SageGame.Bfme2Rotwk:
                contentManager.IniDataContext.LoadIniFile(@"headertemplate.ini");
                break;
            }

            contentManager.IniDataContext.LoadIniFiles(@"Data\INI\MappedImages\HandCreated\");
            contentManager.IniDataContext.LoadIniFiles(@"Data\INI\MappedImages\TextureSize_512\");
        }
Esempio n. 6
0
        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);
            }
        }
Esempio n. 7
0
        private static Control CreateElementRecursive(WndWindowDefinition wndWindow, ContentManager contentManager, WndCallbackResolver wndCallbackResolver, Point2D parentOffset)
        {
            var imageLoader = contentManager.WndImageLoader;

            Control createControl()
            {
                switch (wndWindow.WindowType)
                {
                case WndWindowType.CheckBox:
                    return(new CheckBox
                    {
                        UncheckedImage = imageLoader.CreateNormalImage(wndWindow.EnabledDrawData, 1),
                        CheckedImage = imageLoader.CreateNormalImage(wndWindow.EnabledDrawData, 2),

                        HoverUncheckedImage = imageLoader.CreateNormalImage(wndWindow.HiliteDrawData, 1),
                        HoverCheckedImage = imageLoader.CreateNormalImage(wndWindow.HiliteDrawData, 2),

                        DisabledUncheckedImage = imageLoader.CreateNormalImage(wndWindow.DisabledDrawData, 1),
                        DisabledCheckedImage = imageLoader.CreateNormalImage(wndWindow.DisabledDrawData, 2)
                    });

                case WndWindowType.ComboBox:
                    return(new ComboBox
                    {
                        IsEditable = wndWindow.ComboBoxData.IsEditable,

                        TextBoxBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.ComboBoxEditBoxEnabledDrawData, 0, 2, 1),
                        TextBoxHoverBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.ComboBoxEditBoxHiliteDrawData, 0, 2, 1),
                        TextBoxDisabledBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.ComboBoxEditBoxDisabledDrawData, 0, 2, 1),

                        DropDownButtonImage = imageLoader.CreateNormalImage(wndWindow.ComboBoxDropDownButtonEnabledDrawData, 0),

                        DropDownUpButtonImage = imageLoader.CreateNormalImage(wndWindow.ListBoxEnabledUpButtonDrawData, 0),
                        DropDownUpButtonHoverImage = imageLoader.CreateNormalImage(wndWindow.ListBoxHiliteUpButtonDrawData, 0),

                        DropDownDownButtonImage = imageLoader.CreateNormalImage(wndWindow.ListBoxEnabledDownButtonDrawData, 0),
                        DropDownDownButtonHoverImage = imageLoader.CreateNormalImage(wndWindow.ListBoxHiliteDownButtonDrawData, 0),

                        DropDownThumbImage = imageLoader.CreateNormalImage(wndWindow.SliderThumbEnabledDrawData, 0),
                        DropDownThumbHoverImage = imageLoader.CreateNormalImage(wndWindow.SliderThumbHiliteDrawData, 0),

                        DropDownSelectedItemBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.HiliteDrawData, 1, 3, 2)
                    });

                case WndWindowType.HorizontalSlider:
                    return(new Slider
                    {
                        HighlightedBoxImage = imageLoader.CreateNormalImage(wndWindow.DisabledDrawData, 0),
                        UnhighlightedBoxImage = imageLoader.CreateNormalImage(wndWindow.DisabledDrawData, 1),

                        MinimumValue = wndWindow.SliderData.MinValue,
                        MaximumValue = wndWindow.SliderData.MaxValue,

                        Value = wndWindow.SliderData.MinValue + (wndWindow.SliderData.MaxValue - wndWindow.SliderData.MinValue) / 2
                    });

                case WndWindowType.ListBox:
                    var listBox = new ListBox
                    {
                        BorderColor = wndWindow.EnabledDrawData.Items[0].BorderColor.ToColorRgbaF(),
                        BorderWidth = 1,

                        SelectedItemBackgroundImage      = imageLoader.CreateStretchableImage(wndWindow.EnabledDrawData, 1, 3, 2),
                        SelectedItemHoverBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.HiliteDrawData, 1, 3, 2),

                        ColumnWidths = wndWindow.ListBoxData.ColumnWidths,

                        IsScrollBarVisible = wndWindow.ListBoxData.ScrollBar
                    };
                    if (wndWindow.ListBoxData.ScrollBar)
                    {
                        listBox.UpButtonImage      = imageLoader.CreateNormalImage(wndWindow.ListBoxEnabledUpButtonDrawData, 0);
                        listBox.UpButtonHoverImage = imageLoader.CreateNormalImage(wndWindow.ListBoxHiliteUpButtonDrawData, 0);

                        listBox.DownButtonImage      = imageLoader.CreateNormalImage(wndWindow.ListBoxEnabledDownButtonDrawData, 0);
                        listBox.DownButtonHoverImage = imageLoader.CreateNormalImage(wndWindow.ListBoxHiliteDownButtonDrawData, 0);

                        listBox.ThumbImage      = imageLoader.CreateNormalImage(wndWindow.SliderThumbEnabledDrawData, 0);
                        listBox.ThumbHoverImage = imageLoader.CreateNormalImage(wndWindow.SliderThumbHiliteDrawData, 0);
                    }
                    ;
                    if (wndWindow.ListBoxData.ForceSelect)
                    {
                        listBox.SelectedIndex = 0;
                    }
                    return(listBox);

                case WndWindowType.PushButton:
                    return(new Button
                    {
                        BackgroundImage = imageLoader.CreateStretchableImage(wndWindow.EnabledDrawData, 0, 5, 6),
                        HoverBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.HiliteDrawData, 0, 5, 6),
                        DisabledBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.DisabledDrawData, 0, 5, 6),
                        PushedBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.HiliteDrawData, 1, 3, 4),

                        HoverTextColor = wndWindow.TextColor.Hilite.ToColorRgbaF(),
                        DisabledTextColor = wndWindow.TextColor.Disabled.ToColorRgbaF()
                    });

                case WndWindowType.StaticText:
                    return(new Label
                    {
                        TextAlignment = wndWindow.StaticTextData.Centered
                                ? TextAlignment.Center
                                : TextAlignment.Leading
                    });

                case WndWindowType.EntryField:
                    return(new TextBox
                    {
                        BackgroundImage = imageLoader.CreateStretchableImage(wndWindow.EnabledDrawData, 0, 2, 1),
                        HoverBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.HiliteDrawData, 0, 2, 1),
                        DisabledBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.DisabledDrawData, 0, 2, 1),

                        HoverTextColor = wndWindow.TextColor.Hilite.ToColorRgbaF(),
                        DisabledTextColor = wndWindow.TextColor.Disabled.ToColorRgbaF()
                    });

                default:     // TODO: Implement other window types.
                {
                    var control = new Control();
                    if (wndWindow.Status.HasFlag(WndWindowStatusFlags.Image))
                    {
                        control.BackgroundImage = imageLoader.CreateNormalImage(wndWindow.EnabledDrawData, 0);
                    }
                    else
                    {
                        control.BackgroundColor = wndWindow.EnabledDrawData.Items[0].Color.ToColorRgbaF();
                    }
                    if (control.BackgroundImage == null)
                    {
                        control.BorderColor = wndWindow.EnabledDrawData.Items[0].BorderColor.ToColorRgbaF();
                        control.BorderWidth = 1;
                    }
                    return(control);
                }
                }
            }

            var result = createControl();

            result.Name = wndWindow.Name;

            var wndRectangle = wndWindow.ScreenRect.ToRectangle();

            result.Bounds = new Rectangle(
                wndRectangle.X - parentOffset.X,
                wndRectangle.Y - parentOffset.Y,
                wndRectangle.Width,
                wndRectangle.Height);

            var systemCallback = wndCallbackResolver.GetControlCallback(wndWindow.SystemCallback);

            if (systemCallback != null)
            {
                result.SystemCallback = systemCallback;
            }

            var inputCallback = wndCallbackResolver.GetControlCallback(wndWindow.InputCallback);

            if (inputCallback != null)
            {
                result.InputCallback = inputCallback;
            }

            var drawCallback = wndCallbackResolver.GetControlDrawCallback(wndWindow.DrawCallback);

            if (drawCallback != null)
            {
                result.DrawCallback = drawCallback;
            }

            // TODO: TooltipCallback

            result.Visible = !wndWindow.Status.HasFlag(WndWindowStatusFlags.Hidden);

            if (wndWindow.Status.HasFlag(WndWindowStatusFlags.SeeThru))
            {
                result.BackgroundColor = ColorRgbaF.Transparent;
                result.BorderColor     = ColorRgbaF.Transparent;
            }

            if (wndWindow.HasHeaderTemplate)
            {
                var headerTemplate = contentManager.IniDataContext.HeaderTemplates.First(x => x.Name == wndWindow.HeaderTemplate);
                result.Font = contentManager.GetOrCreateFont(headerTemplate.Font, headerTemplate.Point, headerTemplate.Bold ? FontWeight.Bold : FontWeight.Normal);
            }
            else
            {
                result.Font = contentManager.GetOrCreateFont(wndWindow.Font.Name, wndWindow.Font.Size, wndWindow.Font.Bold ? FontWeight.Bold : FontWeight.Normal);
            }

            result.TextColor = wndWindow.TextColor.Enabled.ToColorRgbaF();

            result.Text = contentManager.TranslationManager.Lookup(wndWindow.Text);

            // TODO: TextBorderColor

            foreach (var childWindow in wndWindow.ChildWindows)
            {
                var child = CreateElementRecursive(childWindow, contentManager, wndCallbackResolver, wndRectangle.Location);
                result.Controls.Add(child);
            }

            return(result);
        }
Esempio n. 8
0
        public ContentManager(
            Game game,
            FileSystem fileSystem,
            GraphicsDevice graphicsDevice,
            SageGame sageGame,
            WndCallbackResolver wndCallbackResolver)
        {
            _game       = game;
            _fileSystem = fileSystem;

            GraphicsDevice = graphicsDevice;

            SageGame = sageGame;

            IniDataContext = new IniDataContext(fileSystem);

            IniDataContext.LoadIniFiles(@"Data\INI\Default\Object.ini");
            IniDataContext.LoadIniFiles(@"Data\INI\Object");

            _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)) },
                { typeof(AptWindow), AddDisposable(new AptLoader()) },
                { typeof(WavFile), AddDisposable(new WavLoader()) },
            };

            _cachedObjects = new Dictionary <string, object>();

            EffectLibrary = AddDisposable(new EffectLibrary(graphicsDevice));

            TranslationManager = new TranslationManager(fileSystem, 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,
                                                  new TextureMipMapData(
                                                      new byte[] { 255, 255, 255, 255 },
                                                      4, 4, 1, 1),
                                                  PixelFormat.R8_G8_B8_A8_UNorm));

            WndImageLoader = AddDisposable(new WndImageLoader(this, new MappedImageLoader(this)));
        }
Esempio n. 9
0
        internal static Control CreateRecursive(
            WndWindowDefinition wndWindow,
            ImageLoader imageLoader,
            ContentManager contentManager,
            AssetStore assetStore,
            WndCallbackResolver wndCallbackResolver,
            Point2D parentOffset)
        {
            var result = CreateControl(wndWindow, imageLoader);

            result.Name = wndWindow.Name;

            var wndRectangle = wndWindow.ScreenRect.ToRectangle();

            result.Bounds = new Rectangle(
                wndRectangle.X - parentOffset.X,
                wndRectangle.Y - parentOffset.Y,
                wndRectangle.Width,
                wndRectangle.Height);

            var systemCallback = wndCallbackResolver.GetControlCallback(wndWindow.SystemCallback);

            if (systemCallback != null)
            {
                result.SystemCallback = systemCallback;
            }

            var inputCallback = wndCallbackResolver.GetControlCallback(wndWindow.InputCallback);

            if (inputCallback != null)
            {
                result.InputCallback = inputCallback;
            }

            var drawCallback = wndCallbackResolver.GetControlDrawCallback(wndWindow.DrawCallback);

            if (drawCallback != null)
            {
                result.DrawCallback = drawCallback;
            }

            // TODO: TooltipCallback

            result.Visible = !wndWindow.Status.HasFlag(WndWindowStatusFlags.Hidden);

            if (wndWindow.Status.HasFlag(WndWindowStatusFlags.SeeThru))
            {
                result.BackgroundColor = ColorRgbaF.Transparent;
                result.BorderColor     = ColorRgbaF.Transparent;
            }

            if (wndWindow.HasHeaderTemplate)
            {
                var headerTemplate = assetStore.HeaderTemplates.GetByName(wndWindow.HeaderTemplate);
                result.Font = contentManager.FontManager.GetOrCreateFont(headerTemplate.Font.Name, headerTemplate.Font.Size, headerTemplate.Font.Bold ? FontWeight.Bold : FontWeight.Normal);
            }
            else
            {
                result.Font = contentManager.FontManager.GetOrCreateFont(wndWindow.Font.Name, wndWindow.Font.Size, wndWindow.Font.Bold ? FontWeight.Bold : FontWeight.Normal);
            }

            result.TextColor = wndWindow.TextColor.Enabled.ToColorRgbaF();

            result.Text = wndWindow.Text.Translate();

            // TODO: TextBorderColor

            foreach (var childWindow in wndWindow.ChildWindows)
            {
                var child = CreateRecursive(childWindow, imageLoader, contentManager, assetStore, wndCallbackResolver, wndRectangle.Location);
                result.Controls.Add(child);
            }

            return(result);
        }
Esempio n. 10
0
        public ContentManager(
            Game game,
            FileSystem fileSystem,
            GraphicsDevice graphicsDevice,
            SageGame sageGame,
            WndCallbackResolver wndCallbackResolver)
        {
            _game       = game;
            _fileSystem = fileSystem;

            GraphicsDevice = graphicsDevice;

            SageGame = sageGame;

            string language = LanguageUtility.ReadCurrentLanguage(game.Definition, fileSystem.RootDirectory);

            IniDataContext = new IniDataContext(fileSystem);

            IniDataContext.LoadIniFiles(@"Data\INI\Default\Object.ini");
            IniDataContext.LoadIniFiles(@"Data\INI\Object");
            IniDataContext.LoadIniFiles(@"Data\INI\multiplayer.ini");
            IniDataContext.LoadIniFile(@"Data\INI\PlayerTemplate.ini");

            IniDataContext.LoadIniFile(@"maps\MapCache.ini");

            _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()) },
                { typeof(WavFile), AddDisposable(new WavLoader()) },
            };

            _cachedObjects = new Dictionary <string, object>();

            EffectLibrary = AddDisposable(new EffectLibrary(graphicsDevice));

            TranslationManager = new TranslationManager(fileSystem, sageGame, language);

            _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,
                                                  new TextureMipMapData(
                                                      new byte[] { 255, 255, 255, 255 },
                                                      4, 4, 1, 1),
                                                  PixelFormat.R8_G8_B8_A8_UNorm));

            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);
        }
Esempio n. 11
0
        private static WndWindow CreateElementRecursive(WndWindowDefinition wndWindow, ContentManager contentManager, WndCallbackResolver wndCallbackResolver)
        {
            var result = WndWindow.Create(wndWindow, contentManager, wndCallbackResolver);

            foreach (var childWindow in wndWindow.ChildWindows)
            {
                var child = CreateElementRecursive(childWindow, contentManager, wndCallbackResolver);
                child.Parent = result;
                result.Children.Add(child);
            }

            return(result);
        }