Beispiel #1
0
        static int Run(Options opt)
        {
            if (!opt.Validate())
            {
                return(1);
            }

            Setting setting = LoadSetting();

            if (!setting.Validate())
            {
                return(1);
            }
            setting.MergeOptions(opt);

            AviUtlProject?project = Utils.ReadAup(opt.Filename);

            if (project == null)
            {
                return(1);
            }

            ExEditProject?exedit = null;

            for (int i = 0; i < project.FilterProjects.Count; i++)
            {
                if (project.FilterProjects[i] is RawFilterProject filter && filter.Name == "拡張編集")
                {
                    exedit = new ExEditProject(filter);
                    break;
                }
            }

            if (exedit == null)
            {
                Console.Error.WriteLine("拡張編集のデータが見つかりません");
                return(1);
            }

            var usedScripts = ExtractScript(exedit, setting);
            var sorted      = SortScript(usedScripts, setting);

            if (string.IsNullOrEmpty(opt.OutputPath))
            {
                opt.OutputPath = Path.Combine(
                    Path.GetDirectoryName(opt.Filename) ?? string.Empty,
                    $"{Path.GetFileNameWithoutExtension(opt.Filename)}_scripts.csv");
            }
            if (!OutputCsv(opt.OutputPath, sorted, setting))
            {
                return(1);
            }

            return(0);
        }
Beispiel #2
0
        /// <summary>
        /// 拡張編集で使ったスクリプトを抽出する
        /// </summary>
        /// <param name="exedit">拡張編集のデータ</param>
        /// <param name="setting">アプリの設定</param>
        /// <returns></returns>
        static List <ScriptData> ExtractScript(ExEditProject exedit, Setting setting)
        {
            var knownScripts = setting.GetScripts();
            var usedScripts  = new Dictionary <UsedScriptKey, ScriptData>();

            foreach (var obj in exedit.Objects)
            {
                if (obj.Chain)
                {
                    continue;
                }

                foreach (var effect in obj.Effects)
                {
                    ScriptType type       = ScriptType.Other;
                    string     scriptName = "";
                    switch (effect)
                    {
                    case AnimationEffect anm:
                        type       = ScriptType.Anm;
                        scriptName = string.IsNullOrEmpty(anm.Name)
                                ? AnimationEffect.Defaults[anm.ScriptId]
                                : anm.Name;
                        break;

                    case CustomObjectEffect coe:
                        type       = ScriptType.Obj;
                        scriptName = string.IsNullOrEmpty(coe.Name)
                                ? CustomObjectEffect.Defaults[coe.ScriptId]
                                : coe.Name;
                        break;

                    case CameraEffect cam:
                        type       = ScriptType.Cam;
                        scriptName = string.IsNullOrEmpty(cam.Name)
                                ? CameraEffect.Defaults[cam.ScriptId]
                                : cam.Name;
                        break;

                    case SceneChangeEffect scn when scn.Params != null:
                        type       = ScriptType.Scn;
                        scriptName = scn.Name;
                        break;
                    }
                    if (!string.IsNullOrEmpty(scriptName))
                    {
                        AddUsedScript(knownScripts, usedScripts, scriptName, type);
                    }
                    foreach (var trackbar in effect.Trackbars)
                    {
                        if (trackbar.Type == TrackbarType.Script)
                        {
                            scriptName = exedit.TrackbarScripts[trackbar.ScriptIndex].Name;
                            AddUsedScript(knownScripts, usedScripts, scriptName, ScriptType.Tra);
                        }
                    }
                }
            }

            return(usedScripts.Values.ToList());
        }