示例#1
0
        private static void AnalyseSB(Storyboard storyboard)
        {
            if (storyboard != null)
            {
                var mapDir         = Path.GetDirectoryName(storyboard.FilePath);
                var storyboardInfo = new StoryboardInfo(storyboard);
                var t = storyboardInfo.GenerateSpriteData();

                List <IAnalyser> Analysers = new List <IAnalyser>()
                {
                    new ConflictAnalyser(),
                    new ProlongedActivityAnalyser(),
                    new FadeOutAnalyser(),
                    new IllogicalAnalyser(),
                    new RedundancyAnalyser(),
                    new CommandCountAnalyser(),
                };
                var           osbAnalyser = new OsbAnalyser.StoryboardAnalyser(Analysers);
                var           analysedSb  = osbAnalyser.Analyse(storyboard);
                List <string> output      = new List <string>();
                analysedSb.AnalysedElements.ToList().ForEach(e =>
                {
                    string elementInfo = $"Element {e.VisualElement.RelativePath} at line {e.VisualElement.Line} with {e.StoryboardWarnings.Count()} warnings:";
                    string warnings    = String.Join(Environment.NewLine, e.StoryboardWarnings.Where(w => w != null)
                                                     .OrderByDescending(w => w.WarningLevel)
                                                     .Select(w => $"    Warning Level {(int)w.WarningLevel}: {w.GetType().Name}: {w.ToString()}"));
                    if (!string.IsNullOrWhiteSpace(warnings))
                    {
                        output.Add(elementInfo);
                        output.Add(warnings);
                        output.Add(Environment.NewLine);
                    }
                }
                                                             );

                string targetPath = Path.Combine(mapDir, "StoryboardWarnings.txt");

                if (File.Exists(targetPath))
                {
                    File.Delete(targetPath);
                }

                File.AppendAllLines(targetPath, output);

                t.Wait();
                StoryboardInfoDrawer drawer = new StoryboardInfoDrawer(storyboardInfo);
                drawer.DrawSpriteGraph().Save(Path.Combine(mapDir, "spritegraph.jpg"), System.Drawing.Imaging.ImageFormat.Jpeg);
                drawer.DrawCommandGraph().Save(Path.Combine(mapDir, "commandgraph.jpg"), System.Drawing.Imaging.ImageFormat.Jpeg);
            }
            else
            {
                Console.WriteLine("No storyboard found.");
            }
        }