/// <summary> /// This is called when we select the poi in the editor /// </summary> private void OnEnable() { if (target == null) { return; } m_trigger = (TriggerControlEnviro)target; if (m_trigger.m_enviroSky == null) { m_trigger.m_enviroSky = GameObject.FindObjectOfType <EnviroSkyMgr>(); } if (m_trigger.m_enviroSky != null) { EnviroZone zone = m_trigger.m_enviroSky.gameObject.GetComponent <EnviroZone>(); if (zone != null) { m_zoneWeatheraPrefabs = zone.zoneWeatherPresets; } } }
/// <summary> /// Draw the gui /// </summary> public override void OnInspectorGUI() { //Get our trigger m_trigger = (TriggerControlEnviro)target; //Set up the box style if (m_boxStyle == null) { m_boxStyle = new GUIStyle(GUI.skin.box); m_boxStyle.normal.textColor = GUI.skin.label.normal.textColor; m_boxStyle.fontStyle = FontStyle.Bold; m_boxStyle.alignment = TextAnchor.UpperLeft; } //Setup the wrap style if (m_wrapStyle == null) { m_wrapStyle = new GUIStyle(GUI.skin.label); m_wrapStyle.wordWrap = true; } //Create a nice text intro GUILayout.BeginVertical("Enviro Weather Trigger", m_boxStyle); GUILayout.Space(20); EditorGUILayout.LabelField("This trigger controls Enviro time and weather settings.", m_wrapStyle); GUILayout.EndVertical(); EditorGUI.BeginChangeCheck(); GUILayout.Space(5); if (m_trigger.m_enviroSky == null) { EditorGUILayout.LabelField("Enviro Sky is missing from scene!!"); } bool controlTime = EditorGUILayout.Toggle("Control Time", m_trigger.m_controlTime); float startTime = m_trigger.m_startTime; float endTime = m_trigger.m_endTime; if (controlTime) { EditorGUI.indentLevel++; EditorGUILayout.LabelField(string.Format("{0:00}:{1:00} - {2:00}:{3:00}", Mathf.FloorToInt(startTime), (startTime % 1.0f) * 60f, Mathf.FloorToInt(endTime), (endTime % 1.0f) * 60f)); startTime = EditorGUILayout.Slider(GetLabel("Start Time"), startTime, 0f, 23.99f); endTime = EditorGUILayout.Slider(GetLabel("End Time"), endTime, 0f, 23.99f); EditorGUI.indentLevel--; } bool controlWeather = EditorGUILayout.Toggle("Control Weather", m_trigger.m_controlWeather); int weatherID = m_trigger.m_weatherID; float weatherTransitionTime = m_trigger.m_weatherTransitionTime; if (controlWeather) { EditorGUI.indentLevel++; if (m_zoneWeatheraPrefabs.Count > 0) { GUIContent[] zonePrefabs = new GUIContent[m_zoneWeatheraPrefabs.Count]; for (int idx = 0; idx < zonePrefabs.Length; idx++) { zonePrefabs[idx] = new GUIContent(m_zoneWeatheraPrefabs[idx].Name); } weatherID = EditorGUILayout.Popup(GetLabel("Weather"), weatherID, zonePrefabs); } else { weatherID = EditorGUILayout.IntField("Weather ID", weatherID); } weatherTransitionTime = EditorGUILayout.FloatField("Transition Time", weatherTransitionTime); EditorGUI.indentLevel--; } GUILayout.Space(5); //Check for changes, make undo record, make changes and let editor know we are dirty if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(m_trigger, "Made trigger changes"); m_trigger.m_triggerAtStart = controlTime || controlWeather; m_trigger.m_triggerOnUpdate = controlTime; m_trigger.m_triggerAtEnd = false; m_trigger.m_controlTime = controlTime; m_trigger.m_startTime = startTime; m_trigger.m_endTime = endTime; m_trigger.m_controlWeather = controlWeather; m_trigger.m_weatherID = weatherID; m_trigger.m_weatherTransitionTime = weatherTransitionTime; //Mark it as dirty EditorUtility.SetDirty(m_trigger); } }