Exemplo n.º 1
0
 public AddSectorBasedObjectUndoInstance(EditorUndoManager parent, SectorBasedObjectInstance obj) : base(parent, obj.Room)
 {
     SectorObject = obj;
     Valid        = () => SectorObject != null && SectorObject.Room != null && Room != null && SectorObject.Room == Room && Room.ExistsInLevel;
     UndoAction   = () => EditorActions.DeleteObjectWithoutUpdate(SectorObject);
 }
Exemplo n.º 2
0
 public void PushSectorObjectCreated(SectorBasedObjectInstance obj) => Push(new AddSectorBasedObjectUndoInstance(this, obj));
Exemplo n.º 3
0
        protected override void OnMouseDown(MouseEventArgs e)
        {
            base.OnMouseDown(e);
            _toolTip.Hide(this);

            if (_editor == null || Room == null)
            {
                return;
            }

            // Move camera to selected sector
            if (_editor.Action is EditorActionRelocateCamera)
            {
                _editor.MoveCameraToSector(FromVisualCoord(e.Location));
                return;
            }
            VectorInt2 sectorPos = FromVisualCoord(e.Location);

            // Find existing sector based object (eg portal or trigger)
            SectorBasedObjectInstance selectedSectorObject = _editor.SelectedObject as SectorBasedObjectInstance;

            // Choose action
            if (e.Button == MouseButtons.Left)
            {
                if (selectedSectorObject != null &&
                    selectedSectorObject.Room == Room &&
                    selectedSectorObject.Area.Contains(sectorPos))
                {
                    if (selectedSectorObject is PortalInstance)
                    {
                        var  portal = (PortalInstance)selectedSectorObject;
                        Room room   = Room;
                        if (room.AlternateBaseRoom != null && portal.AdjoiningRoom.Alternated)
                        { // Go straight to alternated room
                            _editor.SelectRoom(portal.AdjoiningRoom.AlternateRoom);
                            _editor.SelectedObject = portal.FindOppositePortal(room).FindAlternatePortal(portal.AdjoiningRoom.AlternateRoom);
                        }
                        else
                        { // Go straight to base room
                            _editor.SelectRoom(portal.AdjoiningRoom);
                            _editor.SelectedObject = portal.FindOppositePortal(room);
                        }
                    }
                    else if (selectedSectorObject is TriggerInstance)
                    { // Open trigger options
                        EditorActions.EditObject(selectedSectorObject, Parent);
                    }
                }
                else
                { // Do block selection
                    _editor.SelectedSectors = new SectorSelection {
                        Start = sectorPos, End = sectorPos
                    };

                    if (selectedSectorObject != null) // Unselect previous object
                    {
                        _editor.SelectedObject = null;
                    }
                    _doSectorSelection = true;
                }
            }
            else if (e.Button == MouseButtons.Right)
            {
                // Find next object
                var portalsInRoom              = Room.Portals.Cast <SectorBasedObjectInstance>();
                var triggersInRoom             = Room.Triggers.Cast <SectorBasedObjectInstance>();
                var relevantTriggersAndPortals = portalsInRoom.Concat(triggersInRoom)
                                                 .Where(obj => obj.Area.Contains(sectorPos));

                SectorBasedObjectInstance nextPortalOrTrigger = relevantTriggersAndPortals.
                                                                FindFirstAfterWithWrapAround(obj => obj == selectedSectorObject, obj => true);
                if (nextPortalOrTrigger != null)
                {
                    _editor.SelectedObject = nextPortalOrTrigger;
                    _toolTip.Show(nextPortalOrTrigger.ToString(), this, e.Location + new Size(5, 5));
                }
            }
        }