private static void SpawnRain() { if (spawnTimer.TimeElapsedInMilliSeconds > 50) { spawnTimer.Reset(); int[] indices = GameWorld.ChunkManager.GetVisibleIndexes(); if (indices == null) { return; } int width = GameWorld.ChunkManager.GetVisibileWidth(); int starting = indices[0]; // Do the top row as always. for (int i = starting; i < starting + width; i++) { Tile tile = GameWorld.GetTile(i); ParticleSystem.Add(Particles.ParticleType.Rain, CalcHelper.GetRandXAndY(tile.DrawRectangle), new Vector2(0, 8), Color.Blue); } // This spawns particles on areas that have just been put into view. var newIndices = indices.Except(lastIndices); foreach (var i in newIndices) { Tile tile = GameWorld.GetTile(i); ParticleSystem.Add(Particles.ParticleType.Rain, CalcHelper.GetRandXAndY(tile.DrawRectangle), new Vector2(0, 8), Color.Blue); } lastIndices = indices; } }
/// <summary> /// Checks for input to draw, erase or select tiles using the mouse. /// </summary> private static void CheckForMouseInput() { _mouseRectInGameWorld = InputSystem.GetMouseRectGameWorld(); IndexOfMouse = CalcHelper.GetIndexInGameWorld(_mouseRectInGameWorld.X, _mouseRectInGameWorld.Y); if (!IsIntersectingUi()) { if (InputSystem.IsLeftMousePressed() && InputSystem.IsRightMousePressed()) { return; } if (InputSystem.IsLeftMousePressed()) { if (Brush.CurrentBrushMode == Brush.BrushMode.Build && lastAddedTile != IndexOfMouse) { lastAddedTile = IndexOfMouse; lastRemovedTile = -1; UpdateSelectedTiles(SelectedId); } else if (Brush.CurrentBrushMode == Brush.BrushMode.Erase && lastRemovedTile != IndexOfMouse) { lastRemovedTile = IndexOfMouse; lastAddedTile = -1; UpdateSelectedTiles(0); } else if (Brush.CurrentBrushMode == Brush.BrushMode.Select) { Tile tile = GameWorld.GetTile(IndexOfMouse); tile.InteractInEditMode(); } } if (InputSystem.IsRightMousePressed()) { if (!OnWallMode) { ChangeWallModeTo(true); } if (Brush.CurrentBrushMode == Brush.BrushMode.Build && lastAddedTile != IndexOfMouse) { // Entities cannot be placed in wall mode. if ((int)SelectedId < 200) { lastAddedTile = IndexOfMouse; lastRemovedTile = -1; UpdateSelectedTiles(SelectedId); } } else if (Brush.CurrentBrushMode == Brush.BrushMode.Erase && lastRemovedTile != IndexOfMouse) { lastRemovedTile = IndexOfMouse; lastAddedTile = -1; UpdateSelectedTiles(0); } } else if (InputSystem.IsMiddleMousePressed()) { TileType lastSelectedId = SelectedId; SelectedId = GameWorld.WorldData.TileIDs[IndexOfMouse]; if (SelectedId == 0) { SelectedId = GameWorld.WorldData.WallIDs[IndexOfMouse]; } if (SelectedId != 0) { HotBar.AddToHotBarFromWorld(SelectedId); Brush.ChangeBrushMode(Brush.BrushMode.Build); } else { SelectedId = lastSelectedId; } } else { if (OnWallMode) { ChangeWallModeTo(false); } } } }