public PaletteOffsetCollections()
        {
            ExtraPalettes = new ExtraPalettes();

            var objectBuilder = new PaletteIndexCollectionBuilder(0xDE6C8, 7);
            var spriteBuilder = new PaletteIndexCollectionBuilder(0xDD446, 7);

            LightWorld = new LightWorld(
                objectBuilder,
                spriteBuilder,
                new PaletteIndexCollectionBuilder(0xDD218, 15));
            DarkWorld = new DarkWorld(
                objectBuilder,
                spriteBuilder,
                new PaletteIndexCollectionBuilder(0xDD290, 15));
            TriforceRoom = new TriforceRoom(objectBuilder);

            LightWorldMap = new OverworldMap(
                new PaletteIndexCollectionBuilder(0x55B39, 16));
            DarkWorldMap = new OverworldMap(
                new PaletteIndexCollectionBuilder(0x55C39, 16));

            LightWorldAndMap = new LightWorldAndMap(LightWorld, LightWorldMap);
            DarkWorldAndMap  = new DarkWorldAndMap(DarkWorld, DarkWorldMap);
        }
        public DarkWorldAndMap(DarkWorld darkWorld, OverworldMap darkWorldMap)
        {
            if (darkWorld is null)
            {
                throw new ArgumentNullException(nameof(darkWorld));
            }

            if (darkWorldMap is null)
            {
                throw new ArgumentNullException(nameof(darkWorldMap));
            }

            GrassShrubsAndTrees = AddCollectionsAsConcatenation(
                darkWorld.GrassShrubsAndTrees,
                darkWorldMap.Grass,
                darkWorldMap.Sanctuary);

            FlowersAndRocks = AddCollectionsAsConcatenation(
                darkWorld.FlowersAndRocks,
                darkWorldMap.Flowers);

            TreeWood = AddCollectionsAsConcatenation(
                darkWorld.TreeWood,
                darkWorldMap.TreeWood);

            Water = AddCollectionsAsConcatenation(
                darkWorld.Water,
                darkWorldMap.Water);

            HillsAndDirt = AddCollectionsAsConcatenation(
                darkWorld.HillsAndDirt,
                darkWorldMap.HillsAndDirt);

            Clouds = AddCollectionsAsConcatenation(
                darkWorld.DarkMountain.BlackClouds,
                darkWorldMap.Clouds);

            HyruleCastleWalls = AddCollectionsAsConcatenation(
                darkWorld.Pyramid,
                darkWorldMap.HyruleCastle);

            Houses = AddCollectionsAsConcatenation(
                darkWorld.Houses,
                darkWorldMap.Houses);

            DeathMountain = AddCollectionsAsConcatenation(
                darkWorld.DarkMountain.WallsAndAbyss,
                darkWorldMap.DeathMountain);

            GanonsTower = AddCollectionsAsConcatenation(
                darkWorld.DarkMountain.GanonsTowerPrimary,
                darkWorldMap.TowerOfHera);

            IcePalace = AddCollectionsAsConcatenation(
                darkWorld.IcePalaceEntrance,
                darkWorldMap.IcePalace);

            AllIndexCollections = new ReadOnlyCollection <IndexCollection>(
                new IndexCollection[]
            {
                GrassShrubsAndTrees,
                FlowersAndRocks,
                TreeWood,
                Water,
                HillsAndDirt,
                Clouds,
                HyruleCastleWalls,
                Houses,
                DeathMountain,
                GanonsTower,
                IcePalace,
            });
        }
        public LightWorldAndMap(LightWorld lightWorld, OverworldMap lightWorldMap)
        {
            if (lightWorld is null)
            {
                throw new ArgumentNullException(nameof(lightWorld));
            }

            if (lightWorldMap is null)
            {
                throw new ArgumentNullException(nameof(lightWorldMap));
            }

            GrassShrubsAndTrees = AddCollectionsAsConcatenation(
                lightWorld.GrassShrubsAndTrees,
                lightWorldMap.Grass);

            FlowersAndRocks = AddCollectionsAsConcatenation(
                lightWorld.FlowersAndRocks,
                lightWorldMap.Flowers);

            Water = AddCollectionsAsConcatenation(
                lightWorld.Water,
                lightWorldMap.Water);

            HillsAndDirt = AddCollectionsAsConcatenation(
                lightWorld.HillsAndDirt,
                lightWorldMap.HillsAndDirt,
                lightWorldMap.TreeWood);

            Clouds = AddCollectionsAsConcatenation(
                lightWorld.DeathMountain.Clouds,
                lightWorldMap.Clouds);

            HyruleCastleWalls = AddCollectionsAsConcatenation(
                lightWorld.HyruleCastle.Walls,
                lightWorldMap.HyruleCastle);

            Sanctuary = AddCollectionsAsConcatenation(
                lightWorld.Sanctuary.Wall,
                lightWorldMap.Sanctuary);

            Houses = AddCollectionsAsConcatenation(
                lightWorld.Houses,
                lightWorldMap.Houses);

            DeathMountain = AddCollectionsAsConcatenation(
                lightWorld.DeathMountain.WallsAndAbyss,
                lightWorldMap.DeathMountain);

            TowerOfHera = AddCollectionsAsConcatenation(
                lightWorld.DeathMountain.HeraBricks,
                lightWorldMap.TowerOfHera);

            AllIndexCollections = new ReadOnlyCollection <IndexCollection>(
                new IndexCollection[]
            {
                GrassShrubsAndTrees,
                FlowersAndRocks,
                Water,
                HillsAndDirt,
                Clouds,
                HyruleCastleWalls,
                Sanctuary,
                Houses,
                DeathMountain,
                TowerOfHera,
            });
        }