private bool Reload()
        {
            if (string.IsNullOrEmpty(Prefs.resourceDir))
            {
                return(false);
            }

            resourceDir = Prefs.resourceDir;
            isLoaded    = false;

            if (!string.IsNullOrEmpty(Prefs.selectionAssetGUID))
            {
                var assetPath = AssetDatabase.GUIDToAssetPath(Prefs.selectionAssetGUID);
                selectAcbAsset = AssetDatabase.LoadMainAssetAtPath(assetPath);

                if (selectAcbAsset != null)
                {
                    if (EditorApplication.isPlayingOrWillChangePlaymode)
                    {
                        // CriWareInitializerの初期化を待つ.
                        Observable.EveryUpdate()
                        .SkipWhile(_ => !CriWareInitializer.IsInitialized())
                        .First()
                        .Subscribe(
                            _ =>
                        {
                            LoadCueInfo(selectAcbAsset);
                            Repaint();
                        })
                        .AddTo(Disposable);
                    }
                    else
                    {
                        CriForceInitializer.Initialize();

                        LoadCueInfo(selectAcbAsset);
                    }
                }
            }

            return(true);
        }
Exemple #2
0
        public override void OnEnable(UnityEngine.Object target)
        {
            if (EditorApplication.isPlayingOrWillChangePlaymode)
            {
                // CriWareInitializerの初期化を待つ.
                Observable.EveryUpdate()
                .SkipWhile(_ => !CriWareInitializer.IsInitialized())
                .First()
                .Subscribe(_ => LoadCueInfo(target))
                .AddTo(lifetimeDisposable.Disposable);
            }
            else
            {
                CriForceInitializer.Initialize();

                LoadCueInfo(target);
            }

            clipboardIcon = EditorGUIUtility.IconContent("Clipboard");
        }
        private void UpdateDragAndDrop()
        {
            var e = Event.current;

            switch (e.type)
            {
            case EventType.DragUpdated:
            case EventType.DragPerform:

                var assetObject = DragAndDrop.objectReferences.FirstOrDefault();

                if (assetObject == null)
                {
                    return;
                }

                var assetPath = AssetDatabase.GetAssetPath(assetObject);
                var validate  = Path.GetExtension(assetPath) == CriAssetDefinition.AcbExtension;

                DragAndDrop.visualMode = validate ? DragAndDropVisualMode.Copy : DragAndDropVisualMode.Rejected;

                if (e.type == EventType.DragPerform)
                {
                    DragAndDrop.AcceptDrag();
                    DragAndDrop.activeControlID = 0;

                    if (validate)
                    {
                        selectAcbAsset = assetObject;

                        CriForceInitializer.Initialize();
                        LoadCueInfo(selectAcbAsset);

                        Prefs.selectionAssetGUID = AssetDatabase.AssetPathToGUID(assetPath);
                    }
                }

                break;
            }
        }
        private static CueInfo[] LoadAcbInfo(string path)
        {
            var result = new List <CueInfo>();

            CriForceInitializer.Initialize();

            var guids = AssetDatabase.FindAssets(string.Empty, new string[] { path });

            var acbAssets = guids
                            .Select(x => AssetDatabase.GUIDToAssetPath(x))
                            .Where(x => Path.GetExtension(x) == CriAssetDefinition.AcbExtension)
                            .Select(x => AssetDatabase.LoadMainAssetAtPath(x))
                            .ToArray();

            foreach (var acbAsset in acbAssets)
            {
                // 指定したACBファイル名(キューシート名)を指定してキュー情報を取得.
                var assetPath = AssetDatabase.GetAssetPath(acbAsset);
                var fullPath  = UnityPathUtility.GetProjectFolderPath() + assetPath;
                var acb       = CriAtomExAcb.LoadAcbFile(null, fullPath, "");

                if (acb != null)
                {
                    var cueInfos = acb.GetCueInfoList().ToArray();

                    foreach (var cueInfo in cueInfos)
                    {
                        var acbPath = assetPath.Replace(path + PathUtility.PathSeparator, string.Empty);

                        acbPath = PathUtility.GetPathWithoutExtension(acbPath);

                        result.Add(new CueInfo(cueInfo.name, acbPath, cueInfo.userData));
                    }

                    acb.Dispose();
                }
            }

            return(result.ToArray());
        }