/// <summary> /// Initializes a new instance of the <see cref="BuildMenuManager"/> class. /// </summary> /// <param name="spriteBatch">The sprite batch.</param> /// <param name="camera">The camera.</param> /// <param name="playingStateInterface">The playing state interface.</param> /// <param name="assetManager">The asset manager.</param> /// <param name="terrainManager">The terrain manager.</param> public BuildMenuManager(SpriteBatch spriteBatch, Camera camera, PlayingStateInterface playingStateInterface, AssetManager assetManager, TerrainManager terrainManager, JobManager jobManager) { // Setters _spriteBatch = spriteBatch; _camera = camera; _playingStateInterface = playingStateInterface; _playingStateInterface.OnMenuClicked += OnRemoval; _playingStateInterface.OnSubMenuClicked += OnBuildWall; _assetManager = assetManager; _terrainManager = terrainManager; _jobManager = jobManager; _selectWallArea = new SelectWallArea(_assetManager, _camera, _spriteBatch, _terrainManager); _selectWallArea.OnSelectionSelected += OnSelectionSelected; _selectWallArea.OnSelectionCancelled += OnSelectionCancelled; _selectAreaRemoval = new SelectedAreaRemoval(_assetManager, _camera, _spriteBatch, _terrainManager); _selectAreaRemoval.OnSelectionRemovalSelected += OnRemoveSelected; _selectAreaRemoval.OnSelectionCancelled += OnSelectionCancelled; _selectingType = SelectingAreaType.None; _buildSelectionName = ""; }
/// <summary> /// Called when player clicks [remove]. /// </summary> /// <param name="element">The element.</param> /// <param name="mouseState">State of the mouse.</param> private void OnRemoval(string element, MouseState mouseState) { GameState.State = GameStateType.SELECTING; if (_selectingType != SelectingAreaType.Removal) { _selectAreaRemoval.SelectArea(mouseState); _selectingType = SelectingAreaType.Removal; } else { _selectAreaRemoval.CancelSelection(); } }
/// <summary> /// Called when player clicks [build wall]. /// </summary> /// <param name="element">The element.</param> /// <param name="mouseState">State of the mouse.</param> private void OnBuildWall(string element, MouseState mouseState) { GameState.State = GameStateType.SELECTING; // If the player isn't selecting something already and wants to build a wood/brick/stone wall if (_selectingType != SelectingAreaType.Wall && element == GameText.BuildMenu.BUILDWOODWALL || element == GameText.BuildMenu.BUILDBRICKWALL || element == GameText.BuildMenu.BUILDSTONEWALL) { // Save the element name the player wants to build (ie stone wall) _buildSelectionName = element; _selectWallArea.SelectArea(mouseState); // Player is now selecting an area, set bool to true _selectingType = SelectingAreaType.Wall; } else { _selectWallArea.CancelSelection(); } }
private void OnRemoveSelected(Dictionary <Rectangle, Texture2D> selectedTiles) { // For each rectangle in selected tiles rectangle foreach (var rectangle in selectedTiles.Keys) { // Get the tile by selecting the start position of the rectangle Tile tile = ChunkManager.TileAtWorldPosition(rectangle.X, rectangle.Y); if (tile != null && tile.IsOccupied) { if (tile.Flora != null) { _terrainManager.RemoveFlora(tile); } else if (tile.Wall != null) { _terrainManager.RemoveWall(tile); } } } _selectingType = SelectingAreaType.None; GameState.State = GameStateType.PLAYING; }
/// <summary> /// Called when a [selection is selected]. /// </summary> /// <param name="selectedTiles">The selected tiles.</param> private void OnSelectionSelected(Dictionary <Rectangle, Texture2D> selectedTiles) { // If the name of the element that was passed through OnBuildWall is build wood/brick/stone if (_buildSelectionName == GameText.BuildMenu.BUILDWOODWALL || _buildSelectionName == GameText.BuildMenu.BUILDBRICKWALL || _buildSelectionName == GameText.BuildMenu.BUILDSTONEWALL) { // For each rectangle in selected tiles rectangle foreach (var rectangle in selectedTiles.Keys) { // Get the tile by selecting the start position of the rectangle Tile tile = ChunkManager.TileAtWorldPosition(rectangle.X, rectangle.Y); if (tile != null) { Wall wall; if (_buildSelectionName == GameText.BuildMenu.BUILDWOODWALL) { wall = new Wall(tile.Position, LinkedSpriteType.WoodWall); _jobManager.CreateJob(wall, tile); } else if (_buildSelectionName == GameText.BuildMenu.BUILDBRICKWALL) { wall = new Wall(tile.Position, LinkedSpriteType.BrickWall); _jobManager.CreateJob(wall, tile); } else if (_buildSelectionName == GameText.BuildMenu.BUILDSTONEWALL) { wall = new Wall(tile.Position, LinkedSpriteType.StoneWall); _jobManager.CreateJob(wall, tile); } } } } _selectingType = SelectingAreaType.None; GameState.State = GameStateType.PLAYING; }
/// <summary> /// Called when [selection is cancelled]. /// </summary> private void OnSelectionCancelled() { _selectingType = SelectingAreaType.None; GameState.State = GameStateType.PLAYING; }