Ejemplo n.º 1
0
        private IEnumerator InitModules(WindowBase window, System.Action onComplete)
        {
            var resources  = WindowSystem.GetResources();
            var targetData = WindowSystem.GetTargetData();

            for (int i = 0; i < this.modules.Length; ++i)
            {
                var moduleInfo = this.modules[i];
                if (moduleInfo.targets.IsValid(targetData) == false)
                {
                    continue;
                }
                if (moduleInfo.moduleInstance != null)
                {
                    continue;
                }

                var parameters = moduleInfo.parameters;
                var data       = new LoadingClosure()
                {
                    windowModules = this,
                    index         = i,
                    parameters    = parameters,
                    window        = window,
                };
                yield return(resources.LoadAsync <WindowModule, LoadingClosure>(window, data, moduleInfo.module, (asset, closure) => {
                    var instance = WindowSystem.GetPools().Spawn(asset, closure.window.transform);
                    instance.Setup(closure.window);
                    if (closure.parameters != null)
                    {
                        closure.parameters.Apply(instance);
                    }

                    var layoutPreferences = closure.window.GetCurrentLayoutPreferences();
                    if (layoutPreferences != null && instance.canvasScaler != null)
                    {
                        layoutPreferences.Apply(instance.canvasScaler);
                    }

                    closure.window.RegisterSubObject(instance);

                    closure.windowModules.modules[closure.index].moduleInstance = instance;
                }));
            }

            onComplete.Invoke();
        }
Ejemplo n.º 2
0
        private IEnumerator InitLayoutInstance(LayoutWindowType windowInstance, WindowObject root, WindowLayout windowLayout, HashSet <WindowLayout> used, System.Action onComplete, bool isInner = false)
        {
            if (((ILayoutInstance)root).windowLayoutInstance != null)
            {
                if (onComplete != null)
                {
                    onComplete.Invoke();
                }
                yield break;
            }

            if (windowLayout.createPool == true)
            {
                WindowSystem.GetPools().CreatePool(windowLayout);
            }
            var windowLayoutInstance = WindowSystem.GetPools().Spawn(windowLayout, root.transform);

            windowLayoutInstance.isRootLayout = (isInner == false);

            if (isInner == true)
            {
                windowLayoutInstance.canvasScaler.enabled = false;
            }

            windowLayoutInstance.Setup(windowInstance);
            windowLayoutInstance.SetCanvasOrder(0);
            root.RegisterSubObject(windowLayoutInstance);
            ((ILayoutInstance)root).windowLayoutInstance = windowLayoutInstance;
            this.ApplyLayoutPreferences(this.layoutPreferences);

            windowLayoutInstance.SetTransformFullRect();

            used.Add(this.windowLayout);

            this.loadingCount = 0;
            var arr = this.components;

            for (int i = 0; i < arr.Length; ++i)
            {
                var layoutComponent = arr[i];
                if (layoutComponent.windowLayout != windowLayout)
                {
                    continue;
                }

                var layoutElement = windowLayoutInstance.GetLayoutElementByTagId(layoutComponent.tag);
                layoutComponent.componentInstance = windowLayoutInstance.GetLoadedComponent(layoutComponent.tag);
                layoutElement.Setup(windowInstance);
                arr[i] = layoutComponent;

                if (layoutComponent.componentInstance == null)
                {
                    if (layoutComponent.component.IsEmpty() == false)
                    {
                        var resources = WindowSystem.GetResources();
                        var data      = new LoadingClosure()
                        {
                            index   = i,
                            element = layoutElement,
                            windowLayoutInstance = windowLayoutInstance,
                            layoutComponentItems = arr,
                            instance             = this,
                        };
                        ++this.loadingCount;
                        yield return(resources.LoadAsync <WindowComponent, LoadingClosure>(windowInstance, data, layoutComponent.component, (asset, closure) => {
                            if (asset == null)
                            {
                                Debug.LogWarning("Component is null while component resource is not empty. Skipped.");
                                return;
                            }

                            ref var item = ref closure.layoutComponentItems[closure.index];

                            var instance = closure.element.Load(asset);
                            instance.SetInvisible();
                            closure.windowLayoutInstance.SetLoadedComponent(item.tag, instance);
                            item.componentInstance = instance;

                            instance.DoLoadScreenAsync(() => { --closure.instance.loadingCount; });
                        }));