示例#1
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);
                    }
                }
            }
        }