public void ConstructorTest()
        {
            #region arrange
            var gameLogicHandler = Substitute.For <ILogicHandler>();

            var gameEngineInterface = Substitute.For <IGameEngineInterface>();
            gameEngineInterface.Screen.Width.Returns(SCREEN_WIDTH);

            var dataLayer = Substitute.For <IDataLayer>();

            var asteroidPlacementLogicImplementer = Substitute.For <IAsteroidPlacementLogicImplementer>();
            #endregion

            #region act
            var gameLogicProvider = new GameLogicProvider(gameLogicHandler, gameEngineInterface, dataLayer, asteroidPlacementLogicImplementer);
            #endregion

            #region assert
            var halfScreenWidth = GetPrivateMember <int>("_halfScreenWidth", gameLogicProvider);
            Assert.AreEqual(50, halfScreenWidth);

            var inputStates = GetPrivateMember <Dictionary <InputAxis, float> >("_inputStates", gameLogicProvider);
            Assert.AreEqual(0, inputStates[InputAxis.Horizontal]);
            Assert.AreEqual(0, inputStates[InputAxis.Cancel]);

            Assert.AreEqual(1, gameEngineInterface.TimeScale);
            #endregion
        }
        public void TestInitialize()
        {
            _gameController      = Substitute.For <IGameController>();
            _logicHandler        = Substitute.For <ILogicHandler>();
            _gameEngineInterface = Substitute.For <IGameEngineInterface>();
            _dataLayer           = Substitute.For <IDataLayer>();

            _audioSourceShip = Substitute.For <IAudioSource>();

            _playerShip           = Substitute.For <IGameObject>();
            _playerShip.Transform = Substitute.For <ITransform>();

            _camera = Substitute.For <IGameObject>();
            _gameEngineInterface.FindGameObject("MainCamera").Returns(_camera);
            _camera.Transform.Position.Returns(new Vector3(0, 0, 0));

            _sourceAsteroid = Substitute.For <IGameObject>();
            _gameEngineInterface.FindGameObject("sourceAsteroid").Returns(_sourceAsteroid);
            _sourceAsteroid.Transform.Position.Returns(new Vector3(0, 0, 0));

            _playerShipScript = Substitute.For <IPlayerShipScript>();
            _playerShipScript.Health.Returns(100);

            _playerShip.GetSize().Returns(new Vector3(10, 10, 10));

            _gameEngineInterface.Screen.Width.Returns(SCREEN_WIDTH);
            _logicHandler.GameController = _gameController;

            _asteroidPlacementLogicImplementer = Substitute.For <IAsteroidPlacementLogicImplementer>();

            _gameLogicProvider = new GameLogicProvider(_logicHandler, _gameEngineInterface, _dataLayer, _asteroidPlacementLogicImplementer); //todo 2nd game: couldn't get Substitute.ForPartsOf to work, so I had to mock all the stuff needed for the call to InitStage()

            _gameEngineInterface.Time = Substitute.For <ITime>();
            _gameEngineInterface.Time.DeltaTime.Returns(1);
        }
        private char[,] ShootAt1x1(char[,] manualFieldBefor)
        {
            var gameFieldXLen = manualFieldBefor.GetLength(0);
            var gameFieldYLen = manualFieldBefor.GetLength(1);
            GameField gameField = new GameField(gameFieldXLen, gameFieldYLen);

            // fill the field with the manual chars
            for (int i = 0; i < gameFieldXLen; i++)
            {
                for (int j = 0; j < gameFieldYLen; j++)
                {
                    gameField[i, j] = manualFieldBefor[i, j];
                }
            }

            // Create game with custom field
            Game game = new Game(gameField);
            var logicProvider = new GameLogicProvider(game);

            // shoot 1x1
            Coordinates positionToShoot = new Coordinates(1, 1);
            logicProvider.ShootBalloonAtPosition(positionToShoot);

            return gameField.GetField();
        }