Exemplo n.º 1
0
        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;
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }