private void butEditTrigger_Click(object sender, EventArgs e) { if (_editor.SelectedRoom == null || !(_editor.SelectedObject is TriggerInstance)) { return; } EditorActions.EditObject(_editor.SelectedObject, this); }
private void butEditObject_Click(object sender, EventArgs e) { var instance = lstObjects.SelectedItem.Tag as ObjectInstance; if (instance != null) { EditorActions.EditObject(instance, this); } }
private void lstObjects_MouseDoubleClick(object sender, MouseEventArgs e) { if (lstObjects.SelectedIndices.Count == 0) { return; } var instance = lstObjects.SelectedItem.Tag as ObjectInstance; if (instance != null) { EditorActions.EditObject(instance, this); } }
public MaterialObjectContextMenu(Editor editor, IWin32Window owner, ObjectInstance targetObject) : base(editor, owner) { if (targetObject is IHasScriptID) { Items.Add(new ToolStripMenuItem("(ScriptID = " + ((targetObject as IHasScriptID).ScriptId?.ToString() ?? "<None>") + ") Copy the NG ID to clipboard", null, (o, e) => { CommandHandler.GetCommand("AssignAndClipboardNgId").Execute(new CommandArgs { Editor = editor, Window = owner }); })); Items.Add(new ToolStripSeparator()); } if (!(targetObject is LightInstance || targetObject is GhostBlockInstance)) { Items.Add(new ToolStripMenuItem("Edit object", Properties.Resources.general_edit_16, (o, e) => { EditorActions.EditObject(targetObject, this); }) { Enabled = !(targetObject is LightInstance) }); } Items.Add(new ToolStripMenuItem("Copy", Properties.Resources.general_copy_link_16, (o, e) => { EditorActions.TryCopyObject(targetObject, this); })); Items.Add(new ToolStripMenuItem("Clone", Properties.Resources.actions_rubber_stamp_16, (o, e) => { EditorActions.TryStampObject(targetObject, this); })); Items.Add(new ToolStripMenuItem("Delete", Properties.Resources.toolbox_Eraser_16, (o, e) => { EditorActions.DeleteObject(targetObject, this); })); Items.Add(new ToolStripMenuItem("Bookmark object", null, (o, e) => { EditorActions.BookmarkObject(targetObject); })); if (Items.Count > 2 && !(Items[Items.Count - 2] is ToolStripSeparator)) { Items.Add(new ToolStripSeparator()); } if (targetObject is StaticInstance) { var stat = (StaticInstance)targetObject; bool isMerged = editor.Level.Settings.AutoStaticMeshMergeContainsStaticMesh(editor.Level.Settings.WadTryGetStatic(stat.WadObjectId)); Items.Add(new ToolStripMenuItem("Merge into room geometry", null, (o, e) => { if (!isMerged) { editor.Level.Settings.AutoStaticMeshMerges.Add(new AutoStaticMeshMergeEntry(stat.WadObjectId.TypeId, true, false, false, false, editor.Level.Settings)); } else { editor.Level.Settings.AutoStaticMeshMerges.RemoveAll(item => item.meshId == stat.WadObjectId.TypeId); } _editor.MergedStaticsChange(); }) { Checked = isMerged }); } if (targetObject is ImportedGeometryInstance) { var geo = (ImportedGeometryInstance)targetObject; Items.Add(new ToolStripMenuItem("Hide in editor", Properties.Resources.toolbox_Invisible_16, (o, e) => { geo.Hidden = !geo.Hidden; _editor.ObjectChange(geo, ObjectChangeType.Change); }) { Checked = geo.Hidden }); Items.Add(new ToolStripMenuItem("Reload imported geometry", Properties.Resources.actions_refresh_16, (o, e) => { _editor.Level.Settings.ImportedGeometryUpdate( geo.Model, geo.Model.Info); })); } if (targetObject is PositionBasedObjectInstance && targetObject.Room != _editor.SelectedRoom) { if (!(Items[Items.Count - 1] is ToolStripSeparator)) { Items.Add(new ToolStripSeparator()); } Items.Add(new ToolStripMenuItem("Move object to current room", null, (o, e) => { EditorActions.MoveObjectToOtherRoom((PositionBasedObjectInstance)targetObject, _editor.SelectedRoom); })); } if (targetObject is PositionBasedObjectInstance && (targetObject is IRotateableY || targetObject is IRotateableYX || targetObject is IRotateableYXRoll)) { Items.Add(new ToolStripMenuItem("Reset rotation (all axes)", Properties.Resources.actions_center_direction_16, (o, e) => { EditorActions.ResetObjectRotation((PositionBasedObjectInstance)targetObject); })); if (targetObject is IRotateableYX) { Items.Add(new ToolStripMenuItem("Reset rotation (X axis)", null, (o, e) => { EditorActions.ResetObjectRotation((PositionBasedObjectInstance)targetObject, RotationAxis.X); })); } if (targetObject is IRotateableY) { Items.Add(new ToolStripMenuItem("Reset rotation (Y axis)", null, (o, e) => { EditorActions.ResetObjectRotation((PositionBasedObjectInstance)targetObject, RotationAxis.Y); })); } if (targetObject is IRotateableYXRoll) { Items.Add(new ToolStripMenuItem("Reset rotation (Roll axis)", null, (o, e) => { EditorActions.ResetObjectRotation((PositionBasedObjectInstance)targetObject, RotationAxis.Roll); })); } } if (targetObject is PositionBasedObjectInstance && (targetObject is IScaleable || targetObject is ISizeable)) { Items.Add(new ToolStripMenuItem("Reset scale", null, (o, e) => { EditorActions.ResetObjectScale((PositionBasedObjectInstance)targetObject); })); } // Get all triggers pointing to target object var triggers = _editor.Level.GetAllTriggersPointingToObject(targetObject); if (triggers.Count != 0) { if (!(Items[Items.Count - 1] is ToolStripSeparator)) { Items.Add(new ToolStripSeparator()); } foreach (var trigger in triggers) { var triggerItem = new ToolStripMenuItem("Trigger in room " + trigger.Room.Name, null, (o, e) => { _editor.SelectRoom(trigger.Room); }); Items.Add(triggerItem); } } if (Items[Items.Count - 1] is ToolStripSeparator) { Items.RemoveAt(Items.Count - 1); } }
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)); } } }