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 }); } }); // }
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()); }