/// <summary> /// Creates new preset based on camera and reference, applies all settings from this object then saves it to assets /// </summary> public bool SavePreset(GameObject referenceObject, Camera camera, bool overwriteExisting) { PumkinsCameraPreset p = ScriptableObjectUtility.CreateAndSaveAsset <PumkinsCameraPreset>(name, PumkinsAvatarTools.MainFolderPath + "/Resources/Presets/Cameras/", overwriteExisting) as PumkinsCameraPreset; if (!p) { return(false); } p.name = name; p.offsetMode = offsetMode; if (p.offsetMode == CameraOffsetMode.AvatarRoot) { CalculateOffsets(referenceObject.transform.root, camera); } else if (p.offsetMode == CameraOffsetMode.Transform) { CalculateOffsets(referenceObject.transform, camera); } else { CalculateOffsets(PumkinsAvatarTools.SelectedAvatar.GetComponent <VRC_AvatarDescriptor>(), camera); } p.positionOffset = positionOffset; p.rotationAnglesOffset = rotationAnglesOffset; p.transformPath = transformPath; p.useOverlay = PumkinsAvatarTools.Instance.bThumbnails_use_camera_overlay; if (p.useOverlay) { p.overlayImagePath = PumkinsAvatarTools.Instance._overlayPath; p.overlayImageTint = PumkinsAvatarTools.Instance.cameraOverlayImageTint; } p.useBackground = PumkinsAvatarTools.Instance.bThumbnails_use_camera_background; p.backgroundType = PumkinsAvatarTools.Instance.cameraBackgroundType; if (p.useBackground) { switch (p.backgroundType) { case PumkinsAvatarTools.CameraBackgroundOverrideType.Color: p.backgroundColor = PumkinsAvatarTools.Instance._thumbsCamBgColor; break; case PumkinsAvatarTools.CameraBackgroundOverrideType.Image: p.backgroundImagePath = PumkinsAvatarTools.Instance._backgroundPath; p.backgroundImageTint = PumkinsAvatarTools.Instance.cameraBackgroundImageTint; break; case PumkinsAvatarTools.CameraBackgroundOverrideType.Skybox: p.backgroundMaterial = RenderSettings.skybox; break; default: break; } } EditorUtility.SetDirty(p); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); PumkinsPresetManager.LoadPresets <PumkinsCameraPreset>(); return(true); }
void OnGUI() { try { PumkinsCameraPreset newPreset = (PumkinsCameraPreset)preset; if (!newPreset) //Not sure I like this part { newPreset = (PumkinsCameraPreset)AssignOrCreatePreset <PumkinsCameraPreset>(null); preset = newPreset; } Rect r = GUILayoutUtility.GetAspectRect(1.3f); EditorGUI.DrawTextureTransparent(r, PumkinsAvatarTools.SelectedCamRT, ScaleMode.ScaleToFit); scroll = EditorGUILayout.BeginScrollView(scroll); { if (newPreset) { newPreset.name = EditorGUILayout.TextField(Strings.Presets.presetName, newPreset.name); EditorGUILayout.Space(); PumkinsAvatarTools.DrawAvatarSelectionWithButtonGUI(false, false); Helpers.DrawGUILine(); PumkinsAvatarTools.SelectedCamera = (Camera)EditorGUILayout.ObjectField(Strings.Presets.camera, PumkinsAvatarTools.SelectedCamera, typeof(Camera), true); EditorGUILayout.Space(); newPreset.offsetMode = (PumkinsCameraPreset.CameraOffsetMode)EditorGUILayout.EnumPopup(Strings.Presets.offsetMode, newPreset.offsetMode); if (newPreset.offsetMode == PumkinsCameraPreset.CameraOffsetMode.Transform) { EditorGUI.BeginDisabledGroup(!PumkinsAvatarTools.SelectedAvatar); { referenceTransform = EditorGUILayout.ObjectField(Strings.Presets.transform, referenceTransform, typeof(Transform), true) as Transform; if (referenceTransform && !referenceTransform.IsChildOf(PumkinsAvatarTools.SelectedAvatar.transform)) { PumkinsAvatarTools.Log(Strings.Presets.transformDoesntBelongToAvatar, LogType.Warning, referenceTransform.name, PumkinsAvatarTools.SelectedAvatar.name); referenceTransform = null; } } } EditorGUILayout.Space(); Helpers.DrawGUILine(); PumkinsAvatarTools.Instance.DrawOverlayGUI(); Helpers.DrawGUILine(); PumkinsAvatarTools.Instance.DrawBackgroundGUI(); Helpers.DrawGUILine(); PumkinsAvatarTools.Instance.DrawCameraControlButtons(); } EditorGUILayout.EndScrollView(); Helpers.DrawGUILine(); if (!editingExistingPreset) { EditorGUI.BeginDisabledGroup(!PumkinsAvatarTools.SelectedCamera || string.IsNullOrEmpty(newPreset.name) || !PumkinsAvatarTools.SelectedAvatar); { _overwriteFile = GUILayout.Toggle(_overwriteFile, Strings.Presets.overwriteFile); EditorGUI.BeginDisabledGroup(newPreset.offsetMode == PumkinsCameraPreset.CameraOffsetMode.Transform && referenceTransform == null); { if (GUILayout.Button(Strings.Buttons.savePreset, Styles.BigButton)) { if (newPreset.offsetMode == PumkinsCameraPreset.CameraOffsetMode.Viewpoint && (Avatar.GetComponent <VRC_AvatarDescriptor>() == null)) { PumkinsAvatarTools.Log(Strings.Log.descriptorIsMissingCantGetViewpoint, LogType.Warning); } else if (newPreset.offsetMode == PumkinsCameraPreset.CameraOffsetMode.Transform) { EditorApplication.delayCall += () => { newPreset.SavePreset(referenceTransform.gameObject, PumkinsAvatarTools.SelectedCamera, _overwriteFile); Close(); }; } else { EditorApplication.delayCall += () => { newPreset.SavePreset(PumkinsAvatarTools.SelectedAvatar, PumkinsAvatarTools.SelectedCamera, _overwriteFile); Close(); }; } } EditorGUILayout.Space(); } EditorGUI.EndDisabledGroup(); } EditorGUI.EndDisabledGroup(); } } } catch { if (this) { Close(); } } }