private void _editor_EditorEventRaised(IEditorEvent obj) { // Level has changed, reset everything if (obj is Editor.LevelChangedEvent) { InitializeNewSearch(); } // Re-toggle current object on changed object selection if (obj is Editor.SelectedObjectChangedEvent) { var evt = (Editor.SelectedObjectChangedEvent)obj; if (evt.Current == null) { return; } ToggleItem((PositionBasedObjectInstance)evt.Current); } // Reset search if list of imported geos has changed and current search is imported geo if (obj is Editor.LoadedImportedGeometriesChangedEvent) { var evt = (Editor.LoadedImportedGeometriesChangedEvent)obj; if (Source != null && Source is ImportedGeometryInstance && !_editor.Level.Settings.ImportedGeometries.Contains(((ImportedGeometryInstance)Source).Model)) { InitializeNewSearch(); } else if (Dest != null && Dest is ImportedGeometryInstance && !_editor.Level.Settings.ImportedGeometries.Contains(((ImportedGeometryInstance)Dest).Model)) { InitializeNewSearch(); } } }
private void EditorEventRaised(IEditorEvent obj) { if (obj is Editor.LevelChangedEvent) { _lastTexturePalette = null; lightPalette.LoadPalette(((Editor.LevelChangedEvent)obj).Current.Settings.Palette); } if (obj is Editor.ResetPaletteEvent) { if (!butSampleFromTextures.Checked) { lightPalette.LoadPalette(LevelSettings.LoadPalette()); _editor.Level.Settings.Palette = lightPalette.Palette; } } if (obj is Editor.SelectedLevelTextureChangedSetEvent) { var o = (Editor.SelectedLevelTextureChangedSetEvent)obj; _lastTexturePalette = new List <ColorC>(o.Texture.Image.Palette); UpdateControls(); } if (obj is Editor.ConfigurationChangedEvent) { var o = (Editor.ConfigurationChangedEvent)obj; if (((Editor.ConfigurationChangedEvent)obj).UpdateKeyboardShortcuts) { CommandHandler.AssignCommandsToControls(_editor, this, toolTip, true); } UpdateControls(); } }
private void EditorEventRaised(IEditorEvent obj) { // Update field of view if (obj is Editor.ConfigurationChangedEvent) { Camera.FieldOfView = _editor.Configuration.RenderingItem_FieldOfView * (float)(Math.PI / 180); Invalidate(); } // Update currently viewed item if (obj is Editor.ChosenImportedGeometryChangedEvent) { Editor.ChosenImportedGeometryChangedEvent e = (Editor.ChosenImportedGeometryChangedEvent)obj; if (e.Current != null) { ResetCamera(); } Invalidate(); Update(); // Magic fix for room view leaking into item view } if (obj is Editor.LoadedImportedGeometriesChangedEvent || obj is Editor.EditorFocusedEvent) { Invalidate(); } }
private void EditorEventRaised(IEditorEvent obj) { if (obj is Editor.ConfigurationChangedEvent) { Invalidate(); } }
private void EditorEventRaised(IEditorEvent obj) { if (obj is Editor.ConfigurationChangedEvent) { ReadConfigIntoControls(this); } }
private void Tool_EditorEventRaised(IEditorEvent obj) { if (_closing) { return; } if (obj is WadToolClass.AnimationEditorCurrentAnimationChangedEvent) { var e = obj as WadToolClass.AnimationEditorCurrentAnimationChangedEvent; if (e != null && e.Animation != _animation) { Initialize(e.Animation); } } if (obj is WadToolClass.AnimationEditorAnimationChangedEvent) { var e = obj as WadToolClass.AnimationEditorAnimationChangedEvent; if (e != null && e.Animation == _animation && e.Focus) { Initialize(e.Animation); } } }
private void Tool_EditorEventRaised(IEditorEvent obj) { if (obj is WadToolClass.AnimationEditorCurrentAnimationChangedEvent) { var e = obj as WadToolClass.AnimationEditorCurrentAnimationChangedEvent; if (e != null && e.Animation != _animation) { Initialize(e.Animation, null); } } if (obj is WadToolClass.AnimationEditorAnimationChangedEvent) { var e = obj as WadToolClass.AnimationEditorAnimationChangedEvent; if (e != null && e.Animation == _animation) { Initialize(e.Animation, null); } } if (obj is WadToolClass.AnimationEditorPlaybackEvent) { var e = obj as WadToolClass.AnimationEditorPlaybackEvent; lblStateChangeAnnouncement.Text = string.Empty; lblStateChangeAnnouncement.Visible = e.Playing && e.Chained; } }
private void Tool_EditorEventRaised(IEditorEvent obj) { if (obj is WadToolClass.BoneOffsetMovedEvent) { UpdateUI(); UpdateSkeletonMatrices(treeSkeleton.Nodes[0], Matrix4x4.Identity); } }
bool InnerApply(IEditorEvent e) { var asset = GetAssetForId(e.Id); if (asset != null) { return(asset.Apply(e)); } Raise(new LogEvent(LogEvent.Level.Error, $"No asset could be found with id {e.Id}")); return(false); }
private void EditorEventRaised(IEditorEvent obj) { // Update the trigger control if (obj is Editor.SelectedRoomChangedEvent || obj is Editor.ObjectChangedEvent) { lstObjects.Items.Clear(); foreach (var o in _editor.SelectedRoom.Objects) { lstObjects.Items.Add(new DarkListItem(o.ToShortString()) { Tag = o }); } foreach (var o in _editor.SelectedRoom.GhostBlocks) { lstObjects.Items.Add(new DarkListItem(o.ToShortString()) { Tag = o }); } } // Update the object control selection if (obj is Editor.SelectedRoomChangedEvent || obj is Editor.SelectedObjectChangedEvent) { if (_editor.SelectedObject?.Room == _editor.SelectedRoom) { if (_editor.SelectedObject is PositionBasedObjectInstance) { var o = _editor.SelectedObject as PositionBasedObjectInstance; var entry = lstObjects.Items.FirstOrDefault(t => t.Tag == o); if (entry != null) { lstObjects.SelectItem(lstObjects.Items.IndexOf(entry)); } } else if (_editor.SelectedObject is GhostBlockInstance) { var o = _editor.SelectedObject as GhostBlockInstance; var entry = lstObjects.Items.FirstOrDefault(t => t.Tag == o); if (entry != null) { lstObjects.SelectItem(lstObjects.Items.IndexOf(entry)); } } } } }
private void Tool_EditorEventRaised(IEditorEvent obj) { if (obj is WadToolClass.StaticSelectedLightChangedEvent) { UpdateLightUI(); } else if (obj is WadToolClass.StaticLightsChangedEvent) { UpdateLightsList(); UpdateLightUI(); _workingStatic.Version = DataVersion.GetNext(); panelRendering.Invalidate(); } }
private void _editor_EditorEventRaised(IEditorEvent obj) { // Level has changed, reset everything if (obj is Editor.LevelChangedEvent) { InitializeNewSearch(); } // Re-toggle current object on changed object selection if (obj is Editor.RoomListChangedEvent) { _list = _list.Where(item => _editor.Level.Rooms.Contains(item.Key)).ToList(); RefreshList(); } }
private void EditorEventRaised(IEditorEvent obj) { if (obj is Editor.LevelChangedEvent) { Close(); } if (obj is Editor.ObjectChangedEvent) { var o = (Editor.ObjectChangedEvent)obj; if (o.Object == _volume && o.ChangeType == ObjectChangeType.Remove) { Close(); } } }
private void EditorEventRaised(IEditorEvent obj) { // Update available items combo box if (obj is Editor.LoadedImportedGeometriesChangedEvent) { var allGeometry = _editor.Level.Settings.ImportedGeometries.Where(geo => geo.LoadException == null && geo.DirectXModel != null); comboItems.Items.Clear(); foreach (var geo in allGeometry) { comboItems.Items.Add(geo); } if (comboItems.Items.Count > 0) { comboItems.SelectedIndex = 0; if (comboItems.SelectedItem is ImportedGeometry) { var currentObject = (ImportedGeometry)panelItem.CurrentObject; if (allGeometry.Contains(currentObject)) { panelItem.CurrentObject = currentObject; } } } } if (obj is Editor.ChosenImportedGeometryChangedEvent) { var e = (Editor.ChosenImportedGeometryChangedEvent)obj; if (e.Current != null) { comboItems.SelectedItem = panelItem.CurrentObject = e.Current; MakeActive(); } } // Update tooltip texts if (obj is Editor.ConfigurationChangedEvent) { if (((Editor.ConfigurationChangedEvent)obj).UpdateKeyboardShortcuts) { CommandHandler.AssignCommandsToControls(_editor, this, toolTip, true); } } }
void Apply(IEditorEvent e) { if (e is EditorAggregateChangeEvent aggregate) { var applied = new List <IEditorEvent>(); bool success = true; foreach (var subEvent in aggregate.Events) { success &= InnerApply(subEvent); if (success) { applied.Add(subEvent); } else { break; } } if (!success) { applied.Reverse(); foreach (var subEvent in applied) { Undo(subEvent); } return; } } else { if (!InnerApply(e)) { return; } } _undoStack.AddLast(e); if (_undoStack.Count > MaxUndo) { _undoStack.RemoveFirst(); } }
private void EditorEventRaised(IEditorEvent obj) { // Update drawing if (obj is SectorColoringManager.ChangeSectorColoringInfoEvent || obj is Editor.SelectedSectorsChangedEvent || obj is Editor.RoomSectorPropertiesChangedEvent || obj is Editor.RoomGeometryChangedEvent || obj is Editor.ConfigurationChangedEvent || obj is Editor.SelectedObjectChangedEvent && IsObjectChangeRelevant((Editor.SelectedObjectChangedEvent)obj)) { Invalidate(); } // Update cursor if (obj is Editor.ActionChangedEvent) { IEditorAction currentAction = ((Editor.ActionChangedEvent)obj).Current; Cursor = currentAction is EditorActionRelocateCamera ? Cursors.Cross : Cursors.Arrow; } }
private void _editor_EditorEventRaised(IEditorEvent obj) { // Rebuild object list if necessary if (_cachedRelevantObjects != null) { ScopeMode scope = (ScopeMode)comboScope.SelectedItem; if (obj is Editor.LoadedWadsChangedEvent && (scope == ScopeMode.ItemTypes || scope == ScopeMode.Everything)) { ResetCompletely(); } if (obj is Editor.RoomListChangedEvent) // Always rebuild completely when rooms change for now. { ResetCompletely(); // We don't get precise object messages for objects removed with rooms otherwise. } else if (obj is Editor.SelectedRoomChangedEvent && scope == ScopeMode.ObjectsInSelectedRooms) { ResetCompletely(); } else if (obj is IEditorObjectChangedEvent && (scope == ScopeMode.AllObjects || scope == ScopeMode.Everything || scope == ScopeMode.ObjectsInSelectedRooms && ((IEditorObjectChangedEvent)obj).Room == _editor.SelectedRoom || scope == ScopeMode.Triggers && ((IEditorObjectChangedEvent)obj).Object is TriggerInstance)) { var @event = (IEditorObjectChangedEvent)obj; switch (@event.ChangeType) { case ObjectChangeType.Add: AddObject(@event.Object); break; case ObjectChangeType.Change: UpdateObject(@event.Object); break; case ObjectChangeType.Remove: RemoveObject(@event.Object); break; } } } }
public bool Apply(IEditorEvent editorEvent) { if (editorEvent == null) { throw new ArgumentNullException(nameof(editorEvent)); } switch (editorEvent) { case EditorSetPropertyEvent setProperty: var currentValue = GetProperty(setProperty.PropertyName); if (!Equals(currentValue, setProperty.CurrentValue)) { Raise(new LogEvent(LogEvent.Level.Error, $"Tried to change {_asset.GetType().Name}.{setProperty.PropertyName} " + $"from {setProperty.CurrentValue} to {setProperty.NewValue}, but it is currently set to {currentValue}")); return(false); } SetProperty(setProperty.PropertyName, setProperty.NewValue); return(true); case EditorAddInstanceEvent addInstance: // TODO: Validation AddToCollection(addInstance.CollectionName, addInstance.Index); return(true); case EditorRemoveInstanceEvent removeInstance: // TODO: Validation RemoveFromCollection(removeInstance.CollectionName, removeInstance.Index); return(true); case EditorMoveInstanceEvent moveInstance: MoveInCollection(moveInstance.CollectionName, moveInstance.FromIndex, moveInstance.ToIndex); return(true); default: Raise(new LogEvent(LogEvent.Level.Error, $"Could not handle IEditorEvent of type {editorEvent.GetType()}")); return(false); } }
private void EditorEventRaised(IEditorEvent obj) { if (_selectionArea != null) { _selectionArea._roomSelectionCache = null; } // Update drawing if (obj is Editor.SelectedRoomsChangedEvent || obj is Editor.RoomGeometryChangedEvent || obj is Editor.RoomSectorPropertiesChangedEvent || obj is Editor.RoomPropertiesChangedEvent || obj is Editor.RoomListChangedEvent || obj is Editor.ConfigurationChangedEvent) { UpdateBrushes(); if (_editor.Mode == EditorMode.Map2D) { Invalidate(); } } // Show message when displaying 2D map for the first time. if (obj is Editor.ModeChangedEvent) { if (_editor.Mode == EditorMode.Map2D && (_editor.Configuration.Map2D_ShowTimes < 3)) // Show up to 3 times to increase likelyhood of the user noticing. { _editor.SendMessage("Double click or Alt + click on the map to add or remove depth probe.\n" + "Click and drag on the emptiness to start selection by area or use the middle mouse button.\n" + "Selection can be changed using Ctrl or Shift. To copy rooms, press Ctrl while moving.", PopupType.Info); _editor.Configuration.Map2D_ShowTimes++; _editor.ConfigurationChange(); } } }
private void EditorEventRaised(IEditorEvent obj) { // Update level-specific UI if (obj is Editor.InitEvent || obj is Editor.LevelChangedEvent || obj is Editor.GameVersionChangedEvent) { if (_editor.Level.Settings.GameVersion == TRVersion.Game.TR5Main) { DockText = "Legacy triggers"; } else { DockText = "Triggers"; } } // Update the trigger control if (obj is Editor.SelectedSectorsChangedEvent || obj is Editor.SelectedRoomChangedEvent || obj is Editor.RoomSectorPropertiesChangedEvent) { lstTriggers.Items.Clear(); if (_editor.Level != null && _editor.SelectedSectors.Valid) { // Search for unique triggers inside the selected area var triggers = new List <TriggerInstance>(); var area = _editor.SelectedSectors.Area; for (int x = area.X0; x <= area.X1; x++) { for (int z = area.Y0; z <= area.Y1; z++) { foreach (var trigger in _editor.SelectedRoom.GetBlockTry(x, z)?.Triggers ?? new List <TriggerInstance>()) { if (!triggers.Contains(trigger)) { triggers.Add(trigger); } } } } // Add triggers to listbox foreach (TriggerInstance trigger in triggers) { lstTriggers.Items.Add(new DarkListItem(trigger.ToShortString()) { Tag = trigger }); } } } // Update any modified trigger from area if (obj is Editor.ObjectChangedEvent) { var changedObject = ((Editor.ObjectChangedEvent)obj).Object; if (changedObject.Room == _editor.SelectedRoom && changedObject is TriggerInstance) { var item = lstTriggers.Items.FirstOrDefault(l => l.Tag == changedObject); if (item != null) { item.Text = changedObject.ToShortString(); } } } // Update the trigger control selection if (obj is Editor.SelectedSectorsChangedEvent || obj is Editor.SelectedRoomChangedEvent || obj is Editor.SelectedObjectChangedEvent) { if (_editor.SelectedObject is TriggerInstance) { var trigger = _editor.SelectedObject as TriggerInstance; var entry = lstTriggers.Items.FirstOrDefault(t => t.Tag == trigger); if (entry != null) { lstTriggers.SelectItem(lstTriggers.Items.IndexOf(entry)); } } } // Update tooltip texts if (obj is Editor.ConfigurationChangedEvent) { if (((Editor.ConfigurationChangedEvent)obj).UpdateKeyboardShortcuts) { CommandHandler.AssignCommandsToControls(_editor, this, toolTip, true); } } }
private void EditorEventRaised(IEditorEvent obj) { // Disable version-specific controls if (obj is Editor.InitEvent || obj is Editor.GameVersionChangedEvent || obj is Editor.LevelChangedEvent) { bool isNGorT5M = _editor.Level.Settings.GameVersion >= TRVersion.Game.TRNG; bool isTR4or5 = _editor.Level.Settings.GameVersion >= TRVersion.Game.TR4; bool isTR345 = _editor.Level.Settings.GameVersion >= TRVersion.Game.TR3; bool isTR1 = _editor.Level.Settings.GameVersion == TRVersion.Game.TR1; cbFlagCold.Enabled = isNGorT5M; cbFlagDamage.Enabled = isNGorT5M; cbNoLensflare.Enabled = isTR4or5; comboReverberation.Enabled = isTR345; comboLightEffect.Enabled = !isTR1; numLightEffectStrength.Enabled = !isTR1; RepopulateRoomTypes(); } // Update the room list if (obj is Editor.InitEvent || obj is Editor.RoomListChangedEvent) { // Adjust the amount of entries in the combo list while (comboRoom.Items.Count > _editor.Level.Rooms.GetLength(0)) { comboRoom.Items.RemoveAt(comboRoom.Items.Count - 1); } while (comboRoom.Items.Count < _editor.Level.Rooms.GetLength(0)) { comboRoom.Items.Add(""); } // Update the room list for (int i = 0; i < _editor.Level.Rooms.GetLength(0); i++) { if (_editor.Level.Rooms[i] != null) { comboRoom.Items[i] = i + ": " + _editor.Level.Rooms[i].Name; } else { comboRoom.Items[i] = i + ": --- Empty room ---"; } } } // Update taglist if (obj is Editor.LevelChangedEvent || obj is Editor.SelectedRoomChangedEvent) { tbRoomTags.AutocompleteWords.Clear(); foreach (var room in (_editor.Level.Rooms)) { if (room != null && room.ExistsInLevel) { tbRoomTags.AutocompleteWords.AddRange(room.Tags.Except(tbRoomTags.AutocompleteWords)); } } } // Update the room property controls if (obj is Editor.InitEvent || obj is Editor.SelectedRoomChangedEvent || obj is Editor.LevelChangedEvent || _editor.IsSelectedRoomEvent(obj as Editor.RoomPropertiesChangedEvent)) { Room room = _editor.SelectedRoom; if (obj is Editor.InitEvent || obj is Editor.SelectedRoomChangedEvent) { comboRoom.SelectedIndex = _editor.Level.Rooms.ReferenceIndexOf(room); } // Update the state of other controls ReadRoomType(); panelRoomAmbientLight.BackColor = (room.AmbientLight * new Vector3(0.5f, 0.5f, 0.5f)).ToWinFormsColor(); comboReverberation.SelectedIndex = (int)room.Reverberation; comboPortalShade.SelectedIndex = (int)room.LightInterpolationMode; comboLightEffect.SelectedIndex = (int)room.LightEffect; numLightEffectStrength.Value = room.LightEffectStrength; cbFlagCold.Checked = room.FlagCold; cbFlagDamage.Checked = room.FlagDamage; cbFlagOutside.Checked = room.FlagOutside; cbHorizon.Checked = room.FlagHorizon; cbNoLensflare.Checked = room.FlagNoLensflare; cbNoPathfinding.Checked = room.FlagExcludeFromPathFinding; butHidden.Checked = room.Hidden; if (!tbRoomTags.ReadOnly) // Only update tags field if we're not in the process of editing { if (room.Tags.Count > 0) { tbRoomTags.Text = string.Join(" ", room.Tags); } else { tbRoomTags.Text = ""; } } if (room.AlternateBaseRoom != null) { butLocked.Enabled = false; butLocked.Checked = room.AlternateBaseRoom.Locked; } else { butLocked.Enabled = true; butLocked.Checked = room.Locked; } comboFlipMap.SelectedIndex = room.Alternated ? room.AlternateGroup + 1 : 0; } // Update tooltip texts if (obj is Editor.ConfigurationChangedEvent) { if (((Editor.ConfigurationChangedEvent)obj).UpdateKeyboardShortcuts) { CommandHandler.AssignCommandsToControls(_editor, this, toolTip, true); } } }
private void EditorEventRaised(IEditorEvent obj) { // Gray out menu options that do not apply if (obj is Editor.SelectedObjectChangedEvent || obj is Editor.ModeChangedEvent || obj is Editor.SelectedSectorsChangedEvent) { ObjectInstance selectedObject = _editor.SelectedObject; bool enableCutCopy = _editor.Mode == EditorMode.Map2D || selectedObject is PositionBasedObjectInstance || _editor.SelectedSectors.Valid; copyToolStripMenuItem.Enabled = enableCutCopy; cutToolStripMenuItem.Enabled = enableCutCopy; deleteToolStripMenuItem.Enabled = _editor.Mode == EditorMode.Map2D || selectedObject != null; stampToolStripMenuItem.Enabled = selectedObject is PositionBasedObjectInstance; if (obj is Editor.ModeChangedEvent) { ClipboardEvents_ClipboardChanged(this, EventArgs.Empty); } bookmarkObjectToolStripMenuItem.Enabled = selectedObject != null; splitSectorObjectOnSelectionToolStripMenuItem.Enabled = selectedObject is SectorBasedObjectInstance && _editor.SelectedSectors.Valid; } // Disable version-specific controls if (obj is Editor.InitEvent || obj is Editor.GameVersionChangedEvent || obj is Editor.LevelChangedEvent) { addFlybyCameraToolStripMenuItem.Enabled = _editor.Level.Settings.GameVersion >= TRVersion.Game.TR4; addBoxVolumeToolStripMenuItem.Enabled = _editor.Level.Settings.GameVersion == TRVersion.Game.TR5Main; } if (obj is Editor.UndoStackChangedEvent) { var stackEvent = (Editor.UndoStackChangedEvent)obj; undoToolStripMenuItem.Enabled = stackEvent.UndoPossible; redoToolStripMenuItem.Enabled = stackEvent.RedoPossible; } if (obj is Editor.SelectedSectorsChangedEvent) { bool validSectorSelection = _editor.SelectedSectors.Valid; smoothRandomCeilingDownToolStripMenuItem.Enabled = validSectorSelection; smoothRandomCeilingUpToolStripMenuItem.Enabled = validSectorSelection; smoothRandomFloorDownToolStripMenuItem.Enabled = validSectorSelection; smoothRandomFloorUpToolStripMenuItem.Enabled = validSectorSelection; sharpRandomCeilingDownToolStripMenuItem.Enabled = validSectorSelection; sharpRandomCeilingUpToolStripMenuItem.Enabled = validSectorSelection; sharpRandomFloorDownToolStripMenuItem.Enabled = validSectorSelection; sharpRandomFloorUpToolStripMenuItem.Enabled = validSectorSelection; averageCeilingToolStripMenuItem.Enabled = validSectorSelection; averageFloorToolStripMenuItem.Enabled = validSectorSelection; gridWallsIn3ToolStripMenuItem.Enabled = validSectorSelection; gridWallsIn5ToolStripMenuItem.Enabled = validSectorSelection; gridWallsIn3SquaresToolStripMenuItem.Enabled = validSectorSelection; gridWallsIn5SquaresToolStripMenuItem.Enabled = validSectorSelection; splitSectorObjectOnSelectionToolStripMenuItem.Enabled = _editor.SelectedObject is SectorBasedObjectInstance && validSectorSelection; } // Update version-specific controls if (obj is Editor.InitEvent || obj is Editor.LevelChangedEvent || obj is Editor.GameVersionChangedEvent) { bool isNG = _editor.Level.Settings.GameVersion == TRVersion.Game.TRNG; bool isT5M = _editor.Level.Settings.GameVersion == TRVersion.Game.TR5Main; addSphereVolumeToolStripMenuItem.Enabled = isT5M; addPrismVolumeToolStripMenuItem.Enabled = isT5M; addBoxVolumeToolStripMenuItem.Enabled = isT5M; makeQuickItemGroupToolStripMenuItem.Enabled = isNG; } // Update compilation statistics if (obj is Editor.LevelCompilationCompletedEvent) { var evt = obj as Editor.LevelCompilationCompletedEvent; statusLastCompilation.Text = "Last level output { " + evt.InfoString + " }"; } // Update autosave status if (obj is Editor.AutosaveEvent) { var evt = obj as Editor.AutosaveEvent; statusAutosave.Text = evt.Exception == null ? "Autosave OK: " + evt.Time : "Autosave failed!"; statusAutosave.ForeColor = evt.Exception == null ? statusLastCompilation.ForeColor : Color.LightSalmon; } // Update room information on the status strip if (obj is Editor.SelectedRoomChangedEvent || _editor.IsSelectedRoomEvent(obj as Editor.RoomGeometryChangedEvent) || _editor.IsSelectedRoomEvent(obj as Editor.RoomSectorPropertiesChangedEvent) || obj is Editor.RoomPropertiesChangedEvent) { var room = _editor.SelectedRoom; if (room == null) { statusStripSelectedRoom.Text = "Selected room: None"; } else { statusStripSelectedRoom.Text = "Selected room: " + "Name = " + room + " | " + "Pos = (" + room.Position.X + ", " + room.Position.Y + ", " + room.Position.Z + ") | " + "Floor = " + (room.Position.Y + room.GetLowestCorner()) + " | " + "Ceiling = " + (room.Position.Y + room.GetHighestCorner()); } } // Update selection information of the status strip if (obj is Editor.SelectedRoomChangedEvent || _editor.IsSelectedRoomEvent(obj as Editor.RoomGeometryChangedEvent) || _editor.IsSelectedRoomEvent(obj as Editor.RoomSectorPropertiesChangedEvent) || obj is Editor.SelectedSectorsChangedEvent) { var room = _editor.SelectedRoom; if (room == null || !_editor.SelectedSectors.Valid) { statusStripGlobalSelectionArea.Text = "Global area: None"; statusStripLocalSelectionArea.Text = "Local area: None"; } else { int minHeight = room.GetLowestCorner(_editor.SelectedSectors.Area); int maxHeight = room.GetHighestCorner(_editor.SelectedSectors.Area); statusStripGlobalSelectionArea.Text = "Global area = " + "(" + (room.Position.X + _editor.SelectedSectors.Area.X0) + ", " + (room.Position.Z + _editor.SelectedSectors.Area.Y0) + ") \u2192 " + "(" + (room.Position.X + _editor.SelectedSectors.Area.X1) + ", " + (room.Position.Z + _editor.SelectedSectors.Area.Y1) + ")" + " | y = [" + (minHeight == int.MaxValue || maxHeight == int.MinValue ? "N/A" : room.Position.Y + minHeight + ", " + (room.Position.Y + maxHeight)) + "]"; statusStripLocalSelectionArea.Text = "Local area = " + "(" + _editor.SelectedSectors.Area.X0 + ", " + _editor.SelectedSectors.Area.Y0 + ") \u2192 " + "(" + _editor.SelectedSectors.Area.X1 + ", " + _editor.SelectedSectors.Area.Y1 + ")" + " | y = [" + (minHeight == int.MaxValue || maxHeight == int.MinValue ? "N/A" : minHeight + ", " + maxHeight) + "]"; } } // Update application title bar if (obj is Editor.LevelFileNameChangedEvent || obj is Editor.HasUnsavedChangesChangedEvent) { string LevelName = string.IsNullOrEmpty(_editor.Level.Settings.LevelFilePath) ? "Untitled" : PathC.GetFileNameWithoutExtensionTry(_editor.Level.Settings.LevelFilePath); Text = "Tomb Editor " + Application.ProductVersion + " - " + LevelName + (_editor.HasUnsavedChanges ? "*" : ""); } // Update save button if (obj is Editor.HasUnsavedChangesChangedEvent) { saveLevelToolStripMenuItem.Enabled = _editor.HasUnsavedChanges; } // Reload window layout and keyboard shortcuts if the configuration changed if (obj is Editor.ConfigurationChangedEvent) { var e = (Editor.ConfigurationChangedEvent)obj; if (e.UpdateKeyboardShortcuts) { GenerateMenusRecursive(menuStrip.Items, true); } if (e.UpdateLayout) { LoadWindowLayout(_editor.Configuration); } UpdateUIColours(); UpdateControls(); } // Update texture controls if (obj is Editor.LoadedTexturesChangedEvent) { remapTextureToolStripMenuItem.Enabled = removeTexturesToolStripMenuItem.Enabled = unloadTexturesToolStripMenuItem.Enabled = reloadTexturesToolStripMenuItem.Enabled = importConvertTexturesToPng.Enabled = _editor.Level.Settings.Textures.Count > 0; } // Update wad controls if (obj is Editor.LoadedWadsChangedEvent) { removeWadsToolStripMenuItem.Enabled = reloadWadsToolStripMenuItem.Enabled = _editor.Level.Settings.Wads.Count > 0; } if (obj is Editor.LoadedSoundsCatalogsChangedEvent) { reloadSoundsToolStripMenuItem.Enabled = _editor.Level.Settings.SoundsCatalogs.Count > 0; } // Update object bookmarks if (obj is Editor.BookmarkedObjectChanged) { var @event = (Editor.BookmarkedObjectChanged)obj; bookmarkRestoreObjectToolStripMenuItem.Enabled = @event.Current != null; } if (obj is Editor.LevelFileNameChangedEvent) { RefreshRecentProjectsList(); } // Quit editor if (obj is Editor.EditorQuitEvent) { Close(); } }
private void EditorEventRaised(IEditorEvent obj) { if (obj is Editor.ToolChangedEvent || obj is Editor.InitEvent) { EditorTool currentTool = _editor.Tool; toolSelection.Checked = currentTool.Tool == EditorToolType.Selection; toolBrush.Checked = currentTool.Tool == EditorToolType.Brush; toolPencil.Checked = currentTool.Tool == EditorToolType.Pencil; toolFill.Checked = currentTool.Tool == EditorToolType.Fill; toolGroup.Checked = currentTool.Tool == EditorToolType.Group; toolGridPaint.Checked = currentTool.Tool == EditorToolType.GridPaint; toolShovel.Checked = currentTool.Tool == EditorToolType.Shovel; toolFlatten.Checked = currentTool.Tool == EditorToolType.Flatten; toolSmooth.Checked = currentTool.Tool == EditorToolType.Smooth; toolDrag.Checked = currentTool.Tool == EditorToolType.Drag; toolRamp.Checked = currentTool.Tool == EditorToolType.Ramp; toolQuarterPipe.Checked = currentTool.Tool == EditorToolType.QuarterPipe; toolHalfPipe.Checked = currentTool.Tool == EditorToolType.HalfPipe; toolBowl.Checked = currentTool.Tool == EditorToolType.Bowl; toolPyramid.Checked = currentTool.Tool == EditorToolType.Pyramid; toolTerrain.Checked = currentTool.Tool == EditorToolType.Terrain; toolPortalDigger.Checked = currentTool.Tool == EditorToolType.PortalDigger; toolUVFixer.Checked = currentTool.TextureUVFixer; switch (currentTool.GridSize) { case PaintGridSize.Grid2x2: toolGridPaint.Image = Properties.Resources.toolbox_GridPaint2x2_16; toolGridPaint.ToolTipText = "Grid Paint (2x2)"; break; case PaintGridSize.Grid3x3: toolGridPaint.Image = Properties.Resources.toolbox_GridPaint3x3_16; toolGridPaint.ToolTipText = "Grid Paint (3x3)"; break; case PaintGridSize.Grid4x4: toolGridPaint.Image = Properties.Resources.toolbox_GridPaint4x4_16; toolGridPaint.ToolTipText = "Grid Paint (4x4)"; break; } } if (obj is Editor.SelectedTexturesChangedEvent || obj is Editor.InitEvent) { toolEraser.Checked = _editor.SelectedTexture.Texture == null; toolInvisibility.Checked = _editor.SelectedTexture.Texture is TextureInvisible; } if (obj is Editor.ModeChangedEvent || obj is Editor.InitEvent) { EditorMode mode = _editor.Mode; bool geometryMode = mode == EditorMode.Geometry; toolFill.Visible = !geometryMode; toolGroup.Visible = !geometryMode; toolGridPaint.Visible = !geometryMode; toolEraser.Visible = !geometryMode; toolInvisibility.Visible = !geometryMode; toolUVFixer.Visible = !geometryMode; toolFlatten.Visible = geometryMode; toolShovel.Visible = geometryMode; toolSmooth.Visible = geometryMode; toolDrag.Visible = geometryMode; toolRamp.Visible = geometryMode; toolQuarterPipe.Visible = geometryMode; toolHalfPipe.Visible = geometryMode; toolBowl.Visible = geometryMode; toolPyramid.Visible = geometryMode; toolTerrain.Visible = geometryMode; toolPortalDigger.Visible = geometryMode; toolStrip.AutoSize = true; AutoSize = true; toolStrip.Visible = mode == EditorMode.FaceEdit || mode == EditorMode.Lighting || mode == EditorMode.Geometry; } }
void Undo(IEditorEvent e) { // Verify id is valid // Perform inverse of change throw new NotImplementedException(); }
private void Tool_EditorEventRaised(IEditorEvent obj) { if (obj is InitEvent) { // At startup initialise a new Wad2 if (_tool.Configuration.Tool_MakeEmptyWadAtStartup) { _tool.DestinationWad = new Wad2 { GameVersion = TRVersion.Game.TR4 }; _tool.RaiseEvent(new WadToolClass.DestinationWadChangedEvent()); } } if (obj is WadToolClass.MessageEvent) { var msg = (WadToolClass.MessageEvent)obj; PopUpInfo.Show(popup, this, panel3D, msg.Message, msg.Type); } if (obj is WadToolClass.SelectedObjectEditedEvent || obj is InitEvent) { } if (obj is WadToolClass.DestinationWadChangedEvent || obj is InitEvent) { treeDestWad.Wad = _tool.DestinationWad; treeDestWad.UpdateContent(); panel3D.UpdateAnimationScrollbar(); panel3D.Invalidate(); if (_tool.DestinationWad != null) { labelStatistics.Text = "Moveables: " + _tool.DestinationWad.Moveables.Count + " | " + "Statics: " + _tool.DestinationWad.Statics.Count + " | " + "Sprites sequences: " + _tool.DestinationWad.SpriteSequences.Count + " | " + "Textures: " + _tool.DestinationWad.MeshTexturesUnique.Count; } else { labelStatistics.Text = ""; } } if (obj is WadToolClass.SourceWadChangedEvent || obj is InitEvent) { panelSource.SectionHeader = "Source"; if (_tool?.SourceWad != null) { panelSource.SectionHeader += (String.IsNullOrEmpty(_tool.SourceWad.FileName) ? " (Imported)" : " (" + Path.GetFileName(_tool.SourceWad.FileName) + ")"); } treeSourceWad.Wad = _tool.SourceWad; treeSourceWad.UpdateContent(); panel3D.UpdateAnimationScrollbar(); panel3D.Invalidate(); } if (obj is WadToolClass.MainSelectionChangedEvent || obj is WadToolClass.DestinationWadChangedEvent || obj is WadToolClass.SourceWadChangedEvent || obj is InitEvent) { var mainSelection = _tool.MainSelection; if (mainSelection == null) { panel3D.CurrentObject = null; butEditAnimations.Visible = false; butEditSkeleton.Visible = false; butEditStaticModel.Visible = false; butEditSpriteSequence.Visible = false; } else { Wad2 wad = _tool.GetWad(mainSelection.Value.WadArea); // Display the object (or set it to Lara's skin instead if it's Lara) if (mainSelection.Value.Id is WadMoveableId) { panel3D.CurrentObject = wad.TryGet(new WadMoveableId(TrCatalog.GetMoveableSkin(wad.GameVersion, ((WadMoveableId)mainSelection.Value.Id).TypeId))); } else { panel3D.CurrentObject = wad.TryGet(mainSelection.Value.Id); } panel3D.AnimationIndex = 0; panel3D.KeyFrameIndex = 0; // Update the toolbar below the rendering area butEditAnimations.Visible = (mainSelection.Value.Id is WadMoveableId); butEditSkeleton.Visible = (mainSelection.Value.Id is WadMoveableId); butEditStaticModel.Visible = (mainSelection.Value.Id is WadStaticId); butEditSpriteSequence.Visible = (mainSelection.Value.Id is WadSpriteSequenceId); panel3D.ResetCamera(); panel3D.Invalidate(); } panel3D.UpdateAnimationScrollbar(); panel3D.Invalidate(); } if (obj is WadToolClass.ReferenceLevelChangedEvent) { if (_tool.ReferenceLevel != null) { butCloseRefLevel.Enabled = true; lblRefLevel.Enabled = true; closeReferenceLevelToolStripMenuItem.Enabled = true; lblRefLevel.Text = Path.GetFileNameWithoutExtension(_tool.ReferenceLevel.Settings.LevelFilePath); } else { butCloseRefLevel.Enabled = false; lblRefLevel.Enabled = false; closeReferenceLevelToolStripMenuItem.Enabled = false; lblRefLevel.Text = "(project not loaded)"; } } if (obj is WadToolClass.UnsavedChangesEvent) { UpdateSaveUI(((WadToolClass.UnsavedChangesEvent)obj).UnsavedChanges); } }
private void EditorEventRaised(IEditorEvent obj) { // Disable version-specific controls if (obj is Editor.InitEvent || obj is Editor.GameVersionChangedEvent || obj is Editor.LevelChangedEvent) { butAddFogBulb.Enabled = _editor.Level.Settings.GameVersion > TRVersion.Game.TR3; } // Update light UI if (obj is Editor.ObjectChangedEvent || obj is Editor.SelectedObjectChangedEvent) { var light = _editor.SelectedObject as LightInstance; // Get light type bool HasInOutRange = false; bool HasInOutAngle = false; bool HasDirection = false; bool CanCastShadows = false; bool CanIlluminateGeometry = false; cbLightQuality.Enabled = false; if (light != null) { switch (light.Type) { case LightType.Point: HasInOutRange = true; CanCastShadows = true; CanIlluminateGeometry = true; break; case LightType.Shadow: HasInOutRange = true; CanCastShadows = true; CanIlluminateGeometry = true; break; case LightType.Effect: HasInOutRange = true; break; case LightType.FogBulb: HasInOutRange = true; break; case LightType.Spot: HasInOutRange = true; HasInOutAngle = true; HasDirection = true; CanCastShadows = true; CanIlluminateGeometry = true; break; case LightType.Sun: HasDirection = true; CanCastShadows = true; CanIlluminateGeometry = true; break; } } // Update enable state // We set it before the values to make sure that irrelevant values are // not recognized as being changed to 0 in the "ValueChanged" functions. panelLightColor.Enabled = light != null; cbLightEnabled.Enabled = light != null; cbLightIsObstructedByRoomGeometry.Enabled = CanCastShadows; cbLightIsDynamicallyUsed.Enabled = CanIlluminateGeometry; cbLightIsStaticallyUsed.Enabled = CanIlluminateGeometry; cbLightIsUsedForImportedGeometry.Enabled = CanIlluminateGeometry; numIntensity.Enabled = light != null; numInnerRange.Enabled = HasInOutRange; numOuterRange.Enabled = HasInOutRange; numInnerAngle.Enabled = HasInOutAngle; numOuterAngle.Enabled = HasInOutAngle; numDirectionY.Enabled = HasDirection; numDirectionX.Enabled = HasDirection; // Update value state panelLightColor.BackColor = light != null ? new Vector4(light.Color * 0.5f, 1.0f).ToWinFormsColor() : BackColor; numIntensity.Value = (decimal)(light?.Intensity ?? 0); numInnerRange.Value = HasInOutRange ? (decimal)light.InnerRange : 0; numOuterRange.Value = HasInOutRange ? (decimal)light.OuterRange : 0; numInnerAngle.Value = HasInOutAngle ? (decimal)light.InnerAngle : 0; numOuterAngle.Value = HasInOutAngle ? (decimal)light.OuterAngle : 0; numDirectionY.Value = HasDirection ? (decimal)light.RotationY : 0; numDirectionX.Value = HasDirection ? (decimal)light.RotationX : 0; cbLightEnabled.Checked = light?.Enabled ?? false; cbLightIsObstructedByRoomGeometry.Checked = light?.IsObstructedByRoomGeometry ?? false; cbLightIsDynamicallyUsed.Checked = light?.IsDynamicallyUsed ?? false; cbLightIsStaticallyUsed.Checked = light?.IsStaticallyUsed ?? false; cbLightIsUsedForImportedGeometry.Checked = light?.IsUsedForImportedGeometry ?? false; cbLightQuality.Enabled = light != null; cbLightQuality.SelectedIndex = (int)(light?.Quality ?? 0); } // Update tooltip texts if (obj is Editor.ConfigurationChangedEvent) { if (((Editor.ConfigurationChangedEvent)obj).UpdateKeyboardShortcuts) { CommandHandler.AssignCommandsToControls(_editor, this, toolTip, true); } } }
private void EditorEventRaised(IEditorEvent obj) { // Disable version-specific controls if (obj is Editor.InitEvent || obj is Editor.GameVersionChangedEvent || obj is Editor.LevelChangedEvent) { UpdateUI(); } // Update texture map if (obj is Editor.SelectedTexturesChangedEvent) { var e = (Editor.SelectedTexturesChangedEvent)obj; LevelTexture toSelect = e.Current.Texture as LevelTexture; if (toSelect != null) { comboCurrentTexture.SelectedItem = toSelect; } panelTextureMap.SelectedTexture = e.Current; UpdateTextureControls(e.Current); } // Center texture on texture map if (obj is Editor.SelectTextureAndCenterViewEvent) { var newTexture = ((Editor.SelectTextureAndCenterViewEvent)obj).Texture; comboCurrentTexture.SelectedItem = newTexture.Texture as LevelTexture; panelTextureMap.ShowTexture(((Editor.SelectTextureAndCenterViewEvent)obj).Texture); if (newTexture.Texture is LevelTexture) { UpdateTextureControls(newTexture); panelTextureMap.ShowTexture(newTexture); MakeActive(); } } // Reset texture map if (obj is Editor.LevelChangedEvent) { comboCurrentTexture.Items.Clear(); comboCurrentTexture.Items.AddRange(_editor.Level.Settings.Textures.ToArray()); comboCurrentTexture.SelectedItem = _editor.Level.Settings.Textures.FirstOrDefault(); } if (obj is Editor.LoadedTexturesChangedEvent) { // Populate current texture combo box LevelTexture current = comboCurrentTexture.SelectedItem as LevelTexture; comboCurrentTexture.Items.Clear(); comboCurrentTexture.Items.AddRange(_editor.Level.Settings.Textures.ToArray()); if (_editor.Level.Settings.Textures.Contains(current)) { comboCurrentTexture.SelectedItem = current; } else { panelTextureMap.ResetVisibleTexture(null); } if (((Editor.LoadedTexturesChangedEvent)obj).NewToSelect != null) { comboCurrentTexture.SelectedItem = ((Editor.LoadedTexturesChangedEvent)obj).NewToSelect; } panelTextureMap.Invalidate(); } // Update tooltip texts if (obj is Editor.ConfigurationChangedEvent) { if (((Editor.ConfigurationChangedEvent)obj).UpdateKeyboardShortcuts) { CommandHandler.AssignCommandsToControls(_editor, this, toolTip, true); } if (cmbTileSize.Items.Contains(_editor.Configuration.TextureMap_TileSelectionSize)) { cmbTileSize.SelectedItem = _editor.Configuration.TextureMap_TileSelectionSize; } } }
private void EditorEventRaised(IEditorEvent obj) { if (obj is Editor.ConfigurationChangedEvent) { var o = (Editor.ConfigurationChangedEvent)obj; if (o.UpdateKeyboardShortcuts) { GenerateToolStripCommands(toolStrip.Items, true); } if (o.UpdateToolbarLayout) { UpdateToolStripLayout(); GenerateToolStripCommands(toolStrip.Items, true); } RefreshControls(_editor.Configuration); } // Gray out menu options that do not apply if (obj is Editor.SelectedObjectChangedEvent) { ObjectInstance selectedObject = _editor.SelectedObject; butCopy.Enabled = selectedObject is ISpatial; butStamp.Enabled = selectedObject is ISpatial; } // Update editor mode if (obj is Editor.ModeChangedEvent) { ClipboardEvents_ClipboardChanged(this, EventArgs.Empty); EditorMode mode = ((Editor.ModeChangedEvent)obj).Current; butCenterCamera.Enabled = mode != EditorMode.Map2D; but2D.Checked = mode == EditorMode.Map2D; but3D.Checked = mode == EditorMode.Geometry; butLightingMode.Checked = mode == EditorMode.Lighting; butFaceEdit.Checked = mode == EditorMode.FaceEdit; panel2DMap.Visible = mode == EditorMode.Map2D; panel3D.Visible = mode == EditorMode.FaceEdit || mode == EditorMode.Geometry || mode == EditorMode.Lighting; } // Update flipmap toolbar button if (obj is Editor.SelectedRoomChangedEvent || _editor.IsSelectedRoomEvent(obj as Editor.RoomPropertiesChangedEvent)) { butFlipMap.Enabled = _editor.SelectedRoom.Alternated; butFlipMap.Checked = _editor.SelectedRoom.AlternateBaseRoom != null; } // Update portal opacity controls if (obj is Editor.ObjectChangedEvent || obj is Editor.SelectedObjectChangedEvent) { var portal = _editor.SelectedObject as PortalInstance; butOpacityNone.Enabled = portal != null; butOpacitySolidFaces.Enabled = portal != null; butOpacityTraversableFaces.Enabled = portal != null; butOpacityNone.Checked = portal != null && portal.Opacity == PortalOpacity.None; butOpacitySolidFaces.Checked = portal != null && portal.Opacity == PortalOpacity.SolidFaces; butOpacityTraversableFaces.Checked = portal != null && portal.Opacity == PortalOpacity.TraversableFaces; } // Dismiss any messages if (obj is Editor.LevelChangedEvent) { popup.Hide(); } // Update version-specific controls if (obj is Editor.InitEvent || obj is Editor.LevelChangedEvent || obj is Editor.GameVersionChangedEvent) { bool isT5M = _editor.Level.Settings.GameVersion == TRVersion.Game.TR5Main; butAddBoxVolume.Enabled = isT5M; butAddSphereVolume.Enabled = isT5M; butAddPrismVolume.Enabled = isT5M; butDrawVolumes.Enabled = isT5M; butAddFlybyCamera.Enabled = _editor.Level.Settings.GameVersion >= TRVersion.Game.TR4; } if (obj is Editor.MessageEvent) { var msg = (Editor.MessageEvent)obj; PopUpInfo.Show(popup, FindForm(), this, msg.Message, msg.Type); } if (obj is Editor.UndoStackChangedEvent) { var state = (Editor.UndoStackChangedEvent)obj; butUndo.Enabled = state.UndoPossible; butUndo.Image = state.UndoPossible && !state.UndoReversible ? Properties.Resources.general_undo_irreversible_16 : Properties.Resources.general_undo_16; butRedo.Enabled = state.RedoPossible; } }
public void RaiseEvent(IEditorEvent eventObj) { SynchronizationContext.Current.Send(eventObj_ => EditorEventRaised?.Invoke((IEditorEvent)eventObj_), eventObj); }
private void EditorEventRaised(IEditorEvent obj) { //if (obj is WadToolClass.ConfigurationChangedEvent) // ReadConfigIntoControls(this); }