Exemple #1
0
        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();
                }
            }
        }
Exemple #2
0
        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();
            }
        }
Exemple #4
0
 private void EditorEventRaised(IEditorEvent obj)
 {
     if (obj is Editor.ConfigurationChangedEvent)
     {
         Invalidate();
     }
 }
Exemple #5
0
 private void EditorEventRaised(IEditorEvent obj)
 {
     if (obj is Editor.ConfigurationChangedEvent)
     {
         ReadConfigIntoControls(this);
     }
 }
Exemple #6
0
        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);
                }
            }
        }
Exemple #7
0
        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;
            }
        }
Exemple #8
0
 private void Tool_EditorEventRaised(IEditorEvent obj)
 {
     if (obj is WadToolClass.BoneOffsetMovedEvent)
     {
         UpdateUI();
         UpdateSkeletonMatrices(treeSkeleton.Nodes[0], Matrix4x4.Identity);
     }
 }
Exemple #9
0
        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));
                        }
                    }
                }
            }
        }
Exemple #11
0
 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();
     }
 }
Exemple #12
0
        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);
                }
            }
        }
Exemple #15
0
        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;
                    }
                }
            }
        }
Exemple #18
0
        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();
                }
            }
        }
Exemple #20
0
        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);
                }
            }
        }
Exemple #22
0
        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();
            }
        }
Exemple #23
0
        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;
            }
        }
Exemple #24
0
 void Undo(IEditorEvent e)
 {
     // Verify id is valid
     // Perform inverse of change
     throw new NotImplementedException();
 }
Exemple #25
0
        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);
            }
        }
Exemple #26
0
        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;
                }
            }
        }
Exemple #28
0
        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;
            }
        }
Exemple #29
0
 public void RaiseEvent(IEditorEvent eventObj)
 {
     SynchronizationContext.Current.Send(eventObj_ => EditorEventRaised?.Invoke((IEditorEvent)eventObj_), eventObj);
 }
Exemple #30
0
 private void EditorEventRaised(IEditorEvent obj)
 {
     //if (obj is WadToolClass.ConfigurationChangedEvent)
     //    ReadConfigIntoControls(this);
 }