Esempio n. 1
0
        public void Perform(MVVMNode node)
        {
            if (!EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo())
            {
                return;
            }
            if (!EditorUtility.DisplayDialog("Warning!", "Before scaffolding the core, make sure you saved and compiled!",
                                             "Yes, I saved and compiled!",
                                             "Cancel"))
            {
                return;
            }

            var paths      = InvertApplication.Container.Resolve <DatabaseService>().CurrentConfiguration.CodeOutputPath + "/";
            var scenesPath = System.IO.Path.Combine(paths, "Scenes");

            var sceneName         = node.Graph.Namespace + "KernelScene.unity";
            var sceneNameWithPath = System.IO.Path.Combine(scenesPath, sceneName);

            var          prefabName         = node.Graph.Namespace + "Kernel.prefab";
            var          prefabNameWithPath = Path2.Combine(paths, prefabName);
            var          relativeScenesPath = System.IO.Path.Combine(paths, "Scenes");
            var          relativeScenePath  = System.IO.Path.Combine(relativeScenesPath + "/", sceneName);
            uFrameKernel uFrameMVVMKernel   = null;

            if (File.Exists(sceneNameWithPath))
            {
                var gameObject = (GameObject)AssetDatabase.LoadAssetAtPath(prefabNameWithPath, typeof(GameObject));
                uFrameMVVMKernel = gameObject.GetComponent <uFrameKernel>();
                SyncKernel(node, uFrameMVVMKernel.gameObject);
            }
            else
            {
                var eScene = EditorSceneManager.NewScene(NewSceneSetup.EmptyScene);
                if (!Directory.Exists(scenesPath))
                {
                    Directory.CreateDirectory(scenesPath);
                }
                uFrameMVVMKernel = FindComponentInScene <uFrameKernel>() ?? new GameObject("Kernel").AddComponent <uFrameKernel>();
                var services = SyncKernel(node, uFrameMVVMKernel.gameObject);

                services.gameObject.AddComponent <ViewService>();
                services.gameObject.AddComponent <SceneManagementService>();

                PrefabUtility.CreatePrefab(prefabNameWithPath, uFrameMVVMKernel.gameObject, ReplacePrefabOptions.ConnectToPrefab);
                EditorSceneManager.SaveScene(eScene, relativeScenePath);
            }

            if (!UnityEditor.EditorBuildSettings.scenes.Any(s => s.path.EndsWith(node.Graph.SystemPath + "KernelScene.unity")))
            {
                var list = EditorBuildSettings.scenes.ToList();
                list.Add(new EditorBuildSettingsScene(relativeScenePath, true));
                EditorBuildSettings.scenes = list.ToArray();
            }
            AssetDatabase.Refresh();
        }
Esempio n. 2
0
        private static Transform SyncKernel(MVVMNode node, GameObject uFrameMVVMKernel)
        {
            var servicesContainer = uFrameMVVMKernel.transform.FindChild("Services");

            if (servicesContainer == null)
            {
                servicesContainer = new GameObject("Services").transform;
                servicesContainer.SetParent(uFrameMVVMKernel.transform);
            }

            var systemLoadersContainer = uFrameMVVMKernel.transform.FindChild("SystemLoaders");

            if (systemLoadersContainer == null)
            {
                systemLoadersContainer = new GameObject("SystemLoaders").transform;
                systemLoadersContainer.SetParent(uFrameMVVMKernel.transform);
            }

            var sceneLoaderContainer = uFrameMVVMKernel.transform.FindChild("SceneLoaders");

            if (sceneLoaderContainer == null)
            {
                sceneLoaderContainer = new GameObject("SceneLoaders").transform;
                sceneLoaderContainer.SetParent(uFrameMVVMKernel.transform);
            }

            //var servicesNodes = InvertApplication.Container.Resolve<WorkspaceService>().CurrentWorkspace.Graphs
            //                                               .SelectMany(g => g.AllGraphItems.OfType<ServiceNode>());
            var servicesNodes = InvertApplication.Container.Resolve <WorkspaceService>()
                                .Workspaces.SelectMany(w => w.Graphs)
                                .SelectMany(g => g.AllGraphItems.OfType <ServiceNode>());

            foreach (var serviceNode in servicesNodes)
            {
                //var type = InvertApplication.FindType(serviceNode.FullName);
                var type = InvertApplication.FindRuntimeType(serviceNode.FullName);
                if (type != null && servicesContainer.GetComponent(type) == null)
                {
                    servicesContainer.gameObject.AddComponent(type);
                }
            }

            //var systemNodes = InvertApplication.Container.Resolve<WorkspaceService>().CurrentWorkspace.Graphs
            //                                   .SelectMany(g => g.AllGraphItems.OfType<SubSystemNode>());
            var systemNodes = InvertApplication.Container.Resolve <WorkspaceService>()
                              .Workspaces.SelectMany(w => w.Graphs)
                              .SelectMany(g => g.AllGraphItems.OfType <SubSystemNode>());

            foreach (var systemNode in systemNodes)
            {
                //var type = InvertApplication.FindType(string.Format("{0}Loader", systemNode.FullName));
                var type = InvertApplication.FindRuntimeType(string.Format("{0}Loader", systemNode.FullName));
                if (type != null && systemLoadersContainer.GetComponent(type) == null)
                {
                    systemLoadersContainer.gameObject.AddComponent(type);
                }
            }

            //var sceneNodes = node.Graph.AllGraphItems.OfType<SceneTypeNode>();
            var sceneNodes = InvertApplication.Container.Resolve <WorkspaceService>()
                             .Workspaces.SelectMany(w => w.Graphs)
                             .SelectMany(g => g.AllGraphItems.OfType <SceneTypeNode>());

            foreach (var sceneNode in sceneNodes)
            {
                //var type = InvertApplication.FindType(string.Format("{0}Loader", sceneNode.FullName));
                var type = InvertApplication.FindRuntimeType(string.Format("{0}Loader", sceneNode.FullName));
                if (type != null && sceneLoaderContainer.GetComponent(type) == null)
                {
                    sceneLoaderContainer.gameObject.AddComponent(type);
                }
            }


            EditorUtility.SetDirty(uFrameMVVMKernel);
            return(servicesContainer);
        }
Esempio n. 3
0
 public MVVMNodeViewModel(MVVMNode graphItemObject, DiagramViewModel diagramViewModel) :
     base(graphItemObject, diagramViewModel)
 {
 }
Esempio n. 4
0
 public MVVMNodeViewModel(MVVMNode graphItemObject, Invert.Core.GraphDesigner.DiagramViewModel diagramViewModel) :
     base(graphItemObject, diagramViewModel)
 {
 }
 public MVVMNodeViewModelBase(MVVMNode graphItemObject, uFrame.Editor.GraphUI.ViewModels.DiagramViewModel diagramViewModel) :
     base(graphItemObject, diagramViewModel)
 {
 }