public void GetSingle_France_GetsCompanyATax()
        {
            //Arange
            var ioc = new IOC();
            ioc.Register<ICalculateTax>("CompanyATax", "UK");
            ioc.Register<ICalculateTax>("CompanyATax", "France");
            ioc.Register<ICalculateTax>("CompanyATax", "USA");

            //Act
            var item = ioc.GetSingleByCountry<ICalculateTax>("France");

            //Asert
            Assert.IsInstanceOfType(item, typeof(CompanyATax));
        }
示例#2
0
        private static void CreateAssetLibraryForScene(Scene scene, int index, AssetLibraryAsset asset, AssetFolderInfo folder, HashSet <UnityObject> hs)
        {
            TypeMap           typeMap    = new TypeMap();
            AssetDB           assetDB    = new AssetDB();
            RuntimeShaderUtil shaderUtil = new RuntimeShaderUtil();

            IOC.Register <ITypeMap>(typeMap);
            IOC.Register <IAssetDB>(assetDB);
            IOC.Register <IRuntimeShaderUtil>(shaderUtil);

            PersistentRuntimeScene rtScene = new PersistentRuntimeScene();

            GetDepsFromContext ctx = new GetDepsFromContext();

            rtScene.GetDepsFrom(scene, ctx);

            Queue <UnityObject> depsQueue  = new Queue <UnityObject>(ctx.Dependencies.OfType <UnityObject>());
            GetDepsFromContext  getDepsCtx = new GetDepsFromContext();

            while (depsQueue.Count > 0)
            {
                UnityObject uo = depsQueue.Dequeue();
                if (!uo)
                {
                    continue;
                }

                Type persistentType = typeMap.ToPersistentType(uo.GetType());
                if (persistentType != null)
                {
                    getDepsCtx.Clear();

                    try
                    {
                        PersistentObject persistentObject = (PersistentObject)Activator.CreateInstance(persistentType);
                        //persistentObject.ReadFrom(uo);
                        persistentObject.GetDepsFrom(uo, getDepsCtx);
                    }
                    catch (Exception e)
                    {
                        Debug.LogError(e);
                    }

                    foreach (UnityObject dep in getDepsCtx.Dependencies)
                    {
                        if (!ctx.Dependencies.Contains(dep))
                        {
                            ctx.Dependencies.Add(dep);
                            depsQueue.Enqueue(dep);
                        }
                    }
                }
            }

            IOC.Unregister <IRuntimeShaderUtil>(shaderUtil);
            IOC.Unregister <ITypeMap>(typeMap);
            IOC.Unregister <IAssetDB>(assetDB);

            CreateAssetLibrary(ctx.Dependencies.ToArray(), "Scenes/" + scene.name, "SceneAssetLibrary", index, asset, folder, hs);
        }
示例#3
0
        public void Resolve_ReturnsCorrectInstance()
        {
            IOC.Register <IFoo>(() => { return(new FooImpl()); });
            var theFoo = IOC.Resolve <IFoo>();

            Assert.IsTrue(theFoo is FooImpl);
        }
示例#4
0
        public static void Main(string[] args)
        {
            Core.CoreName = "PointCloud Core";
            //1.初始化核心
            Core core = Core.Instance;

            //2.使用注册
            core.Use((IOC) =>
            {
                IOC.Register <IRepository <EntityDemoIdentity, EntityDemo>, RepositoryDemo>(new object[] { 99999 }, Life.Singleton);
                IOC.Register <IEventStore, EventStoreDemo>(null, Life.Singleton, "Default", "EventStoreTest");
                IOC.Register <ApplicationService, ApplicationServiceDemo>();
                IOC.Register <IRPCInvoke, RPCInvoke>(new object[] { "127.0.0.1", 9001 }, Life.Scope, "RPC");
                IOC.Register <IRPCProxy, RPCProxy>(new object[] { "127.0.0.1", 9001 }, Life.Scope, "RPC");
            });
            //3.使用AMQP
            core.UseAMQP(() =>
            {
                RabbitModule module = new RabbitModule("MSI-SU", "suhuyuan", "localhost");
                module.Bind(".NETTest", ".NETTest", "1");
                return(module);
            });


            CreateHostBuilder(args).Build().Run();
        }
        public void GetSingle_UK_GetsCompanyBUKTax_Value()
        {
            //Arange
            var ioc = new IOC();
            ioc.Register<ICalculateTax>("CompanyBUKTax", "UK");
            ioc.Register<ICalculateTax>("FranceTax", "France");
            ioc.Register<ICalculateTax>("USATax", "USA");

            //Act
            var item = ioc.GetSingleByCountry<ICalculateTax>("UK");
            item.Pay = 100;
            var value = item.CalculateTax();

            //Asert
            Assert.AreEqual(value, 90);
        }
        protected override void Awake()
        {
            base.Awake();

            IOC.Register <IRTEState>(this);
            m_resourcePreview = gameObject.AddComponent <ResourcePreviewUtility>();
            IOC.Register <IResourcePreviewUtility>(m_resourcePreview);
        }
示例#7
0
 // This method gets called by the runtime. Use this method to add services to the container.
 public void ConfigureServices(IServiceCollection services)
 {
     services.AddDbContext <GrandeHotelCustomContext>(options => options.UseSqlServer(Configuration.GetConnectionString("grande_hotel")));
     services.AddControllers();
     services.AddSpaStaticFiles(configuration => configuration.RootPath = "ClientApp/dist");
     RegisterJwt(services);
     IOC.Register(services, Configuration, _webHostEnvironment.IsDevelopment());
 }
示例#8
0
        public void ResolveImports_ResolvesPrivateMembers()
        {
            IOC.Register <IFoo>(() => { return(new FooImpl()); });
            IOC.Register <IPrivateMemberImport>(() => { return(new PrivateMemberImportImpl()); });

            var instance = IOC.Resolve <IPrivateMemberImport>();

            Assert.IsNotNull(instance.GetMyFoo());
        }
示例#9
0
 public void Setup()
 {
     IOC.Reset();
     lua       = new Lua();
     apiBridge = Mock.Interface <IApiBridge>();
     IOC.Register <IApiBridge>(() => apiBridge);
     IOC.Register <Lua>(() => lua);
     IOC.Register <ApiAdapter>(() => new ApiAdapter());
 }
        private void Awake()
        {
            m_editor = IOC.Resolve <IRTE>();
            IOC.Register <ICustomOutlineRenderersCache>("CustomOutlineRenderersCache", this);

            TryToAddRenderers(m_editor.Selection);
            m_editor.Selection.SelectionChanged += OnRuntimeEditorSelectionChanged;
            m_editor.Object.Enabled             += OnObjectEnabled;
            m_editor.Object.Disabled            += OnObjectDisabled;
        }
示例#11
0
        public void ResolveImportsForObject_ResolvesMembers()
        {
            IOC.Register <IFoo>(() => { return(new FooImpl()); });

            var tmp = new PrivateMemberImportImpl();

            IOC.ResolveImports(tmp);

            Assert.IsNotNull(tmp.GetMyFoo());
        }
示例#12
0
        protected virtual void AwakeOverride()
        {
            m_rte = RTE;
            IOC.Register <IRTE>(m_rte);
            IOC.Register(m_rte);


            m_resourcePreview = ResourcePreview;
            m_rteAppearance   = RTEAppearance;
        }
示例#13
0
 public void Init()
 {
     IOC.Reset();
     IOC.Register <ITestEnvironment>(() => {
         ted = new TestEnvDummy();
         return(ted);
     });
     IOC.Register <ITestContext>(() => new MutagenRuntime.TestContext());
     Api.Init();
 }
示例#14
0
        public void ResolveImports_ResolvesRecursively()
        {
            IOC.Register <RecImportB>(() => { return(new RecImportB()); });
            IOC.Register <RecImportA>(() => { return(new RecImportA()); });
            IOC.Register <IRecursiveTest>(() => { return(new RecImplA()); });

            RecImportB theB = IOC.Resolve <RecImportB>();

            Assert.IsNotNull(theB.impA);
            Assert.IsNotNull(theB.impA.tstA);
        }
示例#15
0
 public void Setup()
 {
     IOC.Reset();
     lua       = new Lua();
     luaEnv    = lua.CreateEnvironment();
     apiBridge = Mock.Interface <IApiBridge>();
     IOC.Register <IApiBridge>(() => apiBridge);
     IOC.Register <ApiAdapter>(() => new ApiAdapter());
     api        = IOC.Resolve <ApiAdapter>();
     api.LuaEnv = luaEnv;
 }
示例#16
0
        public void GetSingle()
        {
            //Arange
            var ioc = new IOC();
            ioc.Register<ICalculateTax>("CompanyATax");

            //Act
            var calculateTax = ioc.GetSingleByClassName<ICalculateTax>();

            //Asert
            Assert.IsInstanceOfType(calculateTax, typeof(CompanyATax));
        }
示例#17
0
        public void TestMethod2()
        {
            //Arange
            var ioc = new IOC();
            ioc.Register<ICalculateTax>("CompanyATax");

            //Act
            var calculateTax = ioc.GetList<ICalculateTax>("CompanyATax").ToList();

            //Asert
            Assert.IsInstanceOfType(calculateTax.First(), typeof(CompanyATax));
        }
示例#18
0
        public void TestMethod1()
        {
            //Arange
            var ioc = new IOC();

            //Act
            ioc.Register<ICalculateTax>("CompanyATax");

            //Asert
            Assert.AreEqual(ioc.Items.Count, 1);

        }
示例#19
0
        public void Import(string SharePointSiteUrl, string SharePointUserName, string SharePointPassword, string ImportConfigPath, string TemplateRootFolder)
        {
            IOC.Register();
            container = IOC.GetContainer();

            IJsonConverter converter = container.GetInstance <IJsonConverter>();
            var            mapped    = converter.GetConfiguration(ImportConfigPath);

            IDeployer deployer = container.GetInstance <IDeployer>();

            deployer.Deploy(mapped, TemplateRootFolder, SharePointSiteUrl, SharePointUserName, SharePointPassword);
        }
        private void Start()
        {
            m_cache = GetComponentInChildren <IRenderersCache>();
            IOC.Register("SelectedRenderers", m_cache);

            m_editor = IOC.Resolve <IRTE>();

            TryToAddRenderers(m_editor.Selection);
            m_editor.Selection.SelectionChanged += OnRuntimeEditorSelectionChanged;

            IOC.RegisterFallback <IOutlineManager>(this);
        }
        protected override void OnEditorExist()
        {
            if (RenderPipelineInfo.Type != RPType.URP)
            {
                Destroy(this);
                return;
            }

            base.OnEditorExist();
            m_selectionPickerCache = gameObject.AddComponent <RenderersCache>();
            IOC.Register <IRenderersCache>("ProBuilder.SelectionPickerCache", m_selectionPickerCache);
            PBSelectionPicker.Renderer = new PBSelectionPickerRendererURP(m_selectionPickerCache);
        }
示例#22
0
 private static void RegisterExpDeps()
 {
     IOC.RegisterFallback(() => Instance.m_gameMachine);
     IOC.RegisterFallback(() => Instance.m_appTheme);
     IOC.RegisterFallback(() => Instance.m_globalUI);
     IOC.RegisterFallback(() => Instance.m_audio);
     if (IOC.Resolve <IMenuSelection>() == null)
     {
         IOC.Register <IMenuSelection>(new MenuSelection());
     }
     if (IOC.Resolve <IPlayer>() == null)
     {
         IOC.Register <IPlayer>(new Player());
     }
 }
示例#23
0
        protected override void Awake()
        {
            base.Awake();

            IOC.Register <IRTE>(this);
            IOC.RegisterFallback(this);

            ExposeToEditor[] editorObjects = ExposeToEditor.FindAll(this, ExposeToEditorObjectType.Undefined, false).Select(go => go.GetComponent <ExposeToEditor>()).ToArray();
            for (int i = 0; i < editorObjects.Length; ++i)
            {
                editorObjects[i].ObjectType = ExposeToEditorObjectType.EditorMode;
            }

            Tools.SnappingMode          = SnappingMode.BoundingBox;
            IsOpened                    = !IsInPlayMode;
            PlaymodeStateChanged       += OnPlaymodeStateChanged;
            IsOpenedChanged            += OnIsOpenedChanged;
            Selection.SelectionChanged += OnRuntimeSelectionChanged;
            Tools.ToolChanged          += OnRuntimeToolChanged;
            Tools.PivotRotationChanged += OnPivotRotationChanged;
            Undo.UndoCompleted         += OnUndoCompleted;
            Undo.RedoCompleted         += OnRedoCompleted;
            Undo.StateChanged          += OnUndoRedoStateChanged;

            TransformPanel.SetActive(Selection.activeTransform != null);
            if (Prefabs != null && PrefabsPanel != null && PrefabPresenter != null)
            {
                Prefabs = Prefabs.Where(p => p != null).ToArray();
                for (int i = 0; i < Prefabs.Length; ++i)
                {
                    GameObject presenter = Instantiate(PrefabPresenter);
                    presenter.transform.SetParent(PrefabsPanel.transform);
                    presenter.transform.position   = Vector3.zero;
                    presenter.transform.localScale = Vector3.one;

                    InstantiatePrefab instantiatePrefab = presenter.GetComponentInChildren <InstantiatePrefab>();
                    if (instantiatePrefab != null)
                    {
                        instantiatePrefab.Prefab = Prefabs[i];
                    }
                    TakeSnapshot takeSnapshot = presenter.GetComponentInChildren <TakeSnapshot>();
                    if (takeSnapshot != null)
                    {
                        takeSnapshot.TargetPrefab = Prefabs[i];
                    }
                }
            }
        }
示例#24
0
        protected virtual void AwakeOverride()
        {
            m_rte = RTE;
            IOC.Register <IRTE>(m_rte);
            IOC.Register(m_rte);

            m_resourcePreview         = ResourcePreview;
            m_rteAppearance           = RTEAppearance;
            m_windowManager           = WindowManager;
            m_console                 = RuntimeConsole;
            m_gameObjectCmd           = GameObjectCmd;
            m_editCmd                 = EditCmd;
            m_contextMenu             = ContextMenu;
            m_runtimeHandlesComponent = RuntimeHandlesComponent;
            m_editorsMap              = EditorsMap;
        }
示例#25
0
        public IocLocator(IOC container)
        {
            this.container = container;
            //var mapper = AutoMapperConfiguration.ConfigureAutoMapper().CreateMapper();
            ////var mapper = new Mapper(AutoMapperConfiguration.ConfigureAutoMapper());
            //container.RegisterSingleton<MapperConfiguration>();
            //container.Register<IMapper, Mapper>();
            container.RegisterInstance <IMapper>(new Mapper(AutoMapperConfiguration.ConfigureAutoMapper()));

            //container.Register(AutoMapperConfiguration.ConfigureAutoMapper().CreateMapper()>
            //container.RegisterSingleton<MapperConfiguration>(config);
            //container.Register<IMapper>(AutoMapperConfiguration.ConfigureAutoMapper().CreateMapper().);
            container.Register <IUnitOfWork, UnitOfWork>();
            container.Register <BalanceDietAppContext>();
            container.Register <IRecipeLogic, RecipesLogic>();
            container.Register <INutritionCalculator, NutririonCalculator>();
            container.Register <IRecipeCategoryLogic, RecipeCategoryLogic>();
            container.Register <IGenericRepository <Recipe>, Repository <Recipe> >();
            container.Register <IGenericRepository <Ingredient>, Repository <Ingredient> >();
            container.Register <IGenericRepository <Nutrition>, Repository <Nutrition> >();
            container.Register <IGenericRepository <Product>, Repository <Product> >();
        }
示例#26
0
 public ViewModelLocator()
 {
     container    = new IOC();
     logicLocator = new IocLocator(container);
     container.Register <RecipesListViewModel>();
     container.Register <TotalNutritionViewModel>();
     container.Register <CurrentCategoryRecipeViewModel>();
     container.Register <CategoriesViewModel>();
     container.Register <ItemViewModel>();
     //var node = container.Resolve<RecipesListViewModel>();
     container.Register <MainViewModel>();
 }
示例#27
0
        public void AddFacette_AddsFacetteToCurrentTestContext()
        {
            var theContext = A.Fake <ITestContext>();

            IOC.Reset();
            IOC.Register <ITestEnvironment>(() => fakeTev);
            IOC.Register <ITestContext>(() => theContext);

            var n = typeof(TestyHarness);

            Api.CreateFacette("TestFac", new List <object>()
            {
                1, 2, 3
            });
            Api.BeginTestCase(n.AssemblyQualifiedName, null);
            Api.AddFacette("TestFac", 1, 2);

            A.CallTo(() => theContext.AddFacette("TestFac", 1, 2)).MustHaveHappened();
        }
示例#28
0
        private void Start()
        {
            IOC.Register("HighlightRenderers", m_cache = gameObject.AddComponent <RenderersCache>());

            m_editor = IOC.Resolve <IRTE>();

            m_activeWindow = m_editor.ActiveWindow;
            if (m_activeWindow != null && m_editor.ActiveWindow.WindowType == RuntimeWindowType.Scene)
            {
                m_selectionComponent = m_activeWindow.IOCContainer.Resolve <IRuntimeSelectionComponent>();
            }

            m_editor.Object.Enabled        += OnObjectEnabled;
            m_editor.Object.Disabled       += OnObjectDisabled;
            m_editor.Object.ComponentAdded += OnComponentAdded;

            m_editor.Selection.SelectionChanged += OnSelectionChanged;
            m_editor.ActiveWindowChanged        += OnActiveWindowChanged;
        }
示例#29
0
        private static void CreateAssetLibraryForScene(Scene scene, int index, AssetLibraryAsset asset, AssetFolderInfo folder, HashSet <UnityObject> hs)
        {
            TypeMap typeMap = new TypeMap();
            AssetDB assetDB = new AssetDB();

            IOC.Register <ITypeMap>(typeMap);
            IOC.Register <IAssetDB>(assetDB);

            PersistentRuntimeScene rtScene = new PersistentRuntimeScene();

            GetDepsFromContext ctx = new GetDepsFromContext();

            rtScene.GetDepsFrom(scene, ctx);

            IOC.Unregister <ITypeMap>(typeMap);
            IOC.Unregister <IAssetDB>(assetDB);


            CreateAssetLibrary(ctx.Dependencies.ToArray(), "Scenes/" + scene.name, "SceneAssetLibrary", index, asset, folder, hs);
        }
示例#30
0
        static int Main(string[] args)
        {
            // Setup IOC Container
            IOC.Register <IApiBridge>(() => new DefaultApiBridge());
            IOC.Register <ITestEnvironment>(() => new TestEnvironment());
            IOC.Register <ITestContext>(() => new TestContext());
            IOC.Register <Lua>(() => new Lua());
            IOC.Register <ApiAdapter>(() => new ApiAdapter());

            Write("Mutagen Lua Runner");
            Write("Version " + Assembly.GetExecutingAssembly().GetName().Version);

            foreach (var str in args)
            {
                ScriptRunner runner = new ScriptRunner();
                runner.Load(new System.IO.FileStream(str, FileMode.Open));
                var theResult = runner.Run();
            }

            return(-1);
        }
示例#31
0
        public void Run_FullTestCase()
        {
            IOC.Reset();
            lua       = new Lua();
            apiBridge = new DefaultApiBridge();
            IOC.Register <IApiBridge>(() => apiBridge);
            IOC.Register <ITestEnvironment>(() => new TestEnvironment());
            IOC.Register <ITestContext>(() => new MutagenRuntime.TestContext());
            IOC.Register <Lua>(() => lua);
            IOC.Register <ApiAdapter>(() => new ApiAdapter());


            var tc   = NUnit.Framework.TestContext.CurrentContext.TestDirectory;
            var strm = System.IO.File.OpenRead(tc + "./LuaScripts/FullTestCase.lua");

            runner = new ScriptRunner();
            IOC.ResolveImports(runner);

            // Black Magic: NUnit sets the working dir to a crappy place,
            // so we're shit out of luck, if we try to access a file relative to
            // our working dir. To get around this problem we magic the correct
            // path here and reset the working directory to reflect this:
            var dir = AppDomain.CurrentDomain.BaseDirectory;

            Environment.CurrentDirectory = dir;

            runner.Load(strm);

            runner.Run();

            var results = Api.GetResults();

            Assert.AreEqual(6, results.Count);
            var harness = Api.Testharness() as SimpleHarness;

            Assert.AreEqual("fnord", harness.lastPrint);
        }
示例#32
0
        public static void ConvertToAsset()
        {
            const string ext = ";*.rtscene;*.rtprefab;*.rtmat;*.rttex;*.rtmesh;";

            if (Application.isPlaying)
            {
                EditorUtility.DisplayDialog("Unable to load runtime asset", "Unable to load runtime asset in play mode", "OK");
                return;
            }

            string path = EditorUtility.OpenFilePanel("Select Runtime Asset", Application.persistentDataPath, ext);

            if (path.Length != 0)
            {
                GameObject         projGo = new GameObject();
                IAssetBundleLoader bundleLoader;
#if USE_GOOGLE_DRIVE
                if (File.Exists(Application.streamingAssetsPath + "/credentials.json"))
                {
                    bundleLoader = new GoogleDriveAssetBundleLoader();
                }
                else
#endif
                {
                    bundleLoader = new AssetBundleLoader();
                }

                IOC.Register(bundleLoader);

                ITypeMap typeMap = new TypeMap <long>();
                IOC.Register(typeMap);

                IUnityObjectFactory objFactory = new UnityObjectFactory();
                IOC.Register(objFactory);

                ISerializer serializer = new ProtobufSerializer();
                IOC.Register(serializer);

                IStorage <long> storage = new FileSystemStorage <long>();
                IOC.Register(storage);

                IRuntimeShaderUtil shaderUtil = new RuntimeShaderUtil();
                IOC.Register(shaderUtil);

                IMaterialUtil materialUtil = new StandardMaterialUtils();
                IOC.Register(materialUtil);

                IAssetDB assetDB = new AssetDB();
                IOC.Register <IIDMap>(assetDB);
                IOC.Register(assetDB);

                Project project = projGo.AddComponent <Project>();
                project.Awake_Internal();

                DirectoryInfo root     = new DirectoryInfo(Application.persistentDataPath);
                string        rootPath = root.ToString().ToLower();

                DirectoryInfo parent = Directory.GetParent(path);
                while (true)
                {
                    if (parent == null)
                    {
                        EditorUtility.DisplayDialog("Unable to load runtime asset", "Project.rtmeta was not found", "OK");
                        UnityObject.DestroyImmediate(projGo);
                        IOC.ClearAll();
                        return;
                    }

                    string projectPath = parent.FullName.ToLower();
                    if (rootPath == projectPath)
                    {
                        EditorUtility.DisplayDialog("Unable to load runtime asset", "Project.rtmeta was not found", "OK");
                        UnityObject.DestroyImmediate(projGo);
                        IOC.ClearAll();
                        return;
                    }

                    string projectFile = Path.Combine(projectPath, "Project.rtmeta");
                    if (File.Exists(projectFile))
                    {
                        storage.RootPath = Path.GetDirectoryName(projectPath).Replace('\\', '/') + "/";

                        string projectName = Path.GetFileNameWithoutExtension(projectPath);
                        project.OpenProject(projectName, (error, result) =>
                        {
                            if (error.HasError)
                            {
                                EditorUtility.DisplayDialog("Unable to load runtime asset", "Project " + projectName + " can not be loaded", "OK");
                                UnityObject.DestroyImmediate(projGo);
                                IOC.ClearAll();
                                return;
                            }

                            string relativePath = GetRelativePath(path, projectPath);
                            relativePath        = relativePath.Replace('\\', '/');
                            AssetItem assetItem = (AssetItem)project.Root.Get(relativePath);

                            project.Load(new[] { assetItem }, (loadError, loadedObjects) =>
                            {
                                if (loadError.HasError)
                                {
                                    EditorUtility.DisplayDialog("Unable to load runtime asset", loadError.ToString(), "OK");
                                }
                                else
                                {
                                    if (!project.IsScene(assetItem))
                                    {
                                        foreach (UnityObject asset in assetDB.GetDynamicResources())
                                        {
                                            asset.hideFlags = HideFlags.None;
                                        }

                                        UnityObject loadedObj = loadedObjects[0];
                                        if (loadedObj == null)
                                        {
                                            EditorUtility.DisplayDialog("Unable to load runtime asset", assetItem.Name, "OK");
                                        }
                                        else
                                        {
                                            GameObject loadedGo = loadedObj as GameObject;
                                            if (loadedGo != null)
                                            {
                                                string savePath = EditorUtility.SaveFilePanelInProject("Save " + loadedGo.name, loadedGo.name, "prefab", "Save prefab");

                                                if (!string.IsNullOrWhiteSpace(savePath))
                                                {
                                                    PersistentRuntimePrefab <long> runtimePrefab = new PersistentRuntimePrefab <long>();

                                                    GetDepsFromContext ctx = new GetDepsFromContext();
                                                    runtimePrefab.GetDepsFrom(loadedGo, ctx);

                                                    SaveDependencies(ctx, typeMap, assetDB, Path.GetDirectoryName(savePath));
                                                    PrefabUtility.SaveAsPrefabAsset(loadedGo, savePath);
                                                }
                                            }
                                            else
                                            {
                                                string savePath = EditorUtility.SaveFilePanelInProject("Save " + loadedObj.name, loadedObj.name, "asset", "Save asset");
                                                if (!string.IsNullOrWhiteSpace(savePath))
                                                {
                                                    AssetDatabase.CreateAsset(loadedObj, savePath);
                                                }
                                            }
                                        }
                                    }
                                }

                                IOC.ClearAll();
                                UnityObject.DestroyImmediate(projGo);
                            });
                        });

                        return;
                    }

                    parent = parent.Parent;
                }
            }
        }
示例#33
0
        public static void OpenScene()
        {
            if (Application.isPlaying)
            {
                EditorUtility.DisplayDialog("Unable to open scene", "Unable to open scene in play mode", "OK");
                return;
            }

            string path = EditorUtility.OpenFilePanel("Open Scene", Application.persistentDataPath, "rtscene");

            if (path.Length != 0)
            {
                GameObject         projGo = new GameObject();
                IAssetBundleLoader bundleLoader;
                if (File.Exists(Application.streamingAssetsPath + "/credentials.json"))
                {
                    bundleLoader = new GoogleDriveAssetBundleLoader();
                }
                else
                {
                    bundleLoader = new AssetBundleLoader();
                }

                IOC.Register(bundleLoader);

                ITypeMap typeMap = new TypeMap();
                IOC.Register(typeMap);

                IUnityObjectFactory objFactory = new UnityObjectFactory();
                IOC.Register(objFactory);

                ISerializer serializer = new ProtobufSerializer();
                IOC.Register(serializer);

                IStorage storage = new FileSystemStorage();
                IOC.Register(storage);

                IRuntimeShaderUtil shaderUtil = new RuntimeShaderUtil();
                IOC.Register(shaderUtil);

                IAssetDB assetDB = new AssetDB();
                IOC.Register <IIDMap>(assetDB);
                IOC.Register(assetDB);

                Project project = projGo.AddComponent <Project>();
                project.Awake_Internal();

                DirectoryInfo root     = new DirectoryInfo(Application.persistentDataPath);
                string        rootPath = root.ToString().ToLower();

                DirectoryInfo parent = Directory.GetParent(path);
                while (true)
                {
                    if (parent == null)
                    {
                        EditorUtility.DisplayDialog("Unable to open scene", "Project.rtmeta was not found", "OK");
                        UnityObject.DestroyImmediate(projGo);
                        IOC.ClearAll();
                        return;
                    }

                    string projectPath = parent.FullName.ToLower();
                    if (rootPath == projectPath)
                    {
                        EditorUtility.DisplayDialog("Unable to open scene", "Project.rtmeta was not found", "OK");
                        UnityObject.DestroyImmediate(projGo);
                        IOC.ClearAll();
                        return;
                    }

                    string projectFile = Path.Combine(projectPath, "Project.rtmeta");
                    if (File.Exists(projectFile))
                    {
                        string projectFileName = Path.GetFileNameWithoutExtension(projectPath);

                        project.OpenProject(projectFileName, (error, result) =>
                        {
                            if (error.HasError)
                            {
                                EditorUtility.DisplayDialog("Unable to open scene", "Project " + projectFileName + " can not be loaded", "OK");
                                UnityObject.DestroyImmediate(projGo);
                                IOC.ClearAll();
                                return;
                            }

                            string relativePath = GetRelativePath(path, projectPath);
                            relativePath        = relativePath.Replace('\\', '/');
                            AssetItem scene     = (AssetItem)project.Root.Get(relativePath);

                            project.Load(new[] { scene }, (loadError, loadedObjects) =>
                            {
                                IOC.ClearAll();
                                if (loadError.HasError)
                                {
                                    EditorUtility.DisplayDialog("Unable to open scene", loadError.ToString(), "OK");
                                    UnityObject.DestroyImmediate(projGo);
                                    return;
                                }
                            });
                        });

                        return;
                    }

                    parent = parent.Parent;
                }
            }
        }
示例#34
0
 private void OnEnable()
 {
     IOC.Register("TerrainLayerEditor", this);
 }
示例#35
0
        private static void CreateAssetLibraryFromScene(Scene scene, int index, AssetLibraryAsset asset, AssetFolderInfo folder, HashSet <UnityObject> hs)
        {
            TypeMap typeMap = new TypeMap();
            AssetDB assetDB = new AssetDB();

            IOC.Register <ITypeMap>(typeMap);
            IOC.Register <IAssetDB>(assetDB);

            PersistentRuntimeScene rtScene = new PersistentRuntimeScene();

            GetDepsFromContext ctx = new GetDepsFromContext();

            rtScene.GetDepsFrom(scene, ctx);

            IOC.Unregister <ITypeMap>(typeMap);
            IOC.Unregister <IAssetDB>(assetDB);

            int identity = asset.AssetLibrary.Identity;

            foreach (UnityObject obj in ctx.Dependencies)
            {
                if (hs.Contains(obj))
                {
                    continue;
                }

                if (obj is GameObject)
                {
                    GameObject go = (GameObject)obj;
                    if (go.IsPrefab())
                    {
                        AssetInfo assetInfo = new AssetInfo(go.name, 0, identity);
                        assetInfo.Object = go;
                        identity++;

                        List <PrefabPartInfo> prefabParts = new List <PrefabPartInfo>();
                        AssetLibraryAssetsGUI.CreatePefabParts(go, ref identity, prefabParts);
                        if (prefabParts.Count >= AssetLibraryInfo.MAX_ASSETS - AssetLibraryInfo.INITIAL_ID)
                        {
                            EditorUtility.DisplayDialog("Unable Create AssetLibrary", string.Format("Max 'Indentity' value reached. 'Identity' ==  {0}", AssetLibraryInfo.MAX_ASSETS), "OK");
                            return;
                        }

                        if (identity >= AssetLibraryInfo.MAX_ASSETS)
                        {
                            SaveAssetLibrary(asset, scene, index);
                            index++;

                            asset  = ScriptableObject.CreateInstance <AssetLibraryAsset>();
                            folder = asset.AssetLibrary.Folders.Where(f => f.depth == 0).First();

                            identity = asset.AssetLibrary.Identity;
                        }

                        assetInfo.PrefabParts       = prefabParts;
                        asset.AssetLibrary.Identity = identity;
                        folder.Assets.Add(assetInfo);
                    }
                }
                else
                {
                    AssetInfo assetInfo = new AssetInfo(obj.name, 0, identity);
                    assetInfo.Object = obj;
                    identity++;

                    if (identity >= AssetLibraryInfo.MAX_ASSETS)
                    {
                        SaveAssetLibrary(asset, scene, index);
                        index++;

                        asset    = ScriptableObject.CreateInstance <AssetLibraryAsset>();
                        folder   = asset.AssetLibrary.Folders.Where(f => f.depth == 0).First();
                        identity = asset.AssetLibrary.Identity;
                    }

                    asset.AssetLibrary.Identity = identity;
                    folder.Assets.Add(assetInfo);
                }
            }

            SaveAssetLibrary(asset, scene, index);
            index++;

            Selection.activeObject = asset;
            EditorGUIUtility.PingObject(asset);
        }