internal void UpdateParameterField(UnityEventDrawer.PropertyData propertyData, Func <SerializedProperty> getArgumentCallback) { var modeEnum = (PersistentListenerMode)propertyData.mode.enumValueIndex; var argument = getArgumentCallback.Invoke(); //only allow argument if we have a valid target / method if (propertyData.listenerTarget.objectReferenceValue == null || string.IsNullOrEmpty(propertyData.methodName.stringValue)) { modeEnum = PersistentListenerMode.Void; } if (modeEnum == PersistentListenerMode.Void || modeEnum == PersistentListenerMode.EventDefined) { parameterProperty.style.display = DisplayStyle.None; objectParameter.style.display = DisplayStyle.None; } else if (modeEnum == PersistentListenerMode.Object) { parameterProperty.style.display = DisplayStyle.None; objectParameter.style.display = DisplayStyle.Flex; var desiredArgTypeName = propertyData.arguments.FindPropertyRelative(UnityEventDrawer.kObjectArgumentAssemblyTypeName).stringValue; var desiredType = typeof(UnityEngine.Object); if (!string.IsNullOrEmpty(desiredArgTypeName)) { desiredType = Type.GetType(desiredArgTypeName, false) ?? typeof(UnityEngine.Object); } objectParameter.objectType = desiredType; objectParameter.value = argument.objectReferenceValue; } else { parameterProperty.BindProperty(argument); objectParameter.style.display = DisplayStyle.None; parameterProperty.style.display = DisplayStyle.Flex; } }
internal void BindFields(UnityEventDrawer.PropertyData propertyData, Func <GenericMenu> createMenuCallback, Func <string, string> formatSelectedValueCallback, Func <SerializedProperty> getArgumentCallback) { callStateDropdown.BindProperty(propertyData.callState); listenerTarget.BindProperty(propertyData.listenerTarget); functionDropdown.BindProperty(propertyData.methodName); objectParameter.BindProperty(propertyData.objectArgument); listenerTarget.RegisterCallback <ChangeEvent <UnityEngine.Object> >((e) => { var isTargetValid = e.newValue != null; if (!isTargetValid) { functionDropdown.value = null; } functionDropdown.SetEnabled(isTargetValid); UpdateParameterField(propertyData, getArgumentCallback); }); functionDropdown.RegisterValueChangedCallback((e) => { UpdateParameterField(propertyData, getArgumentCallback); }); functionDropdown.createMenuCallback = () => { var genericMenu = createMenuCallback.Invoke(); var osMenu = new GenericOSMenu(genericMenu); return(osMenu); }; functionDropdown.formatSelectedValueCallback = formatSelectedValueCallback; UpdateParameterField(propertyData, getArgumentCallback); }
public void BindUnityEventItem(VisualElement item, UnityEventDrawer.PropertyData propertyData, Func <GenericMenu> createMenuCallback, Func <string, string> formatSelectedValueCallback, Func <SerializedProperty> getArgumentCallback) { var eventItem = item as UnityEventItem; eventItem.BindFields(propertyData, createMenuCallback, formatSelectedValueCallback, getArgumentCallback); }