public void SetMode(int newMode, bool wrapAroundOutOfRange = false) { #if !ALE_STRIP_SAFETY if (editorModes.Length == 0) { throw new MissingReferenceException($"There are no editor modes attached on {gameObject.name}."); } #endif if (newMode < 0) { if (wrapAroundOutOfRange) { newMode = editorModes.Length - 1; } #if !ALE_STRIP_SAFETY else { throw new ArgumentOutOfRangeException(nameof(newMode), $"{nameof(newMode)} must be between 0 and {editorModes.Length - 1}."); } #endif } else if (newMode >= editorModes.Length) { if (wrapAroundOutOfRange) { newMode = 0; } #if !ALE_STRIP_SAFETY else { throw new ArgumentOutOfRangeException(nameof(newMode), $"{nameof(newMode)} must be between 0 and {editorModes.Length - 1}."); } #endif } if (selectedMode == newMode) { return; } ILevelEditorMode previousMode = null; if (selectedMode >= 0) { previousMode = editorModes[selectedMode]; editorModes[selectedMode].OnModeDisable(); } selectedMode = newMode; editorModes[selectedMode].OnModeEnable(); OnEditorModeChanged?.Invoke(this, new EditorModeChangeEventArgs(previousMode, editorModes[selectedMode])); }
public EditorModeChangeEventArgs(ILevelEditorMode previousMode, ILevelEditorMode newMode) { PreviousMode = previousMode; NewMode = newMode; }