//====== public methods

        public void StartGame(IGraphNode mainNode)
        {
            logger.Log($"Starting game.", false);

            IGraphNode node = mainNode;

            ScreenTransitionActivator nextTransition = null;

            do
            {
                GameModule module = node.GetInstance();

                logger.Log("Going to module: " + module.GetType().Name, false);

                var loop = new GameModuleLoop(module, nextTransition ?? NullTransition.Activator, hal, sleeper);

                var result = loop.Start();

                (node, nextTransition) = node.GetNextNode(result);
            }while (node is not null);

            logger.Log($"Exiting game.", false);
        }