private void HandleInput() { if (keystate.IsKeyDown(Keys.A) && prevKeystate.IsKeyUp(Keys.A)) { tower = new ArrowTower(arrowTower, Vector2.Zero, bullet, 1, soundBank); if (tower.Cost <= money) { towerPreview.ChangeTowerTexture(arrowTower); towerPreview.ChangeRangeTexture(arrowRange, tower.Range); } else { tower = null; } } if (keystate.IsKeyDown(Keys.S) && prevKeystate.IsKeyUp(Keys.S)) { tower = new SpikeTower(spikeTower, Vector2.Zero, bullet, 1, soundBank); if (tower.Cost <= money) { towerPreview.ChangeTowerTexture(spikeTower); towerPreview.ChangeRangeTexture(spikeRange, tower.Range); } else { tower = null; } } if (keystate.IsKeyDown(Keys.B) && prevKeystate.IsKeyUp(Keys.B)) { tower = new BombTower(bombTower, Vector2.Zero, bullet, 1, soundBank); if (tower.Cost <= money) { towerPreview.ChangeTowerTexture(bombTower); towerPreview.ChangeRangeTexture(arrowRange, tower.Range); } else { tower = null; } } if (keystate.IsKeyDown(Keys.Space) && prevKeystate.IsKeyUp(Keys.Space)) { Button waveButton = guiManager.GetButton("wave"); if (waveButton.Visible) { waveManager.StartNextWave(); } waveButton.Visible = false; } }
//////////////////////////////////////////////////////////////////////////////////////////////////// /// <summary> Reference page contains links to related code samples. </summary> /// /// <remarks> Frost, 16.11.2010. </remarks> /// /// <param name="gameTime"> Time passed since the last call to Update. </param> //////////////////////////////////////////////////////////////////////////////////////////////////// protected override void Update(GameTime gameTime) { mouseState = Mouse.GetState(); keystate = Keyboard.GetState(); this.Window.Title = "X : " + mouseState.X.ToString() + " Y : " + mouseState.Y.ToString(); cellX = (int)(mouseState.X / Engine.TileWidth); cellY = (int)(mouseState.Y / Engine.TileHeight); tileX = cellX * Engine.TileWidth; tileY = cellY * Engine.TileHeight; HandleInput(); waveManager.Update(gameTime); if (waveManager.CurrentWave.EnemyReachedEnd) { lives--; waveManager.CurrentWave.EnemyReachedEnd = false; } if (waveManager.waveFinished) { Button waveButton = guiManager.GetButton("wave"); waveButton.Visible = true; } guiManager.Update(gameTime); if (mouseState.RightButton == ButtonState.Released && oldState.RightButton == ButtonState.Pressed) { tower = null; towerSelected = false; } if (IsInBounds(cellX, cellY) && this.IsActive && level.GetCellIndex(cellX, cellY) != 1) { if (mouseState.LeftButton == ButtonState.Released && oldState.LeftButton == ButtonState.Pressed) { selectedTower = towerManager.IsTowerSelected(tileX, tileY); if (selectedTower != null) { selectedTower.Selected = true; towerSelected = true; selectedTowerPos = selectedTower.Position; if (selectedTower is ArrowTower || selectedTower is BombTower) { selectedType = 1; } else { selectedType = 2; } } else { towerSelected = false; CreateTower(); } } } if (towerSelected) { if (keystate.IsKeyDown(Keys.U) && prevKeystate.IsKeyUp(Keys.U)) { if (money >= selectedTower.CostNextLevel && selectedTower.Tier != 3) { money -= selectedTower.CostNextLevel; selectedTower.Upgrade(); } } } towerManager.Update(gameTime, waveManager.GetEnemies()); foreach (Enemy enemy in waveManager.GetEnemies()) { if (enemy.IsDead) { money += enemy.BountyGiven; } } prevKeystate = keystate; oldState = mouseState; base.Update(gameTime); audioEngine.Update(); exitGameOnEsc(); }