Initialize() public méthode

public Initialize ( ) : void
Résultat void
        internal WorldRenderer(ModData modData, World world)
        {
            World    = world;
            TileSize = World.Map.Grid.TileSize;
            Viewport = new Viewport(this, world.Map);

            createPaletteReference = CreatePaletteReference;

            var mapGrid = modData.Manifest.Get <MapGrid>();

            enableDepthBuffer = mapGrid.EnableDepthBuffer;

            foreach (var pal in world.TraitDict.ActorsWithTrait <ILoadsPalettes>())
            {
                pal.Trait.LoadPalettes(this);
            }

            foreach (var p in world.Players)
            {
                UpdatePalettesForPlayer(p.InternalName, p.Color, false);
            }

            palette.Initialize();

            Theater         = new Theater(world.Map.Rules.TileSet);
            terrainRenderer = new TerrainRenderer(world, this);

            devTrait = Exts.Lazy(() => world.LocalPlayer != null ? world.LocalPlayer.PlayerActor.Trait <DeveloperMode>() : null);
        }
Exemple #2
0
        public CursorProvider(ModData modData)
        {
            var sequenceFiles = modData.Manifest.Cursors;

            cursors = new Dictionary<string, CursorSequence>();
            palettes = new Cache<string, PaletteReference>(CreatePaletteReference);
            var sequences = new MiniYaml(null, sequenceFiles.Select(s => MiniYaml.FromFile(s)).Aggregate(MiniYaml.MergeLiberal));
            var shadowIndex = new int[] { };

            if (sequences.NodesDict.ContainsKey("ShadowIndex"))
            {
                Array.Resize(ref shadowIndex, shadowIndex.Length + 1);
                Exts.TryParseIntegerInvariant(sequences.NodesDict["ShadowIndex"].Value,
                    out shadowIndex[shadowIndex.Length - 1]);
            }

            palette = new HardwarePalette();
            foreach (var p in sequences.NodesDict["Palettes"].Nodes)
                palette.AddPalette(p.Key, new Palette(GlobalFileSystem.Open(p.Value.Value), shadowIndex), false);

            var spriteLoader = new SpriteLoader(new string[0], new SheetBuilder(SheetType.Indexed));
            foreach (var s in sequences.NodesDict["Cursors"].Nodes)
                LoadSequencesForCursor(spriteLoader, s.Key, s.Value);

            palette.Initialize();
        }
Exemple #3
0
        internal WorldRenderer(ModData modData, World world)
        {
            World     = world;
            TileSize  = World.Map.Grid.TileSize;
            TileScale = World.Map.Grid.Type == MapGridType.RectangularIsometric ? 1448 : 1024;
            Viewport  = new Viewport(this, world.Map);

            createPaletteReference = CreatePaletteReference;

            var mapGrid = modData.Manifest.Get <MapGrid>();

            enableDepthBuffer = mapGrid.EnableDepthBuffer;

            foreach (var pal in world.TraitDict.ActorsWithTrait <ILoadsPalettes>())
            {
                pal.Trait.LoadPalettes(this);
            }

            foreach (var p in world.Players)
            {
                UpdatePalettesForPlayer(p.InternalName, p.Color, false);
            }

            palette.Initialize();

            Theater         = new Theater(world.Map.Rules.TileSet);
            terrainRenderer = world.WorldActor.TraitOrDefault <IRenderTerrain>();

            debugVis = Exts.Lazy(() => world.WorldActor.TraitOrDefault <DebugVisualizations>());
        }
Exemple #4
0
        public static void Initialize(string[] sequenceFiles)
        {
            cursors = new Dictionary <string, CursorSequence>();
            var sequences = new MiniYaml(null, sequenceFiles.Select(s => MiniYaml.FromFile(s)).Aggregate(MiniYaml.MergeLiberal));

            int[] ShadowIndex = { };

            if (sequences.NodesDict.ContainsKey("ShadowIndex"))
            {
                Array.Resize(ref ShadowIndex, ShadowIndex.Length + 1);
                int.TryParse(sequences.NodesDict["ShadowIndex"].Value, out ShadowIndex[ShadowIndex.Length - 1]);
            }

            Palette = new HardwarePalette();
            foreach (var p in sequences.NodesDict["Palettes"].Nodes)
            {
                Palette.AddPalette(p.Key, new Palette(FileSystem.Open(p.Value.Value), ShadowIndex), false);
            }

            foreach (var s in sequences.NodesDict["Cursors"].Nodes)
            {
                LoadSequencesForCursor(s.Key, s.Value);
            }

            Palette.Initialize();
        }
Exemple #5
0
        public CursorProvider(ModData modData)
        {
            var sequenceFiles = modData.Manifest.Cursors;

            cursors  = new Dictionary <string, CursorSequence>();
            palettes = new Cache <string, PaletteReference>(CreatePaletteReference);
            var sequences   = new MiniYaml(null, sequenceFiles.Select(s => MiniYaml.FromFile(s)).Aggregate(MiniYaml.MergeLiberal));
            var shadowIndex = new int[] { };

            var nodesDict = sequences.ToDictionary();

            if (nodesDict.ContainsKey("ShadowIndex"))
            {
                Array.Resize(ref shadowIndex, shadowIndex.Length + 1);
                Exts.TryParseIntegerInvariant(nodesDict["ShadowIndex"].Value,
                                              out shadowIndex[shadowIndex.Length - 1]);
            }

            palette = new HardwarePalette();
            foreach (var p in nodesDict["Palettes"].Nodes)
            {
                palette.AddPalette(p.Key, new ImmutablePalette(GlobalFileSystem.Open(p.Value.Value), shadowIndex), false);
            }

            var spriteLoader = new SpriteLoader(new string[0], new SheetBuilder(SheetType.Indexed));

            foreach (var s in nodesDict["Cursors"].Nodes)
            {
                LoadSequencesForCursor(spriteLoader, s.Key, s.Value);
            }
            spriteLoader.SheetBuilder.Current.ReleaseBuffer();

            palette.Initialize();
        }
Exemple #6
0
        public HardwareCursor(CursorProvider cursorProvider)
        {
            this.cursorProvider = cursorProvider;

            paletteReferences = new Cache <string, PaletteReference>(CreatePaletteReference);
            foreach (var p in cursorProvider.Palettes)
            {
                hardwarePalette.AddPalette(p.Key, p.Value, false);
            }

            hardwarePalette.Initialize();

            sheetBuilder = new SheetBuilder(SheetType.Indexed);
            foreach (var kv in cursorProvider.Cursors)
            {
                var palette = cursorProvider.Palettes[kv.Value.Palette];
                var hc      = kv.Value.Frames
                              .Select(f => CreateCursor(f, palette, kv.Key, kv.Value))
                              .ToArray();

                hardwareCursors.Add(kv.Key, hc);

                var s = kv.Value.Frames.Select(a => sheetBuilder.Add(a)).ToArray();
                sprites.Add(kv.Key, s);
            }

            sheetBuilder.Current.ReleaseBuffer();

            Update();
        }
Exemple #7
0
        public HardwareCursor(CursorProvider cursorProvider)
        {
            this.cursorProvider = cursorProvider;

            paletteReferences = new Cache <string, PaletteReference>(CreatePaletteReference);
            foreach (var p in cursorProvider.Palettes)
            {
                hardwarePalette.AddPalette(p.Key, p.Value, false);
            }

            hardwarePalette.Initialize();
            sheetBuilder = new SheetBuilder(SheetType.Indexed);
            foreach (var kv in cursorProvider.Cursors)
            {
                var frames  = kv.Value.Frames;
                var palette = cursorProvider.Palettes[kv.Value.Palette];

                // Hardware cursors have a number of odd platform-specific bugs/limitations.
                // Reduce the number of edge cases by padding the individual frames such that:
                // - the hotspot is inside the frame bounds (enforced by SDL)
                // - all frames within a sequence have the same size (needed for macOS 10.15)
                // - the frame size is a multiple of 8 (needed for Windows)
                var sequenceBounds = Rectangle.FromLTRB(0, 0, 1, 1);
                var frameHotspots  = new int2[frames.Length];
                for (var i = 0; i < frames.Length; i++)
                {
                    // Hotspot relative to the center of the frame
                    frameHotspots[i] = kv.Value.Hotspot - frames[i].Offset.ToInt2() + new int2(frames[i].Size) / 2;

                    // Bounds relative to the hotspot
                    sequenceBounds = Rectangle.Union(sequenceBounds, new Rectangle(-frameHotspots[i], frames[i].Size));
                }

                // Pad bottom-right edge to make the frame size a multiple of 8
                var paddedSize = 8 * new int2((sequenceBounds.Width + 7) / 8, (sequenceBounds.Height + 7) / 8);

                var cursors      = new IHardwareCursor[frames.Length];
                var frameSprites = new Sprite[frames.Length];
                for (var i = 0; i < frames.Length; i++)
                {
                    // Software rendering is used when the cursor is locked
                    frameSprites[i] = sheetBuilder.Add(frames[i].Data, frames[i].Size, 0, frames[i].Offset);

                    // Calculate the padding to position the frame within sequenceBounds
                    var paddingTL = -(sequenceBounds.Location + frameHotspots[i]);
                    var paddingBR = paddedSize - new int2(frames[i].Size) - paddingTL;
                    cursors[i] = CreateCursor(kv.Key, frames[i], palette, paddingTL, paddingBR, -sequenceBounds.Location);
                }

                hardwareCursors.Add(kv.Key, cursors);
                sprites.Add(kv.Key, frameSprites);
            }

            sheetBuilder.Current.ReleaseBuffer();

            Update();
        }
Exemple #8
0
        internal WorldRenderer(World world)
        {
            this.world = world;
            palette    = new HardwarePalette();

            palettes = new Cache <string, PaletteReference>(CreatePaletteReference);
            foreach (var pal in world.traitDict.ActorsWithTraitMultiple <IPalette>(world))
            {
                pal.Trait.InitPalette(this);
            }

            palette.Initialize();

            terrainRenderer = new TerrainRenderer(world, this);
            shroudRenderer  = new ShroudRenderer(world);
        }
Exemple #9
0
		internal WorldRenderer(World world)
		{
			this.world = world;
			Viewport = new Viewport(this, world.Map);
			palette = new HardwarePalette();

			palettes = new Dictionary<string, PaletteReference>();
			foreach (var pal in world.traitDict.ActorsWithTrait<ILoadsPalettes>())
				pal.Trait.LoadPalettes(this);

			palette.Initialize();

			Theater = new Theater(world.TileSet);
			terrainRenderer = new TerrainRenderer(world, this);

			devTrait = Exts.Lazy(() => world.LocalPlayer != null ? world.LocalPlayer.PlayerActor.Trait<DeveloperMode>() : null);
		}
Exemple #10
0
        internal WorldRenderer(World world)
        {
            this.world = world;
            Viewport = new Viewport(this, world.Map);
            palette = new HardwarePalette();

            palettes = new Cache<string, PaletteReference>(CreatePaletteReference);
            foreach (var pal in world.traitDict.ActorsWithTraitMultiple<IPalette>(world))
                pal.Trait.InitPalette(this);

            palette.Initialize();

            Theater = new Theater(world.TileSet);
            terrainRenderer = new TerrainRenderer(world, this);

            devTrait = Lazy.New(() => world.LocalPlayer != null ? world.LocalPlayer.PlayerActor.Trait<DeveloperMode>() : null);
        }
Exemple #11
0
        internal WorldRenderer(World world)
        {
            this.world = world;
            Viewport   = new Viewport(this, world.Map);
            palette    = new HardwarePalette();

            palettes = new Dictionary <string, PaletteReference>();
            foreach (var pal in world.traitDict.ActorsWithTrait <ILoadsPalettes>())
            {
                pal.Trait.LoadPalettes(this);
            }

            palette.Initialize();

            Theater         = new Theater(world.TileSet);
            terrainRenderer = new TerrainRenderer(world, this);

            devTrait = Exts.Lazy(() => world.LocalPlayer != null ? world.LocalPlayer.PlayerActor.Trait <DeveloperMode>() : null);
        }
Exemple #12
0
        internal WorldRenderer(World world)
        {
            this.world = world;
            Viewport   = new Viewport(this, world.Map);
            palette    = new HardwarePalette();

            palettes = new Cache <string, PaletteReference>(CreatePaletteReference);
            foreach (var pal in world.traitDict.ActorsWithTraitMultiple <IPalette>(world))
            {
                pal.Trait.InitPalette(this);
            }

            palette.Initialize();

            Theater         = new Theater(world.TileSet);
            terrainRenderer = new TerrainRenderer(world, this);

            devTrait = Lazy.New(() => world.LocalPlayer != null ? world.LocalPlayer.PlayerActor.Trait <DeveloperMode>() : null);
        }
Exemple #13
0
        public static void Initialize(string[] sequenceFiles)
        {
            cursors = new Dictionary<string, CursorSequence>();
            var sequences = new MiniYaml(null, sequenceFiles.Select(s => MiniYaml.FromFile(s)).Aggregate(MiniYaml.MergeLiberal));
            int[] ShadowIndex = { };

            if (sequences.NodesDict.ContainsKey("ShadowIndex"))
            {
                Array.Resize(ref ShadowIndex, ShadowIndex.Length + 1);
                int.TryParse(sequences.NodesDict["ShadowIndex"].Value, out ShadowIndex[ShadowIndex.Length - 1]);
            }

            Palette = new HardwarePalette();
            foreach (var p in sequences.NodesDict["Palettes"].Nodes)
                Palette.AddPalette(p.Key, new Palette(FileSystem.Open(p.Value.Value), ShadowIndex), false);

            foreach (var s in sequences.NodesDict["Cursors"].Nodes)
                LoadSequencesForCursor(s.Key, s.Value);

            Palette.Initialize();
        }
Exemple #14
0
        public SoftwareCursor(CursorProvider cursorProvider)
        {
            this.cursorProvider = cursorProvider;

            paletteReferences = new Cache <string, PaletteReference>(CreatePaletteReference);
            foreach (var p in cursorProvider.Palettes)
            {
                palette.AddPalette(p.Key, p.Value, false);
            }

            palette.Initialize();

            sheetBuilder = new SheetBuilder(SheetType.Indexed);
            foreach (var kv in cursorProvider.Cursors)
            {
                var s = kv.Value.Frames.Select(a => sheetBuilder.Add(a)).ToArray();
                sprites.Add(kv.Key, s);
            }

            sheetBuilder.Current.ReleaseBuffer();

            Game.Renderer.Window.SetHardwareCursor(null);
        }
Exemple #15
0
        internal WorldRenderer(World world)
        {
            World    = world;
            Viewport = new Viewport(this, world.Map);

            createPaletteReference = CreatePaletteReference;

            foreach (var pal in world.TraitDict.ActorsWithTrait <ILoadsPalettes>())
            {
                pal.Trait.LoadPalettes(this);
            }

            foreach (var p in world.Players)
            {
                UpdatePalettesForPlayer(p.InternalName, p.Color, false);
            }

            palette.Initialize();

            Theater         = new Theater(world.TileSet);
            terrainRenderer = new TerrainRenderer(world, this);

            devTrait = Exts.Lazy(() => world.LocalPlayer != null ? world.LocalPlayer.PlayerActor.Trait <DeveloperMode>() : null);
        }
Exemple #16
0
        public override void Init(ModData modData, Dictionary<string, string> info)
        {
            // Avoid standard loading mechanisms so we
            // can display the loadscreen as early as possible
            r = Game.Renderer;
            if (r == null)
                return;

            if (info.ContainsKey("Text"))
                messages = info["Text"].Split(',');

            if (info.ContainsKey("Palette"))
            {
                using (var stream = modData.DefaultFileSystem.Open(info["Palette"]))
                {
                    palette = new ImmutablePalette(stream, new int[] { });
                }

                hardwarePalette = new HardwarePalette();
                hardwarePalette.AddPalette("loadscreen", palette, false);
                hardwarePalette.Initialize();
                r.SetPalette(hardwarePalette);
            }

            if (info.ContainsKey("Image"))
            {
                using (var stream = modData.DefaultFileSystem.Open(info["Image"]))
                {
                    CpsD2Loader loader = new CpsD2Loader();
                    if (!loader.TryParseSprite(stream, out frames))
                        return;
                }

                if (frames.Length == 0)
                    return;

                sheetBuilder = new SheetBuilder(SheetType.Indexed, 512);
                logo = sheetBuilder.Add(frames[0]);

                logoPos = new float2((r.Resolution.Width - logo.Size.X) / 2, (r.Resolution.Height - logo.Size.Y) / 2);
            }
        }