private static EditorEventRef GetEditorEventRef(EventReference eventReference) { if (EventManager.GetEventLinkage(eventReference) == EventLinkage.Path) { return(EventManager.EventFromPath(eventReference.Path)); } else // Assume EventLinkage.GUID { return(EventManager.EventFromGUID(eventReference.Guid)); } }
private static EditorEventRef GetRenamedEventRef(EventReference eventReference) { if (Settings.Instance.EventLinkage == EventLinkage.Path && !eventReference.Guid.IsNull) { EditorEventRef editorEventRef = EventManager.EventFromGUID(eventReference.Guid); if (editorEventRef != null && editorEventRef.Path != eventReference.Path) { return(editorEventRef); } } return(null); }
public void OnSceneGUI() { var emitter = target as StudioEventEmitter; EditorEventRef editorEvent = EventManager.EventFromGUID(emitter.EventReference.Guid); if (editorEvent != null && editorEvent.Is3D) { EditorGUI.BeginChangeCheck(); float minDistance = emitter.OverrideAttenuation ? emitter.OverrideMinDistance : editorEvent.MinDistance; float maxDistance = emitter.OverrideAttenuation ? emitter.OverrideMaxDistance : editorEvent.MaxDistance; minDistance = Handles.RadiusHandle(Quaternion.identity, emitter.transform.position, minDistance); maxDistance = Handles.RadiusHandle(Quaternion.identity, emitter.transform.position, maxDistance); if (EditorGUI.EndChangeCheck() && emitter.OverrideAttenuation) { Undo.RecordObject(emitter, "Change Emitter Bounds"); emitter.OverrideMinDistance = Mathf.Clamp(minDistance, 0, emitter.OverrideMaxDistance); emitter.OverrideMaxDistance = Mathf.Max(emitter.OverrideMinDistance, maxDistance); } } }
public override void OnInspectorGUI() { var newTargetEmitter = EditorGUILayout.ObjectField("Target", targetEmitter, typeof(StudioEventEmitter), true) as StudioEventEmitter; if (newTargetEmitter != targetEmitter) { emitters.ClearArray(); targetEmitter = newTargetEmitter; if (targetEmitter == null) { serializedObject.ApplyModifiedProperties(); return; } List <StudioEventEmitter> newEmitters = new List <StudioEventEmitter>(); targetEmitter.GetComponents(newEmitters); expanded = new bool[newEmitters.Count]; foreach (var emitter in newEmitters) { emitters.InsertArrayElementAtIndex(0); emitters.GetArrayElementAtIndex(0).FindPropertyRelative("Target").objectReferenceValue = emitter; } } if (targetEmitter == null) { return; } EditorGUILayout.PropertyField(trigger, new GUIContent("Trigger")); if (trigger.enumValueIndex >= (int)EmitterGameEvent.TriggerEnter && trigger.enumValueIndex <= (int)EmitterGameEvent.TriggerExit2D) { tag.stringValue = EditorGUILayout.TagField("Collision Tag", tag.stringValue); } var localEmitters = new List <StudioEventEmitter>(); targetEmitter.GetComponents(localEmitters); int emitterIndex = 0; foreach (var emitter in localEmitters) { SerializedProperty emitterProperty = null; for (int i = 0; i < emitters.arraySize; i++) { if (emitters.GetArrayElementAtIndex(i).FindPropertyRelative("Target").objectReferenceValue == emitter) { emitterProperty = emitters.GetArrayElementAtIndex(i); break; } } // New emitter component added to game object since we last looked if (emitterProperty == null) { emitters.InsertArrayElementAtIndex(0); emitterProperty = emitters.GetArrayElementAtIndex(0); emitterProperty.FindPropertyRelative("Target").objectReferenceValue = emitter; } if (!emitter.EventReference.IsNull) { expanded[emitterIndex] = EditorGUILayout.Foldout(expanded[emitterIndex], emitter.EventReference.Path); if (expanded[emitterIndex]) { var eventRef = EventManager.EventFromGUID(emitter.EventReference.Guid); foreach (var paramRef in eventRef.LocalParameters) { bool set = false; int index = -1; for (int i = 0; i < emitterProperty.FindPropertyRelative("Params").arraySize; i++) { if (emitterProperty.FindPropertyRelative("Params").GetArrayElementAtIndex(i).FindPropertyRelative("Name").stringValue == paramRef.Name) { index = i; set = true; break; } } EditorGUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel(paramRef.Name); bool newSet = GUILayout.Toggle(set, ""); if (!set && newSet) { index = 0; emitterProperty.FindPropertyRelative("Params").InsertArrayElementAtIndex(0); emitterProperty.FindPropertyRelative("Params").GetArrayElementAtIndex(0).FindPropertyRelative("Name").stringValue = paramRef.Name; emitterProperty.FindPropertyRelative("Params").GetArrayElementAtIndex(0).FindPropertyRelative("Value").floatValue = 0; } if (set && !newSet) { emitterProperty.FindPropertyRelative("Params").DeleteArrayElementAtIndex(index); } set = newSet; if (set) { var valueProperty = emitterProperty.FindPropertyRelative("Params") .GetArrayElementAtIndex(index).FindPropertyRelative("Value"); valueProperty.floatValue = EditorUtils.DrawParameterValueLayout(valueProperty.floatValue, paramRef); } else { using (new EditorGUI.DisabledScope(true)) { EditorUtils.DrawParameterValueLayout(0, paramRef); } } EditorGUILayout.EndHorizontal(); } } } emitterIndex++; } serializedObject.ApplyModifiedProperties(); }