Пример #1
0
        public bool Initialise()
        {
            // Reset stuff
            _playerScore = 0L;
            _playername  = "123456";
            _ready       = true;

            #region Getting Player Meta Data

            var getNameArgs = new PostOfficeEventArgs()
            {
                SendAddress = "PlayerMetaData",
                MessageName = "RequestName",
                Data        = new byte[0]
            };

            var getScoreArgs = new PostOfficeEventArgs()
            {
                SendAddress = "PlayerMetaData",
                MessageName = "RequestScore",
                Data        = new byte[0]
            };

            _postOfficeService.SendMail(this.StateRegisterName, getNameArgs);
            _postOfficeService.SendMail(this.StateRegisterName, getScoreArgs);

            #endregion

            return(true);
        }
Пример #2
0
        public void LetterBox(string returnAddress, PostOfficeEventArgs args)
        {
            // All in and out messages
            switch (args.MessageName)
            {
            // external power changes the current name
            case "ChangeName":
                var newName = Encoding.ASCII.GetString(args.Data);

                _playerData.Name = newName;

                break;

            // External power adds value to the current score.
            case "AddScore":

                var newScore = BitConverter.ToInt32(args.Data, 0);

                _playerData.PlayerScore += newScore;

                break;

            // Sends out current name in letter
            case "RequestName":

                var reqArgs = new PostOfficeEventArgs()
                {
                    SendAddress = returnAddress,
                    MessageName = "GetPlayerName",
                    Data        = Encoding.ASCII.GetBytes(_playerData.Name)
                };

                _postOfficeService.SendMail(this.LetterboxName, reqArgs);

                break;

            // Sends out current score in letter
            case "RequestScore":

                var reqScoreArgs = new PostOfficeEventArgs()
                {
                    SendAddress = returnAddress,
                    MessageName = "GetPlayerScore",
                    Data        = BitConverter.GetBytes(_playerData.PlayerScore)
                };

                _postOfficeService.SendMail(this.LetterboxName, reqScoreArgs);

                break;
            }
        }
Пример #3
0
        public void Update(MouseState mouseState, KeyboardState keyboardState)
        {
            if (_canUpdate)
            {
                // Set up mouse collision rectangle
                var mouseCollisionRectangle = new Rectangle(mouseState.X, mouseState.Y, 1, 1);

                if (mouseState.LeftButton == ButtonState.Pressed && mouseCollisionRectangle.Intersects(_buttonCollisionRectangle))
                {
                    _clickReady = true;
                }


                if (mouseState.LeftButton == ButtonState.Released && _clickReady)
                {
                    if (mouseCollisionRectangle.Intersects(_buttonCollisionRectangle))
                    {
                        // Collision occured, send letter
                        _postOffice.SendMail(_guid.ToString(), _args);

                        // Un-ready click
                        _clickReady = false;
                    }
                }
            }
        }
Пример #4
0
        public bool Stop()
        {
            // Send finished name off to the player meta data
            var args = new PostOfficeEventArgs()
            {
                SendAddress = "PlayerMetaData",
                MessageName = "ChangeName",
                Data        = Encoding.ASCII.GetBytes(FormatName(_nameHelper.GetName(), false))
            };

            // Start process to reset score to 0
            var scoreargs = new PostOfficeEventArgs()
            {
                SendAddress = "PlayerMetaData",
                MessageName = "RequestScore",
                Data        = new byte[10]
            };

            _postOfficeService.SendMail(this.StateRegisterName, args);
            _postOfficeService.SendMail(this.StateRegisterName, scoreargs);

            return(true);
        }
Пример #5
0
        public void Update(MouseState mouseState, KeyboardState keyboardState)
        {
            // Update all the text
            _amountOfArchers.DisplayText = $"{_archers.Count.ToString()} Archer(s)";
            _rofLevel.DisplayText        = $"Level {_statsManager.RateOfFireLevel}";
            _damageLevel.DisplayText     = $"{_statsManager.DamageModifier}x Damage";
            _money.DisplayText           = $"Current Funds: M{_moneyManager.Money}";
            _waveText.DisplayText        = $"Wave {_wave}";
            _gateHealth.DisplayText      = $"Gate Health: {_gate.Health}";

            // Update all the upgrade buttons
            foreach (var upgradeButton in _upgradeButtons)
            {
                upgradeButton.Update(mouseState, keyboardState);
            }

            // Update the quit button
            _quitButton.Update(mouseState, keyboardState);

            // Update each archer
            foreach (var archer in _archers)
            {
                archer.Update(mouseState, keyboardState);
            }

            // If in a wave
            if (_inWave)
            {
                // Go through all enemies, update, if dead add to list
                var deadSquirrels = new List <Squirrel>();
                foreach (var squirrel in _enemies)
                {
                    squirrel.Update(mouseState, keyboardState);

                    if (!squirrel.Alive)
                    {
                        deadSquirrels.Add(squirrel);
                    }
                }

                // 15 money per squirrel
                var newMoneyArgs = new PostOfficeEventArgs()
                {
                    SendAddress = "MoneyManager",
                    MessageName = "AddMoney",
                    Data        = BitConverter.GetBytes(15 * deadSquirrels.Count)
                };
                _postOfficeService.SendMail(this.LetterboxName, newMoneyArgs);

                // Add points 10 points per squirrel
                var newScoreArgs = new PostOfficeEventArgs()
                {
                    SendAddress = "PlayerMetaData",
                    MessageName = "AddScore",
                    Data        = BitConverter.GetBytes(10 * deadSquirrels.Count)
                };
                _postOfficeService.SendMail(this.LetterboxName, newScoreArgs);

                foreach (var deadSquirrel in deadSquirrels)
                {
                    _enemies.Remove(deadSquirrel);
                }

                // If theres enemies
                if (_enemies.Count > 0)
                {
                    // order the squillows
                    var orderedSquirrels = _enemies.OrderBy(r => r.Position.X);

                    foreach (var archer in _archers)
                    {
                        // One of first 5
                        var firstX = 10;

                        var amount = orderedSquirrels.Count();
                        amount = amount >= firstX ? firstX : amount;

                        Random r     = new Random((int)DateTime.Now.Ticks);
                        var    index = r.Next(0, amount);

                        archer.FireArrow(orderedSquirrels.ToArray()[index]);
                    }
                }
            }

            // If all enemies are dead
            if (_enemies.Count == 0)
            {
                _wave++;
                _inWave = false;
                GenerateEnemies();
            }

            // If the gate is dead
            if (_gate.Health <= 0)
            {
                var changeStateArgs = new PostOfficeEventArgs()
                {
                    SendAddress = "StateManager",
                    MessageName = "ChangeState",
                    Data        = Encoding.ASCII.GetBytes("Lose")
                };
                _postOfficeService.SendMail(this.LetterboxName, changeStateArgs);
            }
        }
Пример #6
0
        // All post office messages coming in and replies
        public void LetterBox(string returnAddress, PostOfficeEventArgs args)
        {
            // to disable a button
            var disableArgs = new PostOfficeEventArgs()
            {
                SendAddress = returnAddress,
                MessageName = "Disable",
                Data        = new byte[0]
            };

            // To reduce the player money
            var reduceMoneyArgs = new PostOfficeEventArgs()
            {
                SendAddress = "MoneyManager",
                MessageName = "AddMoney",
                Data        = BitConverter.GetBytes(-30)
            };

            switch (args.MessageName)
            {
            // Change damage multiplier
            case "ModifyArrowDamage":

                if (CanIncreaseDamage && _moneyManager.Money >= 30)
                {
                    _damageModifier++;     // Increases the damage output by 1x

                    if (!CanIncreaseDamage)
                    {
                        // Disable damage upgrade button
                        _postOfficeService.SendMail(this.LetterboxName, disableArgs);
                    }

                    // reduce the money
                    _postOfficeService.SendMail(this.LetterboxName, reduceMoneyArgs);
                }


                break;

            // Change rate of fire
            case "ModifyRateOfFire":

                if (CanHalfRof && _moneyManager.Money >= 30)
                {
                    _rateOfFire /= 2;     // Doubles the rate of fire of projectiles.
                    _timesHalvedRoF++;

                    if (!CanHalfRof)
                    {
                        // Disable the rof upgrade button
                        _postOfficeService.SendMail(this.LetterboxName, disableArgs);
                    }

                    // Reduce the money
                    _postOfficeService.SendMail(this.LetterboxName, reduceMoneyArgs);
                }


                break;
            }
        }
Пример #7
0
        /// <summary>
        /// LoadContent will be called once per game and is the place to load
        /// all of your content.
        /// </summary>
        protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            _spriteBatch = new SpriteBatch(GraphicsDevice);

            // Load textures and fonts
            _font          = Content.Load <SpriteFont>("BlackChancery");
            _buttonTexture = Content.Load <Texture2D>("WoodButton");
            var squirrel1 = Content.Load <Texture2D>("squirrel1");
            var gateLevel = Content.Load <Texture2D>("gate_level");

            var upgradeBar = new Texture2D(GraphicsDevice, GraphicsDevice.PresentationParameters.Bounds.Width, 100);

            var colorData = new Color[100 * GraphicsDevice.PresentationParameters.Bounds.Width];

            for (int i = 0; i < 100 * GraphicsDevice.PresentationParameters.Bounds.Width; i++)
            {
                colorData[i] = Color.DarkSlateGray;
            }
            upgradeBar.SetData(colorData);

            var stone       = new Texture2D(GraphicsDevice, 10, 10);
            var stoneColors = new Color[100];

            for (int i = 0; i < 100; i++)
            {
                stoneColors[i] = Color.Black;
            }

            stone.SetData(stoneColors);

            // Create Objects
            var gate = new Gate();

            // Create factories
            var buttonFactory   = new ButtonFactory(_buttonTexture, _font, _postOffice);
            var textFactory     = new TextFactory(_font);
            var squirrelFactory = new SquirrelFactory(squirrel1, gate);


            // Create Managers
            var leaderboardManager    = new LeaderboardManager();
            var playerMetaDataManager = new PlayerMetaDataManager(_postOffice);

            var moneyManager = new MoneyManager(_postOffice);
            var statsManager = new StatsManager(_postOffice, moneyManager);

            // Register states to the state manager
            _stateManager.RegisterState(new MenuState(buttonFactory, textFactory));

            var nameInputState = new NameInputState(buttonFactory, textFactory, _postOffice,
                                                    GraphicsDevice.PresentationParameters.Bounds);

            _stateManager.RegisterState(nameInputState);
            _stateManager.RegisterState(new LeaderboardState(buttonFactory, textFactory, leaderboardManager));
            _stateManager.RegisterState(new ExitState(this));

            var playState = new PlayState(_postOffice, squirrelFactory, buttonFactory, textFactory, statsManager, moneyManager, gateLevel,
                                          GraphicsDevice.PresentationParameters.Bounds, upgradeBar, stone, gate);

            _stateManager.RegisterState(playState);

            var loseState = new LoseState(buttonFactory, textFactory, _postOffice, leaderboardManager);

            _stateManager.RegisterState(loseState);

            var flavourText = new FlavourTextState(buttonFactory, textFactory);

            _stateManager.RegisterState(flavourText);


            // Register clients to the post office
            _postOffice.RegisterClient((ILetterbox)_stateManager, "StateManager");
            _postOffice.RegisterClient((ILetterbox)playerMetaDataManager, playerMetaDataManager.LetterboxName);
            _postOffice.RegisterClient((ILetterbox)nameInputState, nameInputState.StateRegisterName);
            _postOffice.RegisterClient((ILetterbox)statsManager, statsManager.LetterboxName);
            _postOffice.RegisterClient((ILetterbox)playState, playState.LetterboxName);
            _postOffice.RegisterClient((ILetterbox)moneyManager, moneyManager.LetterboxName);
            _postOffice.RegisterClient((ILetterbox)gate, "Gate");
            _postOffice.RegisterClient((ILetterbox)loseState, loseState.StateRegisterName);

            // Set the initial state to the menu
            _postOffice.SendMail("Null",
                                 new PostOfficeEventArgs()
            {
                SendAddress = "StateManager",
                MessageName = "SetInitialState",
                Data        = Encoding.ASCII.GetBytes("Menu")
            });

            // TODO: use this.Content to load your game content here
        }