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);
        }
        public void TestInitialize()
        {
            _logicHandler        = Substitute.For <ILogicHandler>();
            _gameEngineInterface = Substitute.For <IGameEngineInterface>();
            _dataLayer           = Substitute.For <IDataLayer>();

            _gameEngineInterface.AppVersion.Returns("1.0.0.0");

            _btnPrivacyPolicy = Substitute.For <IGameObject>();
            _gameEngineInterface.FindGameObject("btnPrivacyPolicy").Returns(_btnPrivacyPolicy);

            _btnHowToPlay = Substitute.For <IGameObject>();
            _gameEngineInterface.FindGameObject("btnHowToPlay").Returns(_btnHowToPlay);

            _btnShare = Substitute.For <IGameObject>();
            _gameEngineInterface.FindGameObject("_btnShare").Returns(_btnShare); //todo: howcome the UT works with a misnamed button?

            var txtVersionNumberGameObject = Substitute.For <IGameObject>();

            _txtVersionNumber = Substitute.For <IText>();
            txtVersionNumberGameObject.GetComponent <IText>().Returns(_txtVersionNumber);
            _gameEngineInterface.FindGameObject("txtVersionNumber").Returns(txtVersionNumberGameObject);

            _pnlMainMenu = Substitute.For <IGameObject>();
            _gameEngineInterface.FindGameObject("pnlMainMenu").Returns(_pnlMainMenu);

            _inMenuLogicProvider = new InMenuLogicProvider(_logicHandler, _gameEngineInterface, _dataLayer);
        }
        public void TestInitialize()
        {
            _logicHandler        = Substitute.For <ILogicHandler>();
            _gameEngineInterface = Substitute.For <IGameEngineInterface>();

            _pnlHowToPlay = Substitute.For <IGameObject>();
            _gameEngineInterface.FindGameObject("pnlHowToPlay").Returns(_pnlHowToPlay);

            _btnHowToPlayOk = Substitute.For <IGameObject>();
            _gameEngineInterface.FindGameObject("btnHowToPlayOk").Returns(_btnHowToPlayOk);

            _howToPlayLogicProvider = new HowToPlayLogicProvider(_logicHandler, _gameEngineInterface, _dataLayer);
        }
        public void TestInitialize()
        {
            _sourceAsteroid = Substitute.For <IGameObject>();
            _playerShip     = Substitute.For <IGameObject>();
            _mainCamera     = Substitute.For <IGameObject>();

            _gameEngineInterface = Substitute.For <IGameEngineInterface>();
            _gameEngineInterface.FindGameObject("PlayerShip").Returns(_playerShip);
            _gameEngineInterface.FindGameObject("Asteroid").Returns(_sourceAsteroid);
            _gameEngineInterface.FindGameObject("MainCamera").Returns(_mainCamera);

            _sourceAsteroid.GetSize().X.Returns(2);
            _playerShip.GetSize().X.Returns(10);

            _asteroidPlacementLogicImplementer = new AsteroidPlacementLogicImplementer(_gameEngineInterface, _asteroidDensity);
            _asteroidPlacementLogicImplementer.SourceAsteroid   = _sourceAsteroid;
            _asteroidPlacementLogicImplementer.LogToDebugOutput = LogToDebugOutput;

            SetPrivateMember("X_MAX", _asteroidPlacementLogicImplementer, 40);
            SetPrivateMember("_asteroidDensity", _asteroidPlacementLogicImplementer, 1);

            //asserts for constructor test:
            _playerShip.Received().GetSize();
            _sourceAsteroid.Received().GetSize();

            _gameEngineInterface.Received(1).FindGameObject("PlayerShip");

            //these mocks used to be part of CalculateXMinAndXMax
            const float CAMERA_HEIGHT = 5;
            const int   SCREEN_WIDTH  = 100; //the screen is 100 pixels wide

            var leftEdgeOfScreen  = new Vector3(0, 0, 0);
            var rightEdgeOfScreen = new Vector3(SCREEN_WIDTH, 0, 0);

            _sourceAsteroid.Transform.Position.Y.Returns(0);
            _mainCamera.Transform.Position.Y.Returns(CAMERA_HEIGHT);

            _gameEngineInterface.Screen.Width.Returns(SCREEN_WIDTH);

            _gameEngineInterface.ScreenUtils = Substitute.For <IScreenUtils>();
            _gameEngineInterface.ScreenUtils
            .GetWorldPointFromScreenPoint(Arg.Is <IVector3>(v => v.X == 0 && v.Y == 0 && v.Z == CAMERA_HEIGHT))
            .Returns(new Vector3(0, 0, 0));

            _gameEngineInterface.ScreenUtils
            .GetWorldPointFromScreenPoint(Arg.Is <IVector3>(v => v.X == SCREEN_WIDTH && v.Y == 0 && v.Z == CAMERA_HEIGHT))
            .Returns(new Vector3(WORLD_WIDTH, 0, 0));
        }
        public void TestInitialize()
        {
            _gameEngineInterface = Substitute.For <IGameEngineInterface>();

            _logicHandler = Substitute.For <ILogicHandler>();

            _btnOutOfLivesOk = Substitute.For <IGameObject>();
            _pnlOutOfLives   = Substitute.For <IGameObject>();
            _txtDebugOutput  = Substitute.For <IGameObject>();

            _outOfLivesLogicProvider = new OutOfLivesLogicProvider(_logicHandler, _gameEngineInterface, _dataLayer);

            _gameEngineInterface.FindGameObject("btnOutOfLivesOk").Returns(_btnOutOfLivesOk);
            _gameEngineInterface.FindGameObject("pnlOutOfLives").Returns(_pnlOutOfLives);
            _gameEngineInterface.FindGameObject("txtDebugOutput").Returns(_txtDebugOutput);
        }
예제 #6
0
        public void OnStart()
        {
            #region arrange
            //var gameLogicHandler = Substitute.For<ILogicHandler>();

            //var gameEngineInterface = Substitute.For<IGameEngineInterface>();
            var btnWinOk   = Substitute.For <IGameObject>();
            var pnlGameWin = Substitute.For <IGameObject>();
            _gameEngineInterface.FindGameObject(Arg.Any <string>()).Returns(btnWinOk, pnlGameWin);

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

            //var winLogicProvider = new WinLogicProvider(gameLogicHandler, gameEngineInterface, dataLayer);

            #endregion

            #region act
            _winLogicProvider.OnStart();
            #endregion

            #region assert
            Assert.IsNotNull(btnWinOk.LogicHandler);
            pnlGameWin.Received().SetActive(false);
            _gameEngineInterface.Received(1).FindGameObject("btnGameWinOk");
            _gameEngineInterface.Received(1).FindGameObject("btnGameWinNextLevel");
            _gameEngineInterface.Received(1).FindGameObject("txtWinMessage");
            _gameEngineInterface.Received(1).FindGameObject("pnlGameWin");
            #endregion
        }
예제 #7
0
        public AsteroidPlacementLogicImplementer(IGameEngineInterface gameEngineInterface, int asteroidDensity)
        {
            _gameEngineInterface = gameEngineInterface;
            _asteroidDensity     = asteroidDensity;

            var playerShip = gameEngineInterface.FindGameObject("PlayerShip");

            SHIP_WIDTH = playerShip.GetSize().X;

            AllAsteroids = new List <IGameObject>();
        }
예제 #8
0
        /// <summary>
        /// calculates the world-space x-coordinates for the left edge (X_MIN) and right edge (X_MAX) of the screen
        /// </summary>
        /// <returns>a float array, where index 0 is X_MIN and index 1 is X_MAX</returns>
        private float[] CalculateXMinAndXMax()
        {
            var retVal = new float[2];

            var camera             = _gameEngineInterface.FindGameObject("MainCamera"); //todo next game: this should probably be passed in as a property
            var distanceFromCamera = camera.Transform.Position.Y - _sourceAsteroid.Transform.Position.Y;

            var screenPointXMin = new Utils.Vector3(0, 0, distanceFromCamera);
            var worldPointXMin  = _gameEngineInterface.ScreenUtils.GetWorldPointFromScreenPoint(screenPointXMin);

            retVal[0] = worldPointXMin.X;

            var screenPointXMax = new Utils.Vector3(_gameEngineInterface.Screen.Width, 0, distanceFromCamera);
            var worldPointXMax  = _gameEngineInterface.ScreenUtils.GetWorldPointFromScreenPoint(screenPointXMax);

            retVal[1] = worldPointXMax.X;

            return(retVal);
        }
        public void OnStart_FirstLevel()
        {
            #region arrange
            _logicHandler.GameController.CurLevel = new LevelInfo(1, 1);
            _dataLayer.GetCurLevel().Returns(new LevelInfo(1, 1));

            var btnStart = Substitute.For <IGameObject>();
            _gameEngineInterface.FindGameObject("btnChooseLevelStart").Returns(btnStart);

            var btnCancel = Substitute.For <IGameObject>();
            _gameEngineInterface.FindGameObject("btnChooseLevelCancel").Returns(btnCancel);

            var btnNextLevel = Substitute.For <IGameObject>();
            _gameEngineInterface.FindGameObject("btnNextLevel").Returns(btnNextLevel);

            var btnPrevLevel = Substitute.For <IGameObject>();
            _gameEngineInterface.FindGameObject("btnPrevLevel").Returns(btnPrevLevel);
            #endregion

            #region act
            _chooseLevelLogicProvider.OnStart();
            #endregion

            #region
            _dataLayer.Received(1).GetCurLevel();

            _gameEngineInterface.Received(1).FindGameObject("txtSelectedLevel");
            _gameEngineInterface.Received(1).FindGameObject("btnChooseLevelStart");
            _gameEngineInterface.Received(1).FindGameObject("btnChooseLevelCancel");
            _gameEngineInterface.Received(1).FindGameObject("btnNextLevel");
            _gameEngineInterface.Received(1).FindGameObject("btnPrevLevel");
            _gameEngineInterface.Received(1).FindGameObject("pnlChooseLevel");

            Assert.IsNotNull(btnStart.LogicHandler);
            Assert.IsNotNull(btnCancel.LogicHandler);
            Assert.IsNotNull(btnNextLevel.LogicHandler);
            Assert.IsNotNull(btnPrevLevel.LogicHandler);

            btnPrevLevel.Received(1).SetActive(false);
            btnNextLevel.Received(1).SetActive(false);

            var selectedLevelIndex = GetPrivateMember <int>("_selectedLevelIndex", _chooseLevelLogicProvider);
            Assert.AreEqual(0, selectedLevelIndex);

            var maxLevelIndex = GetPrivateMember <int>("_maxLevelIndex", _chooseLevelLogicProvider);
            Assert.AreEqual(selectedLevelIndex, maxLevelIndex);

            var txtSelectedLevel = GetPrivateMember <IText>("_txtSelectedLevel", _chooseLevelLogicProvider);
            Assert.AreEqual("1-1", txtSelectedLevel.Text);
            #endregion
        }
        public void OnStart()
        {
            #region arrange
            _gameEngineInterface.AppStoreService = Substitute.For <IAppStoreService>();
            _gameEngineInterface.AppStoreService.OnPurchaseFailedEventHandler = null;

            var btnStartGame = Substitute.For <IGameObject>();
            btnStartGame.LogicHandler = null;
            _gameEngineInterface.FindGameObject("btnStartGame").Returns(btnStartGame);

            var btnGetMoreLives = Substitute.For <IGameObject>();
            btnGetMoreLives.LogicHandler = null;
            _gameEngineInterface.FindGameObject("btnGetMoreLives").Returns(btnGetMoreLives);

            var btnExitGame = Substitute.For <IGameObject>();
            btnExitGame.LogicHandler = null;
            _gameEngineInterface.FindGameObject("btnExitGame").Returns(btnExitGame);

            var btnPurchaseSucceededOk = Substitute.For <IGameObject>();
            btnPurchaseSucceededOk.LogicHandler = null;
            _gameEngineInterface.FindGameObject("btnStorePurchaseSucceededOk").Returns(btnPurchaseSucceededOk);

            var btnPurchaseFailedOk = Substitute.For <IGameObject>();
            btnPurchaseFailedOk.LogicHandler = null;
            _gameEngineInterface.FindGameObject("btnStorePurchaseFailedOk").Returns(btnPurchaseFailedOk);

            var pnlPurchaseSucceeded = Substitute.For <IGameObject>();
            _gameEngineInterface.FindGameObject("pnlStorePurchaseSucceeded").Returns(pnlPurchaseSucceeded);

            var pnlPurchaseFailed = Substitute.For <IGameObject>();
            _gameEngineInterface.FindGameObject("pnlStorePurchaseFailed").Returns(pnlPurchaseFailed);

            var pnlChooseLevel = Substitute.For <IGameObject>();
            _gameEngineInterface.FindGameObject("pnlChooseLevel").Returns(pnlChooseLevel);

            #endregion

            #region act
            _inMenuLogicProvider.OnStart();
            #endregion

            #region assert
            _gameEngineInterface.Received(1).FindGameObject("btnStartGame");
            Assert.IsNotNull(btnStartGame.LogicHandler);

            _gameEngineInterface.Received(1).FindGameObject("btnHowToPlay");
            Assert.IsNotNull(_btnHowToPlay.LogicHandler);

            _gameEngineInterface.Received(1).FindGameObject("btnShare");
            Assert.IsNotNull(_btnShare.LogicHandler);

            _gameEngineInterface.Received(1).FindGameObject("btnGetMoreLives");
            Assert.IsNotNull(btnGetMoreLives.LogicHandler);

            _gameEngineInterface.Received(1).FindGameObject("btnExitGame");
            Assert.IsNotNull(btnExitGame.LogicHandler);

            _gameEngineInterface.Received(1).FindGameObject("btnPrivacyPolicy");
            Assert.IsNotNull(_btnPrivacyPolicy.LogicHandler);

            _gameEngineInterface.Received(1).FindGameObject("txtVersionNumber");
            var expectedVersionNumber = "v" + _gameEngineInterface.AppVersion;
            Assert.AreEqual(expectedVersionNumber, _txtVersionNumber.Text);

            _gameEngineInterface.Received(1).FindGameObject("btnStorePurchaseSucceededOk");
            Assert.IsNotNull(btnPurchaseSucceededOk.LogicHandler);

            _gameEngineInterface.Received(1).FindGameObject("btnStorePurchaseFailedOk");
            Assert.IsNotNull(btnPurchaseFailedOk.LogicHandler);

            _gameEngineInterface.Received(1).FindGameObject("pnlMainMenu");
            _pnlMainMenu.Received(1).SetActive(false);

            _gameEngineInterface.Received(1).FindGameObject("pnlStorePurchaseSucceeded");
            pnlPurchaseSucceeded.Received(1).SetActive(false);

            _gameEngineInterface.Received(1).FindGameObject("pnlStorePurchaseFailed");
            pnlPurchaseFailed.Received(1).SetActive(false);

            _gameEngineInterface.Received(1).FindGameObject("pnlChooseLevel");
            pnlChooseLevel.Received(1).SetActive(false);

            Assert.AreEqual(1, _gameEngineInterface.TimeScale);

            Assert.IsNotNull(_gameEngineInterface.AppStoreService.OnPurchaseFailedEventHandler);
            #endregion
        }
        public void TestInitialize()
        {
            _logicHandler        = Substitute.For <ILogicHandler>();
            _gameEngineInterface = Substitute.For <IGameEngineInterface>();
            _dataLayer           = Substitute.For <IDataLayer>();

            _gameController = Substitute.For <IGameController>();
            _logicHandler.GameController.Returns(_gameController);
            _productInfoViewModels = new List <ProductInfoViewModel>()
            {
                new ProductInfoViewModel {
                    ProductId = Constants.ProductNames.BuyLivesSmall, PriceString = "$0.99", SavePctString = string.Empty
                },
                new ProductInfoViewModel {
                    ProductId = Constants.ProductNames.BuyLivesMedium, PriceString = "$1.99", SavePctString = "SAVE 30%"
                },
                new ProductInfoViewModel {
                    ProductId = Constants.ProductNames.BuyLivesLarge, PriceString = "$2.99", SavePctString = "SAVE 40%"
                },
            };
            _gameController.ProductsForUI.Returns(_productInfoViewModels);

            _dataLayer.GetNumLivesRemaining().Returns(10);

            _getMoreLivesLogicProvider = new GetMoreLivesLogicProvider(_logicHandler, _gameEngineInterface, _dataLayer);

            _pnlGetMoreLives = Substitute.For <IGameObject>();
            _gameEngineInterface.FindGameObject("pnlGetMoreLives").Returns(_pnlGetMoreLives);

            _btnCancel = Substitute.For <IGameObject>();
            _gameEngineInterface.FindGameObject("btnGetMoreLivesCancel").Returns(_btnCancel);

            _btnBuyLivesSmall = Substitute.For <IGameObject>();
            _gameEngineInterface.FindGameObject("btnBuyLivesSmall").Returns(_btnBuyLivesSmall);

            _btnBuyLivesMedium = Substitute.For <IGameObject>();
            _gameEngineInterface.FindGameObject("btnBuyLivesMedium").Returns(_btnBuyLivesMedium);

            _btnBuyLivesLarge = Substitute.For <IGameObject>();
            _gameEngineInterface.FindGameObject("btnBuyLivesLarge").Returns(_btnBuyLivesLarge);

            _txtCurrentLivesGameObject = Substitute.For <IGameObject>();
            _txtCurrentLives           = Substitute.For <IText>();
            _txtCurrentLivesGameObject.GetComponent <IText>().Returns(_txtCurrentLives);
            _gameEngineInterface.FindGameObject("txtCurrentLives").Returns(_txtCurrentLivesGameObject);

            var txtDebugOutputGameObject = Substitute.For <IGameObject>();

            _txtDebugOutput = Substitute.For <IText>();
            txtDebugOutputGameObject.GetComponent <IText>().Returns(_txtDebugOutput);
            _gameEngineInterface.FindGameObject("txtDebugOutput").Returns(txtDebugOutputGameObject);

            _buttonAndSaveLabels[Constants.ProductNames.BuyLivesSmall] = new Tuple <IText, IText>(Substitute.For <IText>(), Substitute.For <IText>());
            _btnBuyLivesSmall.GetComponent <IText>().Returns(_buttonAndSaveLabels[Constants.ProductNames.BuyLivesSmall].Item1);

            _buttonAndSaveLabels[Constants.ProductNames.BuyLivesMedium] = new Tuple <IText, IText>(Substitute.For <IText>(), Substitute.For <IText>());
            _btnBuyLivesMedium.GetComponent <IText>().Returns(_buttonAndSaveLabels[Constants.ProductNames.BuyLivesMedium].Item1);
            var savePctMediumGameObj = Substitute.For <IGameObject>();

            savePctMediumGameObj.GetComponent <IText>().Returns(_buttonAndSaveLabels[Constants.ProductNames.BuyLivesMedium].Item2);
            _gameEngineInterface.FindGameObject("txtBuyLivesMediumSavePct").Returns(savePctMediumGameObj);


            _buttonAndSaveLabels[Constants.ProductNames.BuyLivesLarge] = new Tuple <IText, IText>(Substitute.For <IText>(), Substitute.For <IText>());
            _btnBuyLivesLarge.GetComponent <IText>().Returns(_buttonAndSaveLabels[Constants.ProductNames.BuyLivesLarge].Item1);
            var savePctLargeGameObj = Substitute.For <IGameObject>();

            savePctLargeGameObj.GetComponent <IText>().Returns(_buttonAndSaveLabels[Constants.ProductNames.BuyLivesLarge].Item2);
            _gameEngineInterface.FindGameObject("txtBuyLivesLargeSavePct").Returns(savePctLargeGameObj);
        }
        public virtual void OnStart()
        {
            var debugOutputGameObject = _gameEngineInterface.FindGameObject("txtDebugOutput");

            _txtDebugOutput = debugOutputGameObject.GetComponent <IText>();
        }
        public void OnStart()
        {
            #region arrange
            var playerShip       = Substitute.For <IGameObject>();
            var playerShipScript = Substitute.For <IPlayerShipScript>();
            playerShipScript.GameEngineInterface = null;
            playerShip.GetComponent <IPlayerShipScript>().Returns(playerShipScript);
            _gameEngineInterface.FindGameObject("PlayerShip").Returns(playerShip);

            var quad = Substitute.For <IGameObject>();
            _gameEngineInterface.FindGameObject("Quad").Returns(quad);

            var txtLives   = Substitute.For <IGameObject>();
            var iTextLives = Substitute.For <IText>();
            txtLives.GetComponent <IText>().Returns(iTextLives);
            _gameEngineInterface.FindGameObject("txtLives").Returns(txtLives);

            var txtCurLevel   = Substitute.For <IGameObject>();
            var iTextCurLevel = Substitute.For <IText>();
            txtCurLevel.GetComponent <IText>().Returns(iTextCurLevel);
            _gameEngineInterface.FindGameObject("txtCurLevel").Returns(txtCurLevel);

            _dataLayer.GetNumLivesRemaining().Returns(1);

            _logicHandler.GameController = Substitute.For <IGameController>();
            _logicHandler.GameController.CurLevel.Returns(new LevelInfo(1, 1));

            _asteroidPlacementLogicImplementer.InitAsteroids(Arg.Any <int>(), Arg.Any <int>()).Returns((IGameObject)null);

            #endregion

            #region act
            _gameLogicProvider.OnStart();
            #endregion

            #region assert
            _gameEngineInterface.Received(1).FindGameObject("GlobalObject");
            _gameEngineInterface.Received(1).FindGameObject("PlayerShip");
            //_gameEngineInterface.Received(1).FindGameObject("PlayerShield");
            _gameEngineInterface.Received(1).FindGameObject("MainCamera");

            playerShip.Received().GetComponent <IPlayerShipScript>();
            Assert.IsNotNull(playerShipScript.GameEngineInterface);

            _gameEngineInterface.Received(1).FindGameObject("Asteroid");
            _gameEngineInterface.Received(1).FindGameObject("Explosion");
            _gameEngineInterface.Received(1).FindGameObject("Quad");
            quad.Received(1).EnableTextureWrapping();

            _gameEngineInterface.Received(1).FindGameObject("txtLives");
            Assert.AreEqual("LIVES: 1", iTextLives.Text);

            _gameEngineInterface.Received(1).FindGameObject("txtCurLevel");
            Assert.AreEqual("LEVEL: 1-1", iTextCurLevel.Text);

            _gameEngineInterface.Received(1).SetupLighting();

            _asteroidPlacementLogicImplementer.Received(1).InitAsteroids(Arg.Any <int>(), Arg.Any <int>());

            Assert.AreEqual(1, playerShipScript.Health);
            #endregion
        }