private void ValidateDependencies() { for (int i = 0; i < InitActions.Count; i++) { InitAction initAction = InitActions[i]; RecursiveValidateAction(initAction, initAction.GetType(), initAction.ActionName); } }
private void RecursiveValidateAction(InitAction action, Type dependencyType, string breadcrumbs) { if (action.TopologicalDependencies.Contains(dependencyType.ToString())) { string message = "[ValidateDependencies] Found Circular Dependency: " + breadcrumbs; Logger.LogFatal(this, message, Logger.TagFlags.INIT); throw new ApplicationException(message); } foreach (string antecedentName in action.TopologicalDependencies) { List <InitAction> initActions = InitActions; Predicate <InitAction> match = (InitAction a) => a.GetType().ToString() == antecedentName; InitAction initAction = initActions.Find(match); if (initAction == null) { string message = "[ValidateDependencies] Missing Dependency: " + breadcrumbs + " -> " + antecedentName; Logger.LogFatal(this, message, Logger.TagFlags.INIT); throw new ApplicationException(message); } RecursiveValidateAction(initAction, dependencyType, breadcrumbs + " -> " + initAction.ActionName); } }
private IEnumerator ExecuteReadyActionsCoroutine() { while (InitActions.Count > 0) { InitAction action = InitActions[0]; if (action.CanStart()) { action.Initialize(this, m_eventDispatcher, m_configurator); Logger.LogDebug(this, "Starting init action: " + action.ActionName, Logger.TagFlags.INIT); InitActions.RemoveAt(0); action.Start(); if (m_runAsCoroutine) { yield return(BaseGameController.Instance.StartCoroutine(action.Perform())); } else { CoroutineHelper.RunCoroutineToCompletion(action.Perform()); } yield return(null); } } }
public void AddInitAction(InitAction action) { InitActions.Add(action); }