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); }
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; } }
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; } } } }
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); }
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); } }
// 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; } }
/// <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 }