Esempio n. 1
0
        public ScorePage(
            AssetsLoader assets,
            ISettingsRepository settingsRepository,
            IScreenTransformationMatrixProvider matrixScaleProvider,
            ILocalizedStringsRepository localizedStringsRepository)
        {
            _font                = assets.Font;
            _background          = assets.OtherSprites["scoreBackground"];
            _matrixScaleProvider = matrixScaleProvider;

            _titleText          = localizedStringsRepository.Get(GameStringsLoader.ScorePageTitleString);
            _titleScalingObject = new ScalingObject(1f, 1.2f, 1.0f);
            _titleDrawingInfos  = new DrawingInfos()
            {
                Position = new Vector2(matrixScaleProvider.VirtualWidth / 2f, 100f),
                Origin   = _font.GetTextCenter(_titleText)
            };

            float textsScale = 0.4f;

            var bestFarts           = settingsRepository.GetOrSetInt(GameScores.BestFartsScoreKey, default);
            var bestNumberOfMeters  = settingsRepository.GetOrSetInt(GameScores.BestNumberOfMetersScoreKey, default);
            var bestVegetablesEaten = settingsRepository.GetOrSetInt(GameScores.BestVegetablesEatenScoreKey, default);

            _scoreInfos = new List <ScoreRecordText>()
            {
                new ScoreRecordText(
                    $"{localizedStringsRepository.Get(GameStringsLoader.BestNumberOfMetersScoreKey)}{bestNumberOfMeters}",
                    new DrawingInfos()
                {
                    Position     = new Vector2(_titleDrawingInfos.Position.X / 2, _titleDrawingInfos.Position.Y + 100f),
                    OverlayColor = Color.White.WithAlpha(0),
                    Scale        = textsScale
                }),

                new ScoreRecordText(
                    $"{localizedStringsRepository.Get(GameStringsLoader.BestVegetablesEatenScoreKey)}{bestVegetablesEaten}",
                    new DrawingInfos()
                {
                    Position     = new Vector2(_titleDrawingInfos.Position.X / 2, _titleDrawingInfos.Position.Y + 140f),
                    OverlayColor = Color.White.WithAlpha(0),
                    Scale        = textsScale
                }),

                new ScoreRecordText(
                    $"{localizedStringsRepository.Get(GameStringsLoader.BestFartsScoreKey)}{bestFarts}",
                    new DrawingInfos()
                {
                    Position     = new Vector2(_titleDrawingInfos.Position.X / 2, _titleDrawingInfos.Position.Y + 180f),
                    OverlayColor = Color.White.WithAlpha(0),
                    Scale        = textsScale
                }),
            };

            _nTexts        = _scoreInfos.Count;
            _currentTextId = 0;
            _fadeObject    = new FadeObject(TimeSpan.FromMilliseconds(500), Color.White);
            _fadeObject.FadeInCompleted += _textFadeObject_FadeInCompleted;
            _fadeObject.FadeIn();
        }
Esempio n. 2
0
        public GameOrchestrator(
            Func <InfartGame> gameFactory,
            Func <MainMenuPage> menuFactory,
            Func <ScorePage> scoreFactory,
            GraphicsDevice graphicsDevice,
            AssetsLoader assets,
            ISettingsRepository settingsRepository,
            IScreenTransformationMatrixProvider matrixScaleProvider,
            IWebPageOpener webPageOpener,
            ILocalizedStringsRepository localizedStringsRepository)
        {
            _gameFactory  = gameFactory ?? throw new ArgumentNullException(nameof(gameFactory));
            _menuFactory  = menuFactory ?? throw new ArgumentNullException(nameof(menuFactory));
            _scoreFactory = scoreFactory ?? throw new ArgumentNullException(nameof(scoreFactory));

            _webPageOpener  = webPageOpener ?? throw new ArgumentNullException(nameof(webPageOpener));
            _graphicsDevice = graphicsDevice ?? throw new ArgumentNullException(nameof(graphicsDevice));

            _assets                     = assets ?? throw new ArgumentNullException(nameof(assets));
            _settingsRepository         = settingsRepository ?? throw new ArgumentNullException(nameof(settingsRepository));
            _localizedStringsRepository = localizedStringsRepository ?? throw new ArgumentNullException(nameof(localizedStringsRepository));

            _matrixScaleProvider = matrixScaleProvider ?? throw new ArgumentNullException(nameof(matrixScaleProvider));
            if (_matrixScaleProvider is DynamicScalingMatrixProvider)
            {
                (_matrixScaleProvider as DynamicScalingMatrixProvider).ScaleMatrixChanged += GameOrchestrator_ScaleMatrixChanged;
            }
            RegenerateRenderTarget();

            ShouldEndApplication = false;

            _stateTransition = new FadeObject(_fadeDuration, Color.White);
            _stateTransition.FadeOutCompleted += _stateTransition_FadeOutCompleted;
        }
Esempio n. 3
0
        public GameOrchestrator(
            Func <RellowGame> gameFactory,
            Func <MainMenuPage> menuFactory,
            GraphicsDevice graphicsDevice,
            IScreenTransformationMatrixProvider matrixScaleProvider,
            SoundManager soundManager,
            IWebPageOpener webPageOpener)
        {
            _gameFactory    = gameFactory ?? throw new ArgumentNullException(nameof(gameFactory));
            _menuFactory    = menuFactory ?? throw new ArgumentNullException(nameof(menuFactory));
            _webPageOpener  = webPageOpener ?? throw new ArgumentNullException(nameof(webPageOpener));
            _soundManager   = soundManager ?? throw new ArgumentNullException(nameof(soundManager));
            _graphicsDevice = graphicsDevice ?? throw new ArgumentNullException(nameof(graphicsDevice));

            _matrixScaleProvider = matrixScaleProvider ?? throw new ArgumentNullException(nameof(matrixScaleProvider));
            if (_matrixScaleProvider is DynamicScalingMatrixProvider)
            {
                (_matrixScaleProvider as DynamicScalingMatrixProvider).ScaleMatrixChanged += GameOrchestrator_ScaleMatrixChanged;
            }
            RegenerateRenderTarget();

            ShouldEndApplication = false;

            _stateTransition = new FadeObject(_fadeDuration, Color.White);
            _stateTransition.FadeOutCompleted += _stateTransition_FadeOutCompleted;
        }
Esempio n. 4
0
        public RellowGame(
            IScreenTransformationMatrixProvider matrixScaleProvider,
            AssetsLoader assetsLoader,
            GameOrchestrator gameOrchestrator,
            SoundManager soundManager,
            ISettingsRepository settingsRepository,
            ILocalizedStringsRepository localizedStringsRepository)
        {
            _localizedStringsRepository = localizedStringsRepository;
            _matrixScaleProvider        = matrixScaleProvider ?? throw new ArgumentNullException(nameof(matrixScaleProvider));

            _gameButtonsManager = new GameButtonsManager(
                assetsLoader,
                localizedStringsRepository,
                new Vector2(60f, 800f));

            _scoreDifferentialPopups = new List <PopupText>();

            _soundManager       = soundManager ?? throw new ArgumentNullException(nameof(soundManager));
            _gameOrchestrator   = gameOrchestrator ?? throw new ArgumentNullException(nameof(gameOrchestrator));
            _settingsRepository = settingsRepository ?? throw new ArgumentNullException(nameof(settingsRepository));

            _currentGameState = GameStates.PlayingWaitingForInput;
            _gameColors       = new UIColors(_gameButtonsManager.SpawnableColors.Select(c => c.ColorGraphic).ToArray());

            _choiceTime = TimeSpan.FromSeconds(2.5);

            _backgroundRectangle = new Rectangle(0, 0, matrixScaleProvider.VirtualWidth, matrixScaleProvider.VirtualHeight);

            _scoreTextTitle = localizedStringsRepository.Get(GameStringsLoader.ScoreStringKey);

            _gameButtonsManager = new GameButtonsManager(
                assetsLoader,
                localizedStringsRepository,
                new Vector2(60f, 720f));
            _gameButtonsManager.OnLost += _gameButtonsManager_OnLost;
            _gameButtonsManager.OnWon  += _gameButtonsManager_OnWon;

            _writingFont = assetsLoader.WritingFont;

            _colorTextBackgroundRectangle = new Rectangle(
                0, 500,
                matrixScaleProvider.VirtualWidth,
                120);

            _numberOfVictories = 0;
            _score             = 0;

            _timeProgressBar = new ProgressBar(
                new Rectangle(
                    0, 0,
                    matrixScaleProvider.VirtualWidth,
                    matrixScaleProvider.VirtualHeight),
                _gameColors.TimerBarColor,
                (int)_choiceTime.TotalMilliseconds);

            UpdateScoreString();
            NewRound();
        }
Esempio n. 5
0
 /// <summary>
 /// Camera constructor with scale matrix provider
 /// </summary>
 /// <param name="screenTransformationMatrixProvider"></param>
 public Camera2D(IScreenTransformationMatrixProvider screenTransformationMatrixProvider)
 {
     Rotation = 0;
     Zoom     = 1;
     Position = Vector2.Zero;
     _scalingMatrixProvider = screenTransformationMatrixProvider;
     Origin = new Vector2(screenTransformationMatrixProvider.VirtualWidth / 2f, screenTransformationMatrixProvider.VirtualHeight / 2f);
 }
Esempio n. 6
0
 protected override void Initialize()
 {
     _matrixScaleProvider = new DynamicScalingMatrixProvider(
         new GameWindowScreenSizeChangedNotifier(Window),
         GraphicsDeviceManager.GraphicsDevice,
         800, 480,
         true);
     base.Initialize();
 }
Esempio n. 7
0
        /// <summary>
        /// Touch event informations
        /// </summary>
        /// <param name="screenTransformationMatrixProvider"></param>
        /// <param name="time"></param>
        /// <param name="location"></param>
        public TouchEventArgs(
            IScreenTransformationMatrixProvider screenTransformationMatrixProvider,
            TimeSpan time,
            TouchLocation location)
        {
            RawTouchLocation = location;
            Time             = time;
            var pointPosition = screenTransformationMatrixProvider?.PointToScreen((int)location.Position.X, (int)location.Position.Y)
                                ?? location.Position.ToPoint();

            Position = new Vector2(pointPosition.X, pointPosition.Y);
        }
Esempio n. 8
0
        /// <summary>
        /// Mouse event infos
        /// </summary>
        /// <param name="screenTransformationMatrixProvider"></param>
        /// <param name="time"></param>
        /// <param name="previousState"></param>
        /// <param name="currentState"></param>
        /// <param name="button"></param>
        public MouseEventArgs(
            IScreenTransformationMatrixProvider screenTransformationMatrixProvider,
            TimeSpan time,
            MouseState previousState,
            MouseState currentState,
            MouseButton button = MouseButton.None)
        {
            PreviousState = previousState;
            CurrentState  = currentState;
            var pointPosition = screenTransformationMatrixProvider?.PointToScreen(currentState.X, currentState.Y)
                                ?? new Point(currentState.X, currentState.Y);

            Position         = new Vector2(pointPosition.X, pointPosition.Y);
            Button           = button;
            ScrollWheelValue = currentState.ScrollWheelValue;
            ScrollWheelDelta = currentState.ScrollWheelValue - previousState.ScrollWheelValue;
            Time             = time;
        }
Esempio n. 9
0
 /// <summary>
 /// Mouse input listener
 /// </summary>
 /// <param name="screenTransformationMatrixProvider"></param>
 public MouseListener(IScreenTransformationMatrixProvider screenTransformationMatrixProvider)
 {
     ScreenTransformationMatrixProvider = screenTransformationMatrixProvider;
     DoubleClickMilliseconds            = 500;
     DragThreshold = 2;
 }
Esempio n. 10
0
        public OverlayPopup(
            string title,
            string text,
            SpriteFont font,
            IScreenTransformationMatrixProvider matrixScaleProvider,
            ILocalizedStringsRepository localizedStringsRepository,
            Action playAgainFunction,
            Action exitFunction)
        {
            _font = font;

            _backgroundRectangle = new Rectangle(0, 0, matrixScaleProvider.VirtualWidth, matrixScaleProvider.VirtualHeight);
            _backgroundColor     = Color.Gray.WithAlpha(0.7f);

            int popupRectangleWidth = 900;

            _popupRectangle = new Rectangle(
                (matrixScaleProvider.VirtualWidth - popupRectangleWidth) / 2, 260,
                popupRectangleWidth, popupRectangleWidth + 200);
            _popupBackgroundColor = Definitions.PrimaryBackgroundColor.WithAlpha(1f);

            _popupRectangleShadow = new Rectangle(
                _popupRectangle.X + 15,
                _popupRectangle.Y + 15,
                _popupRectangle.Width,
                _popupRectangle.Height);
            _popupShadowBackgroundColor = Color.Black.WithAlpha(1f);

            _titleDrawingInfos = new DrawingInfos()
            {
                Position = new Vector2(
                    matrixScaleProvider.VirtualWidth / 2,
                    _popupRectangle.Y + _popupRectangle.Height / 4),
                Origin       = _font.GetTextCenter(title),
                OverlayColor = Color.Black
            };

            _textDrawingInfos = new DrawingInfos()
            {
                Position     = _titleDrawingInfos.Position + new Vector2(0f, 200f),
                Origin       = _font.GetTextCenter(text),
                Scale        = 0.6f,
                OverlayColor = Color.White
            };

            TitleText = title;
            Text      = text;

            _playAgainButton = new FloatingTextButton(
                localizedStringsRepository.Get(GameStringsLoader.PlayAgainStringKey),
                new DrawingInfos()
            {
                Position     = _textDrawingInfos.Position + new Vector2(0f, 250f),
                Origin       = _font.GetTextCenter(localizedStringsRepository.Get(GameStringsLoader.PlayAgainStringKey)),
                OverlayColor = Definitions.PrimaryForegroundColor,
            },
                _font,
                playAgainFunction,
                0.7f, 0.8f);

            _exitButton = new FloatingTextButton(
                localizedStringsRepository.Get(GameStringsLoader.ExitStringKey),
                new DrawingInfos()
            {
                Position     = _textDrawingInfos.Position + new Vector2(0f, 450f),
                Origin       = _font.GetTextCenter(localizedStringsRepository.Get(GameStringsLoader.ExitStringKey)),
                OverlayColor = Definitions.PrimaryForegroundColor
            },
                _font,
                exitFunction,
                0.7f, 0.8f);
        }
Esempio n. 11
0
        public MainMenuPage(
            AssetsLoader assetsLoader,
            GameOrchestrator gameOrchestrator,
            IScreenTransformationMatrixProvider matrixScaleProvider,
            ILocalizedStringsRepository localizedStringsRepository,
            RateMeDialog rateMeDialog,
            ISettingsRepository settingsRepository)
        {
            _backgroundRectangle = new Rectangle(0, 0, matrixScaleProvider.VirtualWidth, matrixScaleProvider.VirtualHeight);

            var titleFont = assetsLoader.TitleFont;

            _writingFont  = assetsLoader.WritingFont;
            _rateMeDialog = rateMeDialog ?? throw new ArgumentNullException(nameof(rateMeDialog));

            const string titleText = "RELLOW";

            _title = new FloatingText(
                titleText,
                new DrawingInfos()
            {
                Position     = new Vector2(matrixScaleProvider.VirtualWidth / 2f, 250f),
                Origin       = titleFont.GetTextCenter(titleText),
                OverlayColor = _foregroundColor
            },
                titleFont);

            var playText = localizedStringsRepository.Get(GameStringsLoader.PlayStringKey);

            _playButton = new FloatingTextButton(
                playText,
                new DrawingInfos()
            {
                Position     = new Vector2(matrixScaleProvider.VirtualWidth / 2f, 850f),
                Origin       = _writingFont.GetTextCenter(playText),
                OverlayColor = _foregroundColor
            },
                _writingFont,
                () =>
            {
                gameOrchestrator.SetGameState();
            });

            var aboutText = localizedStringsRepository.Get(GameStringsLoader.AboutStringKey);

            _aboutButton = new FloatingTextButton(
                aboutText,
                new DrawingInfos()
            {
                Position     = new Vector2(matrixScaleProvider.VirtualWidth / 2f, 1150f),
                Origin       = _writingFont.GetTextCenter(aboutText),
                OverlayColor = _foregroundColor
            },
                _writingFont,
                () =>
            {
                gameOrchestrator.SetAboutState();
            });

            var currentScore = settingsRepository.GetOrSetInt(Definitions.SCORE_KEY, 0);

            _scoreText         = $"{localizedStringsRepository.Get(GameStringsLoader.ScoreStringKey)}:{currentScore}";
            _scoreDrawingInfos = new DrawingInfos()
            {
                Position     = new Vector2(matrixScaleProvider.VirtualWidth / 2f, matrixScaleProvider.VirtualHeight - 250f - 200f),
                Origin       = _writingFont.GetTextCenter(_scoreText),
                OverlayColor = _scoreColor,
                Scale        = 0.5f
            };
        }
Esempio n. 12
0
        public GameOverPage(
            IScreenTransformationMatrixProvider matrixScaleProvider,
            AssetsLoader assets,
            ISettingsRepository settingsRepository,
            int thisGameNumberOfVegetablesEaten,
            int thisGameNumberOfMeters,
            int thisGameNumberOfFarts,
            ILocalizedStringsRepository localizedStringsRepository)
        {
            _font                = assets.Font;
            _background          = assets.OtherSprites["gameoverBackground"];
            _matrixScaleProvider = matrixScaleProvider;

            _gameOverTextDrawingInfos = new DrawingInfos()
            {
                Position = new Vector2()
                {
                    X = matrixScaleProvider.VirtualWidth / 2f, Y = 100f
                },
                Origin = _font.GetTextCenter(_gameOverText)
            };
            _gameOverScalingObject = new ScalingObject(1f, 1.2f, 1.0f);

            var bestFarts           = settingsRepository.GetOrSetInt(GameScores.BestFartsScoreKey, default(int));
            var bestNumberOfMeters  = settingsRepository.GetOrSetInt(GameScores.BestNumberOfMetersScoreKey, default(int));
            var bestVegetablesEaten = settingsRepository.GetOrSetInt(GameScores.BestVegetablesEatenScoreKey, default(int));

            var bestNumberOfVegetablesEatenRecord = false;

            if (thisGameNumberOfVegetablesEaten > bestVegetablesEaten)
            {
                settingsRepository.SetInt(GameScores.BestVegetablesEatenScoreKey, thisGameNumberOfVegetablesEaten);
                bestNumberOfVegetablesEatenRecord = true;
            }

            var bestAliveTimeRecord = false;

            if (thisGameNumberOfMeters > bestNumberOfMeters)
            {
                settingsRepository.SetInt(GameScores.BestNumberOfMetersScoreKey, thisGameNumberOfMeters);
                bestAliveTimeRecord = true;
            }

            var bestNumberOfFartsRecord = false;

            if (thisGameNumberOfFarts > bestFarts)
            {
                settingsRepository.SetInt(GameScores.BestFartsScoreKey, thisGameNumberOfFarts);
                bestNumberOfFartsRecord = true;
            }

            const float textsScale = 0.4f;

            _scoreInfos = new List <ScoreRecordText>()
            {
                new ScoreRecordText(
                    $"{localizedStringsRepository.Get(GameStringsLoader.NumberOfMetersString)}{thisGameNumberOfMeters}",
                    new DrawingInfos()
                {
                    Position     = new Vector2(_gameOverTextDrawingInfos.Position.X / 2, _gameOverTextDrawingInfos.Position.Y + 200f),
                    OverlayColor = Color.White.WithAlpha(0),
                    Scale        = textsScale
                },
                    !bestAliveTimeRecord ? "       " : "Record!"),

                new ScoreRecordText(
                    $"{localizedStringsRepository.Get(GameStringsLoader.NumbersOfFartsString)}{thisGameNumberOfFarts}",
                    new DrawingInfos()
                {
                    Position     = new Vector2(_gameOverTextDrawingInfos.Position.X / 2, _gameOverTextDrawingInfos.Position.Y + 125f),
                    OverlayColor = Color.White.WithAlpha(0),
                    Scale        = textsScale
                },
                    !bestNumberOfFartsRecord ? "       " : "Record!"),

                new ScoreRecordText(
                    $"{localizedStringsRepository.Get(GameStringsLoader.NumberOfVegetablesEaten)}{thisGameNumberOfVegetablesEaten}",
                    new DrawingInfos()
                {
                    Position     = new Vector2(_gameOverTextDrawingInfos.Position.X / 2, _gameOverTextDrawingInfos.Position.Y + 162f),
                    OverlayColor = Color.White.WithAlpha(0),
                    Scale        = textsScale
                },
                    !bestNumberOfVegetablesEatenRecord ? "       " : "Record!"),
            };

            _nTexts        = _scoreInfos.Count;
            _currentTextId = 0;
            _fadeObject    = new FadeObject(TimeSpan.FromMilliseconds(200), Color.White);
            _fadeObject.FadeInCompleted += _textFadeObject_FadeInCompleted;
            _fadeObject.FadeIn();
        }
Esempio n. 13
0
        public MainMenuPage(
            AssetsLoader assets,
            RateMeDialog rateMeDialog,
            SoundManager soundManager,
            IScreenTransformationMatrixProvider matrixScaleProvider,
            ILocalizedStringsRepository localizedStringsRepository)
        {
            _font = assets.Font;
            _matrixScaleProvider = matrixScaleProvider;
            _rateMeDialog        = rateMeDialog ?? throw new ArgumentNullException(nameof(rateMeDialog));
            _soundManager        = soundManager ?? throw new ArgumentNullException(nameof(soundManager));

            _background      = assets.OtherSprites["menuBackground"];
            _playText        = localizedStringsRepository.Get(GameStringsLoader.PlayButtonString);
            _scoreText       = localizedStringsRepository.Get(GameStringsLoader.ScoreButtonString);
            _fartText        = localizedStringsRepository.Get(GameStringsLoader.FartButtonString);
            _titleImage      = assets.OtherSprites["gameTitle"];
            _achievementText = "about";

            _titleScalingObject = new ScalingObject(1f, 1.2f, 1.0f);
            _titleDrawingInfos  = new DrawingInfos()
            {
                Position = new Vector2(matrixScaleProvider.VirtualWidth / 2f, 100f),
                Origin   = _titleImage.SpriteCenter
            };

            _playScalingObject = new ScalingObject(0.5f, 0.7f, 1f);
            _playDrawingInfos  = new DrawingInfos()
            {
                Position = new Vector2(140f, 250f),
                Origin   = _font.GetTextCenter(_playText)
            };
            _playTextSize = _font.MeasureString(_playText);

            _fartScalingObject = new ScalingObject(0.5f, 0.7f, 1f);
            _fartDrawingInfos  = new DrawingInfos()
            {
                Position     = new Vector2(140f, 320f),
                Origin       = _font.GetTextCenter(_fartText),
                OverlayColor = new Color(155, 88, 48)
            };
            _fartTextSize = _font.MeasureString(_fartText);

            _scoreTextSize      = _font.MeasureString(_scoreText);
            _scoreScalingObject = new ScalingObject(0.5f, 0.7f, 1f);
            _scoreDrawingInfos  = new DrawingInfos()
            {
                Position = new Vector2(matrixScaleProvider.VirtualWidth - 150f, 250f),
                Origin   = _font.GetTextCenter(_scoreText)
            };

            _aboutTextSize      = _font.MeasureString(_achievementText);
            _aboutScalingObject = new ScalingObject(0.5f, 0.7f, 1f);
            _aboutDrawingInfos  = new DrawingInfos()
            {
                Position = new Vector2(matrixScaleProvider.VirtualWidth - 150f, 320f),
                Origin   = _font.GetTextCenter(_achievementText)
            };

            _soundManager.PlayMenuBackground();
        }
Esempio n. 14
0
 /// <summary>
 /// Touch listener constructor
 /// </summary>
 /// <param name="screenTransformationMatrixProvider"></param>
 public TouchListener(IScreenTransformationMatrixProvider screenTransformationMatrixProvider)
 {
     _screenTransformationMatrixProvider = screenTransformationMatrixProvider ?? throw new ArgumentNullException(nameof(screenTransformationMatrixProvider));
 }