internal static void WriteBundleLayout(Stream stream, BuildLayout layout)
        {
            using (StreamWriter sw = new StreamWriter(stream))
            {
                TabWriter writer = new TabWriter(sw);

                writer.WriteLine("WARNING! The formatting in this file may change in future package versions.");
                writer.WriteLine($"Unity Version: {UnityEngine.Application.unityVersion}");
                PackageManager.PackageInfo info = PackageManager.PackageInfo.FindForAssembly(typeof(BuildLayoutPrinter).Assembly);
                if (info != null)
                {
                    writer.WriteLine($"{info.name}: {info.version}");
                }

                WriteSummary(writer, layout);
                writer.WriteLine("");


                foreach (BuildLayout.Group grp in layout.Groups)
                {
                    PrintGroup(writer, grp);
                }
                using (writer.IndentScope("BuiltIn Bundles"))
                    foreach (BuildLayout.Bundle b in layout.BuiltInBundles)
                    {
                        PrintArchive(writer, b);
                    }
            }
        }
        static void WriteSummary(TabWriter writer, BuildLayout layout)
        {
            int   ExplicitAssetCount = 0;
            int   SceneBundleCount   = 0;
            int   AssetBundleCount   = 0;
            ulong TotalBuildSize     = 0;
            ulong MonoScriptSize     = 0;
            ulong BundleOverheadSize = 0;

            foreach (BuildLayout.File f in BuildLayoutHelpers.EnumerateFiles(layout))
            {
                BundleOverheadSize += f.BundleObjectInfo != null ? f.BundleObjectInfo.Size : 0;
                MonoScriptSize     += f.MonoScriptSize;
            }

            foreach (BuildLayout.Bundle b in BuildLayoutHelpers.EnumerateBundles(layout))
            {
                bool sceneBundle = BuildLayoutHelpers.EnumerateAssets(b).FirstOrDefault(x => x.AssetPath.EndsWith(".unity", StringComparison.OrdinalIgnoreCase)) != null;
                SceneBundleCount += sceneBundle ? 1 : 0;
                AssetBundleCount += sceneBundle ? 0 : 1;
                TotalBuildSize   += b.FileSize;
            }

            ExplicitAssetCount = BuildLayoutHelpers.EnumerateAssets(layout).Count();

            using (writer.IndentScope("Summary"))
            {
                writer.WriteLine($"Addressable Groups: {layout.Groups.Count}");
                writer.WriteLine($"Explicit Assets Addressed: {ExplicitAssetCount}");
                writer.WriteLine($"Total Bundle: {SceneBundleCount+AssetBundleCount} ({SceneBundleCount} Scene Bundles, {AssetBundleCount} Non-Scene Bundles)");
                writer.WriteLine($"Total Build Size: {GetFriendlySize(TotalBuildSize)}");
                writer.WriteLine($"Total MonoScript Size: {GetFriendlySize(MonoScriptSize)}");
                writer.WriteLine($"Total AssetBundle Object Size: {GetFriendlySize(BundleOverheadSize)}");
            }
        }
        static void PrintFile(TabWriter writer, BuildLayout.File file, int i)
        {
            AttrBuilder attr = new AttrBuilder();

            if (file.PreloadInfoSize > 0)
            {
                attr.AddSize("PreloadInfoSize", (ulong)file.PreloadInfoSize);
            }

            attr.Add("MonoScripts", file.MonoScriptCount.ToString());
            attr.AddSize("MonoScript Size", file.MonoScriptSize);

            using (writer.IndentScope($"File {i} {attr}"))
            {
                foreach (BuildLayout.SubFile sf in file.SubFiles)
                {
                    AttrBuilder attr2 = new AttrBuilder();
                    attr2.AddSize("Size", sf.Size);
                    writer.WriteLine($"{sf.Name} {attr2}");
                }

                using (writer.IndentScope($"Data From Other Assets ({file.OtherAssets.Count})"))
                {
                    foreach (BuildLayout.DataFromOtherAsset otherData in file.OtherAssets)
                    {
                        PrintDataFromOtherAsset(writer, otherData);
                    }
                }
            }
        }
        static void PrintSchema(TabWriter writer, BuildLayout.SchemaData sd)
        {
            string text = sd.Type;

            if (sd.KvpDetails.Count > 0)
            {
                AttrBuilder attr = new AttrBuilder();
                sd.KvpDetails.ForEach(x => attr.Add(x.Item1, x.Item2));
                text += " " + attr;
            }
            writer.WriteLine(text);
        }
        static void PrintDataFromOtherAsset(TabWriter writer, BuildLayout.DataFromOtherAsset asset)
        {
            AttrBuilder attr = new AttrBuilder();

            attr.AddSize("Size", asset.SerializedSize + asset.StreamedSize);
            attr.AddSize("Size from Objects", asset.SerializedSize);
            attr.AddSize("Size from Streamed Data", asset.StreamedSize);
            attr.Add("Object Count", asset.ObjectCount.ToString());
            using (writer.IndentScope($"{asset.AssetPath} {attr}"))
            {
                writer.WriteLine($"Referencing Assets: {string.Join(", ", asset.ReferencingAssets.Select(x => x.AssetPath))}");
            }
        }
Example #6
0
 public void GenerateGroove()
 {
     ;
     for (var i = 0; i < 20; i++)
     {
         var timeSignature = new TimeSignature(Randomizer.ProbabilityOfTrue(0.7) ? 4 : 3, 4);
         var feel          = Randomizer.ProbabilityOfTrue(0.75) ? 4 : 3;
         var groove        = GrooveGenerator.GenerateGroove(new SongInfo(timeSignature, feel));
         var drumStyle     = new DrumStyle(SectionType.Verse);
         drumStyle.Generate(groove);
         Console.WriteLine("{0}, {1} feel", timeSignature, feel);
         Console.WriteLine(TabWriter.AsTab(groove.Feel, drumStyle.Notes, timeSignature.BeatCount));
     }
 }
Example #7
0
        public void GrooveWithFill()
        {
            var       time        = TimeSignature.CommonTime;
            var       feel        = Randomizer.ProbabilityOfTrue(0.6) ? 4 : 3;
            const int measures    = 4;
            var       totalLength = measures * time.BeatCount;
            var       drumStyle   = new DrumStyle(SectionType.None);

            drumStyle.Generate(GrooveGenerator.GenerateGroove(new SongInfo(time, feel)));
            var grooveNotes = Enumerable.Range(0, measures).SelectMany(i => drumStyle.Notes.Select(n => new PercussionNote(n.Start + i * time.BeatCount, n.Percussion, n.Velocity)));
            var fillLength  = Randomizer.ProbabilityOfTrue(0.5) ? 2 : 4;
            var fill        = FillGenerator.GetFill(totalLength - fillLength, fillLength, feel);

            grooveNotes = grooveNotes.Where(n => n.Start < totalLength - fillLength).Union(fill);
            Console.WriteLine(TabWriter.AsTab(feel, grooveNotes.ToList(), measures * time.BeatCount));
        }
        static void PrintArchive(TabWriter writer, BuildLayout.Bundle archive)
        {
            AttrBuilder attr = new AttrBuilder();

            attr.AddSize("Size", archive.FileSize);
            attr.Add("Compression", archive.Compression);

            ulong bundleSize = archive.Files.First(x => x.BundleObjectInfo != null).BundleObjectInfo.Size;

            attr.AddSize("Asset Bundle Object Size", bundleSize);

            using (writer.IndentScope($"Archive {archive.Name} {attr}"))
            {
                if (archive.Dependencies != null)
                {
                    writer.WriteLine("Bundle Dependencies: " + string.Join(", ", archive.Dependencies.Select(x => x.Name)));
                }

                if (archive.ExpandedDependencies != null)
                {
                    writer.WriteLine("Expanded Bundle Dependencies: " + string.Join(", ", archive.ExpandedDependencies.Select(x => x.Name)));
                }

                using (writer.IndentScope($"Explicit Assets"))
                {
                    for (int i = 0; i < archive.Files.Count; i++)
                    {
                        BuildLayout.File f = archive.Files[i];
                        foreach (BuildLayout.ExplicitAsset asset in f.Assets)
                        {
                            PrintAsset(writer, asset, i);
                        }
                    }
                }

                using (writer.IndentScope($"Files:"))
                {
                    for (int i = 0; i < archive.Files.Count; i++)
                    {
                        PrintFile(writer, archive.Files[i], i);
                    }
                }
            }
        }
        static void PrintGroup(TabWriter writer, BuildLayout.Group grp)
        {
            int         explicitAssetCount = grp.Bundles.Sum(x => x.Files.Sum(y => y.Assets.Count));
            AttrBuilder attr = new AttrBuilder();

            attr.Add("Bundles", grp.Bundles.Count.ToString());
            attr.AddSize("Total Size", (ulong)grp.Bundles.Sum(x => (long)x.FileSize));
            attr.Add("Explicit Asset Count", explicitAssetCount.ToString());

            using (writer.IndentScope($"Group {grp.Name} {attr}"))
            {
                using (writer.IndentScope("Schemas"))
                    grp.Schemas.ForEach(x => PrintSchema(writer, x));

                foreach (BuildLayout.Bundle archive in grp.Bundles)
                {
                    PrintArchive(writer, archive);
                }
            }
        }
        static void PrintAsset(TabWriter writer, BuildLayout.ExplicitAsset asset, int fileIndex)
        {
            AttrBuilder attr = new AttrBuilder();

            attr.AddSize("Total Size", asset.SerializedSize + asset.StreamedSize);
            attr.AddSize("Size from Objects", asset.SerializedSize);
            attr.AddSize("Size from Streamed Data", asset.StreamedSize);
            attr.Add("File Index", fileIndex.ToString());
            attr.Add("Addressable Name", asset.AddressableName);
            using (writer.IndentScope($"{asset.AssetPath} {attr}"))
            {
                if (asset.ExternallyReferencedAssets.Count > 0)
                {
                    writer.WriteLine("External References: " + string.Join(", ", asset.ExternallyReferencedAssets.Select(x => x.AssetPath)));
                }
                if (asset.InternalReferencedOtherAssets.Count > 0)
                {
                    writer.WriteLine("Internal References: " + string.Join(", ", asset.InternalReferencedOtherAssets.Select(x => x.AssetPath)));
                }
            }
        }
Example #11
0
        public void WriteScripts_ScriptGuidCorrect()
        {
            //ARRANGE
            var app = new Application();

            app.Tabs = new List <Tab> {
                new Tab
                {
                    Name = "testTab",
                    Guid = "ac4a4f4c-b9af-4c87-8fb4-35ca0f4a9b63"
                }
            };

            //ACT
            var writer = new TabWriter();
            var text   = writer.WriteTabGuids(app);

            //ASSERT
            var properties = ParseTestHelper.GetClassDefinition(text).Members.First();

            Assert.Equal("public const string testTab = \"ac4a4f4c-b9af-4c87-8fb4-35ca0f4a9b63\";", properties.ToString(), ignoreWhiteSpaceDifferences: true);
        }
 public TabWriterIdentScope(TabWriter writer)
 {
     m_Writer = writer;
     writer.Indentation++;
 }
Example #13
0
        public void GetFill()
        {
            const double lengthInBeats = 4.0;

            Console.WriteLine(TabWriter.AsTab(3, FillGenerator.GetFill(0, lengthInBeats, 3).ToList(), (int)lengthInBeats));
        }