예제 #1
0
        public AddAdjoiningRoomUndoInstance(EditorUndoManager parent, Room room) : base(parent, room)
        {
            ParentRoom = room.Portals.Count() == 1 ? room.Portals.First().AdjoiningRoom : null;

            Valid = () => Room != null && ParentRoom != null &&
                    Room.ExistsInLevel && ParentRoom.ExistsInLevel &&
                    Room.Portals.Count(p => p.AdjoiningRoom == ParentRoom) == 1 && Room.AnyObjects.Count(obj => (obj is PortalInstance)) == 1 &&
                    Room.AnyObjects.Count(obj => !(obj is PortalInstance)) == 0;

            UndoAction = () =>
            {
                Parent.Editor.SelectedRoom = ParentRoom;
                EditorActions.DeleteRooms(new[] { Room });
            };
        }
예제 #2
0
        public SelectedRoomContextMenu(Editor editor, IWin32Window owner, Vector2 position)
            : base(editor, owner)
        {
            Items.Add(new ToolStripMenuItem("Export rooms...", Properties.Resources.general_Export_16, (o, e) =>
            {
                EditorActions.ExportRooms(_editor.SelectedRooms, this);
            }));

            Items.Add(new ToolStripSeparator());

            Items.Add(new ToolStripMenuItem("Delete rooms", Properties.Resources.general_trash_16, (o, e) =>
            {
                EditorActions.DeleteRooms(_editor.SelectedRooms, this);
            }));

            Items.Add(new ToolStripMenuItem("Copy rooms", Properties.Resources.general_copy_16, (o, e) =>
            {
                Clipboard.SetDataObject(new RoomClipboardData(_editor, position), true);
            }));

            Items.Add(new ToolStripMenuItem("Paste rooms", Properties.Resources.general_clipboard_16, (o, e) =>
            {
                var roomClipboardData = Clipboard.GetDataObject().GetData(typeof(RoomClipboardData)) as RoomClipboardData;
                if (roomClipboardData == null)
                {
                    _editor.SendMessage("Clipboard contains no room data.", PopupType.Error);
                }
                else
                {
                    roomClipboardData.MergeInto(_editor, VectorInt2.FromRounded(position - roomClipboardData.DropPosition));
                }
            })
            {
                Enabled = Clipboard.ContainsData(typeof(RoomClipboardData).FullName)
            });

            Items.Add(new ToolStripSeparator());

            Items.Add(new ToolStripMenuItem("Rotate rooms clockwise", null, (o, e) =>
            {
                EditorActions.TransformRooms(new RectTransformation {
                    QuadrantRotation = -1
                }, Parent);
            }));

            Items.Add(new ToolStripMenuItem("Rotate rooms counterclockwise", null, (o, e) =>
            {
                EditorActions.TransformRooms(new RectTransformation {
                    QuadrantRotation = 1
                }, Parent);
            }));

            Items.Add(new ToolStripMenuItem("Mirror rooms on X axis", null, (o, e) =>
            {
                EditorActions.TransformRooms(new RectTransformation {
                    MirrorX = true
                }, Parent);
            }));

            Items.Add(new ToolStripMenuItem("Mirror rooms on Z axis", null, (o, e) =>
            {
                EditorActions.TransformRooms(new RectTransformation {
                    MirrorX = true, QuadrantRotation = 2
                }, Parent);
            }));

            Items.Add(new ToolStripMenuItem("Merge rooms horizontally", null, (o, e) =>
            {
                EditorActions.MergeRoomsHorizontally(_editor.SelectedRooms, Parent);
            }));
        }
예제 #3
0
 public AddRoomUndoInstance(EditorUndoManager parent, Room room) : base(parent, room)
 {
     Valid      = () => Room != null && Room.ExistsInLevel && Room.AnyObjects.Count() == 0;
     UndoAction = () => EditorActions.DeleteRooms(new[] { Room });
 }