Beispiel #1
0
        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;
            }
        }
Beispiel #2
0
        /// <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);
                    }
                }
            }
        }