public void SetSceneReady(string sceneId) { // Start processing SYSTEM queue if (messagingControllers.ContainsKey(sceneId)) { // Start processing SYSTEM queue MessagingController sceneMessagingController = messagingControllers[sceneId]; sceneMessagingController.StartBus(MessagingBusType.SYSTEM); sceneMessagingController.StartBus(MessagingBusType.UI); sceneMessagingController.StopBus(MessagingBusType.INIT); } }
public void Initialize(IMessageProcessHandler messageHandler) { messagingControllers[GLOBAL_MESSAGING_CONTROLLER] = new MessagingController(messageHandler, GLOBAL_MESSAGING_CONTROLLER); if (!string.IsNullOrEmpty(GLOBAL_MESSAGING_CONTROLLER)) { messagingControllers.TryGetValue(GLOBAL_MESSAGING_CONTROLLER, out globalController); } Environment.i.world.sceneController.OnSortScenes += MarkBusesDirty; if (mainCoroutine == null) { mainCoroutine = CoroutineStarter.Start(ProcessMessages()); } }
public void AddController(IMessageProcessHandler messageHandler, string sceneId, bool isGlobal = false) { if (!messagingControllers.ContainsKey(sceneId)) { messagingControllers[sceneId] = new MessagingController(messageHandler, sceneId); } if (isGlobal) { globalSceneId = sceneId; } if (!string.IsNullOrEmpty(globalSceneId)) { messagingControllers.TryGetValue(globalSceneId, out uiSceneController); } PopulateBusesToBeProcessed(); }
private void RefreshControllerEnabledState(MessagingController controller) { if (controller == null || !controller.enabled) { return; } if (controller.uiBus.pendingMessagesCount != 0) { return; } if (controller.initBus.pendingMessagesCount != 0) { return; } if (controller.systemBus.pendingMessagesCount != 0) { return; } controller.enabled = false; }
public void PopulateBusesToBeProcessed() { IWorldState worldState = Environment.i.world.state; string currentSceneId = worldState.currentSceneId; List <ParcelScene> scenesSortedByDistance = worldState.scenesSortedByDistance; int count = scenesSortedByDistance.Count; // we need to retrieve list count everytime because it // may change after a yield return sortedControllers.Clear(); if (!string.IsNullOrEmpty(currentSceneId) && messagingControllers.ContainsKey(currentSceneId)) { currentSceneController = messagingControllers[currentSceneId]; } for (int i = 0; i < count; i++) { string controllerId = scenesSortedByDistance[i].sceneData.id; if (controllerId != currentSceneId) { if (!messagingControllers.ContainsKey(controllerId)) { continue; } sortedControllers.Add(messagingControllers[controllerId]); } } sortedControllersCount = sortedControllers.Count; bool uiSceneControllerActive = uiSceneController != null && uiSceneController.enabled; bool globalControllerActive = globalController != null && globalController.enabled; bool currentSceneControllerActive = currentSceneController != null && currentSceneController.enabled; bool atLeastOneControllerShouldBeProcessed = uiSceneControllerActive || globalControllerActive || currentSceneControllerActive || sortedControllersCount > 0; if (!atLeastOneControllerShouldBeProcessed) { return; } busesToProcess.Clear(); //------------------------------------------------------------------------------------------- // Global scene UI if (uiSceneControllerActive) { busesToProcess.Add(uiSceneController.uiBus); busesToProcess.Add(uiSceneController.initBus); } if (globalControllerActive) { busesToProcess.Add(globalController.initBus); } if (currentSceneControllerActive) { busesToProcess.Add(currentSceneController.initBus); busesToProcess.Add(currentSceneController.uiBus); busesToProcess.Add(currentSceneController.systemBus); } for (int i = 0; i < sortedControllersCount; ++i) { MessagingController msgController = sortedControllers[i]; busesToProcess.Add(msgController.initBus); busesToProcess.Add(msgController.uiBus); } for (int i = 0; i < sortedControllersCount; ++i) { MessagingController msgController = sortedControllers[i]; busesToProcess.Add(msgController.systemBus); } if (uiSceneControllerActive) { busesToProcess.Add(uiSceneController.systemBus); } busesToProcessCount = busesToProcess.Count; }
void DisposeController(MessagingController controller) { controller.Stop(); controller.Dispose(); }