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(); }
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); }
public MVVMNodeViewModel(MVVMNode graphItemObject, DiagramViewModel diagramViewModel) : base(graphItemObject, diagramViewModel) { }
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) { }