예제 #1
0
        private Dictionary <string, MethodInfo> _commandInvokeMethodInfos = new Dictionary <string, MethodInfo>();//uFrame_kbe

        public void OnDestroy()
        {
            _container     = null;
            IsKernelLoaded = false;
            Services.Clear();
            SystemLoaders.Clear();
            EventAggregator = null;
            Instance        = null;
        }
예제 #2
0
 public void ResetKernel()
 {
     DestroyImmediate(Instance.gameObject);
     _container     = null;
     IsKernelLoaded = false;
     Services.Clear();
     SystemLoaders.Clear();
     EventAggregator = null;
     Instance        = null;
 }
예제 #3
0
        private IEnumerator Startup()
        {
            var attachedSystemLoaders =
                gameObject.GetComponentsInChildren(typeof(ISystemLoader)).OfType <ISystemLoader>();

            foreach (var systemLoader in attachedSystemLoaders)
            {
                this.Publish(new SystemLoaderEvent()
                {
                    State = SystemState.Loading, Loader = systemLoader
                });
                systemLoader.Container       = Container;
                systemLoader.EventAggregator = EventAggregator;
                systemLoader.Load();
                yield return(StartCoroutine(systemLoader.LoadAsync()));

                SystemLoaders.Add(systemLoader);
                this.Publish(new SystemLoaderEvent()
                {
                    State = SystemState.Loaded, Loader = systemLoader
                });
            }

            var attachedServices = gameObject.GetComponentsInChildren(typeof(SystemServiceMonoBehavior))
                                   .OfType <SystemServiceMonoBehavior>()
                                   .Where(_ => _.enabled)
                                   .ToArray();

            foreach (var service in attachedServices)
            {
                Container.RegisterService(service);
            }

            Container.InjectAll();
            var allServices = Container.ResolveAll <ISystemService>().ToArray();

            foreach (var item in allServices)
            {
                Services.Add(item);
            }

            for (int index = 0; index < allServices.Length; index++)
            {
                var service = allServices[index];
                this.Publish(new ServiceLoaderEvent()
                {
                    State = ServiceState.Loading, Service = service, GlobalProgress = (index + 1) / (float)allServices.Length
                });
                yield return(StartCoroutine(service.SetupAsync()));

                this.Publish(new ServiceLoaderEvent()
                {
                    State = ServiceState.Loaded, Service = service
                });
            }
            foreach (var service in allServices)
            {
                service.Setup();
            }
            foreach (var service in allServices)
            {
                service.Loaded();
            }

            this.Publish(new SystemsLoadedEvent()
            {
                Kernel = this
            });

            _isKernelLoaded = true;

            this.Publish(new KernelLoadedEvent()
            {
                Kernel = this
            });
            yield return(new WaitForEndOfFrame()); //Ensure that everything is bound

            this.Publish(new GameReadyEvent());

            //uFrame_kbe
            this.OnEvent <ViewModelPropertyChangedEvent>().ObserveOnMainThread().Subscribe(evt =>
            {
                evt.Handler(evt.Sender, evt.PropertyName);
            });

            this.OnEvent <ViewModelCommandExcuteEvent>().ObserveOnMainThread().Subscribe(evt =>
            {
                MethodInfo invokeMethod;
                _commandInvokeMethodInfos.TryGetValue(evt.Action.GetType().Name, out invokeMethod);
                if (invokeMethod == null)
                {
                    invokeMethod = evt.Action.GetType().GetMethod("Invoke");
                    if (invokeMethod != null)
                    {
                        _commandInvokeMethodInfos.Add(evt.Action.GetType().Name, invokeMethod);
                    }
                }
                if (invokeMethod != null)
                {
                    invokeMethod.Invoke(evt.Action, new object[] { evt.Command });
                }
            });
            //
        }
예제 #4
0
        private IEnumerator Startup()
        {
            var attachedSystemLoaders =
                gameObject.GetComponentsInChildren(typeof(ISystemLoader)).OfType <ISystemLoader>();

            foreach (var systemLoader in attachedSystemLoaders)
            {
                this.Publish(new SystemLoaderEvent()
                {
                    State = SystemState.Loading, Loader = systemLoader
                });
                systemLoader.Container       = Container;
                systemLoader.EventAggregator = EventAggregator;
                systemLoader.Load();
                SystemLoaders.Add(systemLoader);
                this.Publish(new SystemLoaderEvent()
                {
                    State = SystemState.Loaded, Loader = systemLoader
                });
            }

            var attachedServices = gameObject.GetComponentsInChildren(typeof(SystemServiceMonoBehavior))
                                   .OfType <SystemServiceMonoBehavior>()
                                   .Where(_ => _.enabled)
                                   .ToArray();

            foreach (var service in attachedServices)
            {
                Container.RegisterService(service);
                Services.Add(service);
            }

            Container.InjectAll();
            var allServices = Container.ResolveAll <ISystemService>().ToArray();

            foreach (var service in allServices)
            {
                this.Publish(new ServiceLoaderEvent()
                {
                    State = ServiceState.Loading, Service = service
                });
                service.Setup();
                var setupAsync = service.SetupAsync();
                if (setupAsync != null)
                {
                    yield return(StartCoroutine(setupAsync));
                }
                this.Publish(new ServiceLoaderEvent()
                {
                    State = ServiceState.Loaded, Service = service
                });
            }

            this.Publish(new SystemsLoadedEvent()
            {
                Kernel = this
            });

            _isKernelLoaded = true;

            this.Publish(new KernelLoadedEvent()
            {
                Kernel = this
            });
            yield return(new WaitForEndOfFrame()); //Ensure that everything is bound

            yield return(new WaitForEndOfFrame());

            this.Publish(new GameReadyEvent());
        }