// Disable 'obsolete' warnings #pragma warning disable 0618 using System.Collections; using System.Collections.Generic; using UnityEngine.SceneManagement; using UnityEngine; using System.IO; #if UNITY_EDITOR using UnityEditor; using UnityEditor.IMGUI.Controls; using UnityEditor.SceneManagement; #endif #if UNITY_EDITOR [CustomEditor(typeof(BakerySector))] public class BakerySectorInspector : Editor { BoxBoundsHandle boundsHandle = new BoxBoundsHandle(typeof(BakerySectorInspector).GetHashCode()); SerializedProperty ftraceCaptureMode, ftraceCaptureAssetName, ftraceCaptureAsset, ftraceAllowUV; int curSelectedB = -1; int curSelectedC = -1; Tool lastTool = Tool.None; static GUIStyle ToggleButtonStyleNormal = null; static GUIStyle ToggleButtonStyleNormalBig = null; static GUIStyle CButtonStyle = null; static GUIStyle XButtonStyle = null; static GUIStyle LabelStyle = null; GameObject objToRemove; EditorApplication.CallbackFunction remFunc; ftLightmapsStorage storage; void OnEnable() { ftraceCaptureMode = serializedObject.FindProperty("captureMode"); ftraceCaptureAssetName = serializedObject.FindProperty("captureAssetName"); ftraceCaptureAsset = serializedObject.FindProperty("captureAsset"); ftraceAllowUV = serializedObject.FindProperty("allowUVPaddingAdjustment"); } void RemoveWithUndo() { EditorApplication.delayCall -= remFunc; if (objToRemove == null) return; Undo.DestroyObjectImmediate(objToRemove); } public static void DisablePreview(BakerySector vol) { var outRend = vol.previewDisabledRenderers; if (outRend != null) { for(int i=0; i(); asset.write = true; ftRenderLightmap.fullSectorRender = true; ftBuildGraphics.modifyLightmapStorage = false; ftBuildGraphics.validateLightmapStorageImmutability = false; var exportSceneFunc = ftBuildGraphics.ExportScene(null, false, true, asset); var prevSector = storage.renderSettingsSector as BakerySector; storage.renderSettingsSector = ftRenderLightmap.curSector = vol; while(exportSceneFunc.MoveNext()) { } storage.renderSettingsSector = ftRenderLightmap.curSector = prevSector; if (asset.meshes != null && asset.meshes.Count > 0) { string fname; var activeScene = SceneManager.GetActiveScene(); if (activeScene.path.Length > 0) { fname = Path.GetDirectoryName(activeScene.path) + "/" + assetName; } else { fname = "Assets/" + assetName; } var tform = (target as BakerySector).transform; asset.sectorPos = tform.position; asset.sectorRot = tform.rotation; var apath = fname + ".asset"; AssetDatabase.CreateAsset(asset, apath); for(int i=0; i(); asset.write = true; } ftRenderLightmap.showProgressBar = false; ftRenderLightmap.fullSectorRender = true; ftBuildGraphics.modifyLightmapStorage = false; ftBuildGraphics.validateLightmapStorageImmutability = false; var exportSceneFunc = ftBuildGraphics.ExportScene(null, false, true, asset); var prevSector = storage.renderSettingsSector as BakerySector; storage.renderSettingsSector = ftRenderLightmap.curSector = vol; while(exportSceneFunc.MoveNext()) { } storage.renderSettingsSector = ftRenderLightmap.curSector = prevSector; ftRenderLightmap.showProgressBar = true; var outRend = asset.outsideRenderers; vol.previewDisabledRenderers = outRend; if (outRend != null) { for(int i=0; i 0) { GUILayout.Label("Edit capture points:"); } for(int i=0; i= 0 || curSelectedC >= 0) Tools.current = Tool.None; for(int i=0; i= 0) { Handles.matrix = origHMatrix; int i = curSelectedB; Handles.zTest = UnityEngine.Rendering.CompareFunction.Always; var pos = vol.tforms[i].position; var rot = vol.tforms[i].rotation; var scl = vol.tforms[i].localScale; if (!vol.previewEnabled) { EditorGUI.BeginChangeCheck(); if (lastTool == Tool.Move) { pos = Handles.PositionHandle(pos, Quaternion.identity); } else if (lastTool == Tool.Rotate) { rot = Handles.RotationHandle(rot, pos); } else if (lastTool == Tool.Scale) { scl = Handles.ScaleHandle(scl, pos, rot, HandleUtility.GetHandleSize(pos)); } if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(vol.tforms[i], "Change Bounds"); vol.tforms[i].position = pos; vol.tforms[i].rotation = rot; vol.tforms[i].localScale = scl; } } } Handles.matrix = Matrix4x4.identity; Handles.color = Color.green; for(int i=0; i= 0) { int i = curSelectedC; Handles.zTest = UnityEngine.Rendering.CompareFunction.Always; if (vol.cpoints[i] != null) { var pos = vol.cpoints[i].position; if (!vol.previewEnabled) { EditorGUI.BeginChangeCheck(); if (lastTool == Tool.Move) { pos = Handles.PositionHandle(pos, Quaternion.identity); } if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(vol.cpoints[i], "Change capture point"); vol.cpoints[i].position = pos; } } } } } } #endif