예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
 private void InitializeLocalDependencies(TorqueGamesInjector injector)
 {
     WriteCharacterLocalDependencies(injector.GetLinker());
     LocalCharacterDependencies = injector;
 }
예제 #4
0
 public void SetupData(IServicesInjector injector, TorqueGamesInjector playerInjector)
 {
     GamePlayDependencies = injector;
     InitializeLocalDependencies(playerInjector);
 }