public BehaviourTree Create(IServicesInjector gamePlayDependencies) { var tree = new TBehaviourTree(); tree.LoadTree(); var nodes = tree.TreeNodes.ToList(); var localInjector = TorqueGamesInjector.GetEmpty(); var localLinker = localInjector.GetLinker(); foreach (var node in nodes) { node.Init(gamePlayDependencies); } foreach (var node in nodes) { node.WriteLocalDependencies(localLinker); } foreach (var node in nodes) { node.ReadLocalDependencies(localInjector); } foreach (var node in nodes) { node.StartGame(); } return(tree); }
private async Task EarlyInitializationProcess() { await Task.Yield(); //initialice injector var currentGameInjector = new CoronavirusInjector(); var linker = currentGameInjector.GetLinker(); _factory = new CharacterFactory(currentGameInjector, linker); LoadDependencies(linker); _injector = currentGameInjector; _injector.Init(); //write dependencies from decoupled registers foreach (var register in gameNodeParent.GetComponentsInChildren <IComponentRegister>()) { register.AddLinks(linker); } //retrieve children foreach (var component in gameNodeParent.GetComponentsInChildren <GameComponent>()) { gameComponents.Add(component); } //await game components initialization foreach (var gameComponent in gameComponents) { gameComponent.WriteDependencies(linker, _injector); } foreach (var gameComponent in gameComponents) { gameComponent.EarlyInitialization(_injector); } var initTasks = gameComponents.Select(g => g.StartGame(_injector)).ToArray(); await Task.WhenAll(initTasks); }
private void InitializeLocalDependencies(TorqueGamesInjector injector) { WriteCharacterLocalDependencies(injector.GetLinker()); LocalCharacterDependencies = injector; }
public void SetupData(IServicesInjector injector, TorqueGamesInjector playerInjector) { GamePlayDependencies = injector; InitializeLocalDependencies(playerInjector); }