示例#1
0
        public override void OnMouseDragMove(MouseEventArgs e)
        {
            Point2I mousePos     = new Point2I(e.X, e.Y);
            Point2I pointInLevel = LevelDisplayControl.SampleLevelPixelPosition(mousePos);

            // Update selection box.
            if (e.Button == MouseButtons.Left && isCreatingSelectionBox)
            {
                Point2I     tileCoord = LevelDisplayControl.SampleLevelTileCoordinates(mousePos);
                Level       level     = EditorControl.Level;
                Rectangle2I selectionBox;

                if (System.Windows.Forms.Control.ModifierKeys.HasFlag(KEYMOD_ROOM_MODE))
                {
                    Point2I roomCoord1   = level.GetRoomLocation((LevelTileCoord)dragBeginTileCoord);
                    Point2I roomCoord2   = level.GetRoomLocation((LevelTileCoord)tileCoord);
                    Point2I roomCoordMin = GMath.Min(roomCoord1, roomCoord2);
                    Point2I roomCoordMax = GMath.Max(roomCoord1, roomCoord2);

                    Rectangle2I levelDimensions = new Rectangle2I(Point2I.Zero, level.Dimensions);
                    selectionBox        = new Rectangle2I(roomCoordMin, roomCoordMax - roomCoordMin + Point2I.One);
                    selectionBox        = Rectangle2I.Intersect(selectionBox, levelDimensions);
                    selectionBox.Point *= level.RoomSize;
                    selectionBox.Size  *= level.RoomSize;
                }
                else
                {
                    Point2I minCoord = GMath.Min(dragBeginTileCoord, tileCoord);
                    Point2I maxCoord = GMath.Max(dragBeginTileCoord, tileCoord);

                    Rectangle2I levelBounds = new Rectangle2I(Point2I.Zero, level.RoomSize * level.Dimensions);
                    selectionBox = new Rectangle2I(minCoord, maxCoord - minCoord + Point2I.One);
                    //selectionBox = Rectangle2I.Intersect(selectionBox, levelBounds);
                }

                LevelDisplayControl.SetSelectionGridArea(selectionBox, level);
            }
            else if (e.Button == MouseButtons.Left && isMovingSelectionBox)
            {
                Point2I moveAmount;

                if (System.Windows.Forms.Control.ModifierKeys.HasFlag(KEYMOD_ROOM_MODE))
                {
                    moveAmount  = pointInLevel - dragBeginPoint;
                    moveAmount  = (Point2I)GMath.Round((Vector2F)moveAmount / (editorControl.Level.RoomSize * GameSettings.TILE_SIZE));
                    moveAmount *= editorControl.Level.RoomSize;
                }
                else
                {
                    moveAmount = pointInLevel - dragBeginPoint;
                    moveAmount = (Point2I)GMath.Round((Vector2F)moveAmount / GameSettings.TILE_SIZE);
                }

                Point2I selectionBoxPoint = selectionBoxBeginPoint + moveAmount;
                LevelDisplayControl.MoveSelectionGridArea(selectionBoxPoint);
            }
        }
示例#2
0
        public override void OnMouseDoubleClick(MouseEventArgs e)
        {
            base.OnMouseDoubleClick(e);

            Point2I mousePos   = new Point2I(e.X, e.Y);
            Point2I levelPoint = LevelDisplayControl.SampleLevelPixelPosition(mousePos);

            // Open the object properties form when double clicking on a tile.
            foreach (BaseTileDataInstance tile in LevelDisplayControl.SelectedTiles)
            {
                Rectangle2I bounds = tile.GetBounds();
                bounds.Point += tile.Room.Location * tile.Room.Size * GameSettings.TILE_SIZE;

                if (bounds.Contains(levelPoint))
                {
                    EditorControl.EditorForm.OpenObjectPropertiesEditor(tile);
                    break;
                }
            }
        }
示例#3
0
        public override void OnMouseDragBegin(MouseEventArgs e)
        {
            Point2I mousePos  = new Point2I(e.X, e.Y);
            Point2I tileCoord = LevelDisplayControl.SampleLevelTileCoordinates(mousePos);
            Point2I point     = LevelDisplayControl.SampleLevelPixelPosition(mousePos);

            if (isCreatingSelectionBox || isMovingSelectionBox)
            {
                return;
            }

            // Draw a new selecion box.
            if (e.Button == MouseButtons.Left)
            {
                if (EditorControl.Level == LevelDisplayControl.SelectionGridLevel &&
                    LevelDisplayControl.SelectionBox.Contains(point))
                {
                    // Begin moving the selection box.
                    isMovingSelectionBox   = true;
                    dragBeginPoint         = point;
                    dragBeginTileCoord     = tileCoord;
                    selectionBoxBeginPoint = LevelDisplayControl.SelectionGridArea.Point;
                    //LevelDisplayControl.PickupSelectionGrid();

                    // Duplicate selection if holding Ctrl.
                    if (System.Windows.Forms.Control.ModifierKeys.HasFlag(KEYMOD_DUPLICATE))
                    {
                        LevelDisplayControl.DuplicateSelectionGrid();
                    }
                }
                else
                {
                    LevelDisplayControl.PlaceSelectionGrid();

                    // Create a new selection box.
                    isCreatingSelectionBox = true;
                    dragBeginPoint         = point;
                    dragBeginTileCoord     = tileCoord;

                    Rectangle2I selectionBox;
                    Level       level = EditorControl.Level;

                    if (System.Windows.Forms.Control.ModifierKeys.HasFlag(KEYMOD_ROOM_MODE))
                    {
                        selectionBox = new Rectangle2I(level.GetRoomLocation(
                                                           (LevelTileCoord)dragBeginTileCoord), Point2I.One);
                        Rectangle2I levelBounds = new Rectangle2I(Point2I.Zero, level.Dimensions);
                        selectionBox        = Rectangle2I.Intersect(selectionBox, levelBounds);
                        selectionBox.Point *= level.RoomSize;
                        selectionBox.Size  *= level.RoomSize;
                    }
                    else
                    {
                        selectionBox = new Rectangle2I(dragBeginTileCoord, Point2I.One);
                        Rectangle2I levelBounds = new Rectangle2I(Point2I.Zero, level.RoomSize * level.Dimensions);
                        selectionBox = Rectangle2I.Intersect(selectionBox, levelBounds);
                    }

                    LevelDisplayControl.SetSelectionGridArea(selectionBox, level);
                }
            }
        }