public override void Gaze_OnInspectorGUI() { base.BeginChangeComparision(); // display conditions if (actionsScript.isActive) { if (!Application.isPlaying) { EditorGUILayout.Space(); Gaze_EditorUtils.DrawSectionTitle("DELAY"); ShowDelayBlock(); EditorGUILayout.Space(); if (actionsScript && !actionsScript.DestroyOnTrigger) { EditorGUILayout.Space(); Gaze_EditorUtils.DrawSectionTitle("ACTIONS"); Gaze_EditorUtils.DrawEditorHint("Actions will be fired once all conditions are met"); Gaze_EditorUtils.DrawSectionTitle("Object"); ShowVisualsOption(); ShowCollidersOption(); ShowGravityOption(); } actionsScript.DestroyOnTrigger = EditorGUILayout.ToggleLeft("Destroy", actionsScript.DestroyOnTrigger); if (actionsScript && !actionsScript.DestroyOnTrigger) { EditorGUILayout.Space(); Gaze_EditorUtils.DrawSectionTitle("Animation & Audio"); ShowAudioOptions(); ShowAnimationOptions(); // Gaze_EditorUtils.DrawSectionTitle("ARKit"); // EditorGUILayout.Space(); // ShowARPlaceOptions(); } } } // save changes base.EndChangeComparision(); EditorUtility.SetDirty(actionsScript); }
private void DisplayDuration() { // DURATION Gaze_EditorUtils.DrawSectionTitle("Duration"); Gaze_EditorUtils.DrawEditorHint("How much time conditions need to remain valid."); Gaze_EditorUtils.DrawEditorHint("(Useful for conditions not instantaneous like gaze or proximity.)"); EditorGUI.indentLevel++; GUILayout.BeginHorizontal(); targetConditions.focusDuration = EditorGUILayout.FloatField("Duration [s]", targetConditions.focusDuration); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); targetConditions.focusLossModeIndex = EditorGUILayout.Popup("Loss Mode", targetConditions.focusLossModeIndex, focusLossModes); if (targetConditions.focusLossModeIndex.Equals((int)Gaze_FocusLossMode.FADE)) { targetConditions.FocusLossSpeed = EditorGUILayout.FloatField("Speed Factor", targetConditions.FocusLossSpeed); } GUILayout.EndHorizontal(); EditorGUILayout.Space(); EditorGUI.indentLevel--; // END OF DURATION }
public void ShowAudioOptions() { #region AudioSource actionsScript.ActionAudio = (Gaze_Actions.ACTIVABLE_OPTION)EditorGUILayout.EnumPopup(new GUIContent("Audio", "Launch a sound using this action."), actionsScript.ActionAudio); if (actionsScript.ActionAudio != Gaze_Actions.ACTIVABLE_OPTION.NOTHING) { EditorGUILayout.BeginVertical(); if (hierarchyAudioSources.Count > 0) { Gaze_EditorUtils.DrawSectionTitle("Audio Setup"); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(new GUIContent("Audio Source", "Select the audiosource you want to use to play your audio if you have many on your IO")); if (!hierarchyAudioSources.Contains(actionsScript.targetAudioSource)) { actionsScript.targetAudioSource = hierarchyAudioSources[0]; } actionsScript.targetAudioSource = hierarchyAudioSources[EditorGUILayout.Popup(hierarchyAudioSources.IndexOf(actionsScript.targetAudioSource), hierarchyAudioSourceNames.ToArray())]; EditorGUILayout.EndHorizontal(); } else { EditorGUILayout.HelpBox("No audio sources found.", MessageType.Warning); } EditorGUILayout.EndVertical(); #endregion AudioSource #region AudioClips if (actionsScript.ActionAudio == Gaze_Actions.ACTIVABLE_OPTION.ACTIVATE) { actionsScript.activeTriggerStatesAudio[0] = EditorGUILayout.ToggleLeft(Gaze_HashIDs.TriggerEventsAndStates[0], actionsScript.activeTriggerStatesAudio[0]); if (actionsScript.activeTriggerStatesAudio[0]) { DisplayAudioBlock(0); } EditorGUI.indentLevel++; ShowOtherAudioOptions = EditorGUILayout.Foldout(ShowOtherAudioOptions, "More Options:"); if (ShowOtherAudioOptions) { for (int i = 1; i < Gaze_HashIDs.TriggerEventsAndStates.Length; i++) { actionsScript.activeTriggerStatesAudio[i] = EditorGUILayout.ToggleLeft(new GUIContent(Gaze_HashIDs.TriggerEventsAndStates[i], AudioTriggerEvensAndStatesHints[i]), actionsScript.activeTriggerStatesAudio[i]); if (actionsScript.activeTriggerStatesAudio[i]) { DisplayAudioBlock(i); } } } EditorGUI.indentLevel--; EditorGUILayout.Space(); Gaze_EditorUtils.DrawSectionTitle("Audio Parameters"); actionsScript.audio_stopOthers = EditorGUILayout.ToggleLeft(new GUIContent("Stop Other Audios", "Stops any others audios launched by this IO only"), actionsScript.audio_stopOthers); // Randomize Pitch actionsScript.audio_randomizePitch = EditorGUILayout.ToggleLeft(new GUIContent("Randomize pitch", "Change the pitch of this interaction only"), actionsScript.audio_randomizePitch); if (actionsScript.audio_randomizePitch) { actionsScript.audio_minPitch = EditorGUILayout.FloatField("Min pitch", actionsScript.audio_minPitch, GUILayout.Width(300)); Gaze_Utils.EnsureFieldIsPositiveOrZero(ref actionsScript.audio_minPitch); actionsScript.audio_maxPitch = EditorGUILayout.FloatField("Max pitch", actionsScript.audio_maxPitch, GUILayout.Width(300)); Gaze_Utils.EnsureFieldIsPositiveOrZero(ref actionsScript.audio_maxPitch); } // End of Randomize Pitch #endregion onAfter #region Fade In GUILayout.BeginHorizontal(); actionsScript.fadeInEnabled = EditorGUILayout.ToggleLeft("Fade In", actionsScript.fadeInEnabled); if (actionsScript.fadeInEnabled) { actionsScript.fadeInTime = EditorGUILayout.FloatField("", actionsScript.fadeInTime, GUILayout.Width(100)); Gaze_Utils.EnsureFieldIsPositiveOrZero(ref actionsScript.fadeInTime); EditorGUILayout.LabelField("[s]"); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); actionsScript.fadeInCurve = EditorGUILayout.CurveField(actionsScript.fadeInCurve, Color.green, new Rect(0, 0, actionsScript.fadeInTime, 1), GUILayout.Width(400)); } GUILayout.EndHorizontal(); if (actionsScript.DontHaveAudioLoop()) { GUILayout.BeginHorizontal(); actionsScript.fadeOutEnabled = EditorGUILayout.ToggleLeft("Fade Out", actionsScript.fadeOutEnabled); if (actionsScript.fadeOutEnabled) { actionsScript.fadeOutTime = EditorGUILayout.FloatField("", actionsScript.fadeOutTime, GUILayout.Width(100)); Gaze_Utils.EnsureFieldIsPositiveOrZero(ref actionsScript.fadeOutTime); EditorGUILayout.LabelField("[s]"); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); actionsScript.fadeOutCurve = EditorGUILayout.CurveField(actionsScript.fadeOutCurve, Color.green, new Rect(0, 0, actionsScript.fadeOutTime, 1), GUILayout.Width(400)); } GUILayout.EndHorizontal(); #endregion #region Ducking if (actionsScript.ActionAudio == Gaze_Actions.ACTIVABLE_OPTION.ACTIVATE) { actionsScript.duckingEnabled = EditorGUILayout.ToggleLeft(new GUIContent("Ducking", "The volume rises when this IO is Gazed"), actionsScript.duckingEnabled); if (actionsScript.duckingEnabled) { DisplayAudioDuckingBlock(); } else { DisplayAudioVolume(); } } #endregion } EditorGUILayout.Space(); Gaze_EditorUtils.DrawSectionTitle("Audio Reload Parameters"); Gaze_EditorUtils.DrawEditorHint("By default audios will wait until the last one is finished when reloaded"); EditorGUILayout.Space(); actionsScript.audio_ForceStop = EditorGUILayout.ToggleLeft(new GUIContent("Immediate play", "Stops others audios launched with this interaction when reloaded."), actionsScript.audio_ForceStop); if (!actionsScript.audio_ForceStop) { actionsScript.audio_AllowMultiple = EditorGUILayout.ToggleLeft(new GUIContent("Cumulate audios", "Cumulates audios launched with this interaction when reloaded."), actionsScript.audio_AllowMultiple); if (actionsScript.audio_AllowMultiple) { actionsScript.audio_MaxConcurrentSound = EditorGUILayout.IntField("Max concurrent audios", actionsScript.audio_MaxConcurrentSound); } } } if (actionsScript.ActionAudio == Gaze_Actions.ACTIVABLE_OPTION.DEACTIVATE) { #region Fade Out GUILayout.BeginHorizontal(); actionsScript.fadeOutDeactEnabled = EditorGUILayout.ToggleLeft("Fade Out", actionsScript.fadeOutDeactEnabled); if (actionsScript.fadeOutDeactEnabled) { actionsScript.fadeOutDeactTime = EditorGUILayout.FloatField("", actionsScript.fadeOutDeactTime, GUILayout.Width(200)); Gaze_Utils.EnsureFieldIsPositiveOrZero(ref actionsScript.fadeOutDeactTime); EditorGUILayout.LabelField("[s]"); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); actionsScript.fadeOutDeactCurve = EditorGUILayout.CurveField(actionsScript.fadeOutDeactCurve, Color.green, new Rect(0, 0, actionsScript.fadeOutDeactTime, 1), GUILayout.Width(400)); } GUILayout.EndHorizontal(); #endregion } } }
public override void Gaze_OnInspectorGUI() { base.BeginChangeComparision(); if (CRIS_IS_IN_DA_HOUSE) { if (GUILayout.Button("Validate")) { targetConditions.Validate(); } } // display conditions if (targetConditions.isActive) { if (!Application.isPlaying) { EditorGUILayout.Space(); // update InteractiveObjects list UpdateInteractiveObjectsList(); Gaze_EditorUtils.DrawSectionTitle("DEPENDENCIES"); Gaze_EditorUtils.DrawEditorHint("Use this to create chain reactions with any other interactions in the scene."); #region Dependency // set boolean value accordingly in Trigger settings targetConditions.dependent = EditorGUILayout.ToggleLeft("Dependent", targetConditions.dependent); if (targetConditions.dependent) { DisplayDependencyBlock(); } EditorGUILayout.Space(); #endregion #region Conditions EditorGUILayout.Space(); Gaze_EditorUtils.DrawSectionTitle("CONDITIONS"); DisplayConditionsBlock(); DisplayProximityList(); DisplayARKitTouchCondition(); EditorGUILayout.Space(); #endregion #region Custom Conditions Gaze_EditorUtils.DrawSectionTitle("CUSTOM CONDITIONS"); Gaze_EditorUtils.DrawEditorHint("Enable this to use your custom script as a Condition.", false); Gaze_EditorUtils.DrawEditorHint("See user manual for detailed structure."); targetConditions.customConditionsEnabled = EditorGUILayout.ToggleLeft("Custom Conditions", targetConditions.customConditionsEnabled); if (targetConditions.customConditionsEnabled) { DisplayCustomConditionsList(); } EditorGUILayout.Space(); #endregion #region Warning //DisplayWarning(); #endregion DisplayDuration(); #region Delayed ActiveWindow Gaze_EditorUtils.DrawSectionTitle("TIMEFRAME"); // extra block that can be toggled on and off GUILayout.BeginHorizontal(); // set boolean value accordingly in Trigger settings targetConditions.delayed = EditorGUILayout.ToggleLeft(new GUIContent("Delayed", "Amount of time (seconds) this interaction will have to wait before allowing the user to validate the conditions."), targetConditions.delayed); if (targetConditions.delayed) { DisplayDelayBlock(); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); // set boolean value accordingly in Trigger settings targetConditions.expires = EditorGUILayout.ToggleLeft(new GUIContent("Expires", "Conditions can be met only during this amount of time. The interaction will then be deactivated."), targetConditions.expires); if (targetConditions.expires) { DisplayExpiresBlock(); } GUILayout.EndHorizontal(); // set boolean value accordingly in Trigger settings targetConditions.autoTriggerModeIndex = EditorGUILayout.Popup("Auto Trigger Mode", targetConditions.autoTriggerModeIndex, autoTriggerModes); if (((Gaze_AutoTriggerMode)targetConditions.autoTriggerModeIndex).Equals(Gaze_AutoTriggerMode.END) && !targetConditions.expires) { EditorGUILayout.HelpBox("This trigger does not expire, it will never auto-trigger.", MessageType.Warning); } else if (targetConditions.autoTriggerModeIndex.Equals((int)Gaze_AutoTriggerMode.NONE) && targetConditions.expires && targetConditions.activeDuration == 0) { if (!(targetConditions.isExpireRandom && targetConditions.expireRange[1] > 0)) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.HelpBox("Will never trigger !\n(Expires immediately AND has no Auto-Trigger).", MessageType.Warning); EditorGUILayout.EndHorizontal(); } } EditorGUILayout.Space(); #endregion #region Reload // toggle button Gaze_EditorUtils.DrawSectionTitle("RELOAD"); // set boolean value accordingly in Trigger settings targetConditions.reload = EditorGUILayout.ToggleLeft(new GUIContent("Reload", "Allows you to reload the conditions of an interaction (does not reload dependencies)."), targetConditions.reload); if (targetConditions.reload) { DisplayReloadBlock(); } EditorGUILayout.Space(); #endregion } } // save changes base.EndChangeComparision(); EditorUtility.SetDirty(targetConditions); }