Example #1
0
        public static string GetOutportLabel(SerializedProperty conditionalProp)
        {
            if (m_blankSetterElements == null)
            {
                SetElementTypeDictionary();
            }
            IBlackboardSetterElement blankSetter = null;
            string managedReferenceTypeStr       = conditionalProp.managedReferenceFullTypename;

            m_blankSettersByTypeString.TryGetValue(managedReferenceTypeStr, out blankSetter);
            if (blankSetter == null)
            {
                GetTypeFromManagedReferenceFullTypeName(managedReferenceTypeStr, out Type conditionalType);
                if (conditionalType == null)
                {
                    return("");
                }

                m_blankSetterElements.TryGetValue(conditionalType, out blankSetter);
                if (blankSetter != null)
                {
                    m_blankSettersByTypeString.Add(managedReferenceTypeStr, blankSetter);
                }
            }
            return(blankSetter != null?blankSetter.GetOutportLabel(conditionalProp) : "");
        }
Example #2
0
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            EditorGUI.BeginProperty(position, label, property);
            property.serializedObject.Update();
            bool blackboardEleIsSet = true;

            SerializedProperty       setterValueProp         = property.FindPropertyRelative(BlackboardSetter.SetterValueVarName);
            List <BlackboardElement> blackboardElements      = (property.serializedObject.targetObject as NodeGraph).BlackboardProperties.GetAllElements();
            SerializedProperty       blackboardElementIdProp = property.FindPropertyRelative(BlackboardSetter.BlackboardElementIdVarName);
            int selectedIndex = blackboardElements.FindIndex(x => x.GUID == blackboardElementIdProp.stringValue);

            if (selectedIndex == -1) // Trying to handle this here causes the apocalypse. Just rely on the NodeView.
            {
                blackboardEleIsSet = false;
            }

            EditorGUI.BeginChangeCheck();
            selectedIndex = EditorGUILayout.Popup("Blackboard Element", selectedIndex, blackboardElements.Select(x => x.Name).ToArray());
            if (EditorGUI.EndChangeCheck())
            {
                int group = Undo.GetCurrentGroup();
                Undo.RecordObject(property.serializedObject.targetObject, "Switching BlackboardConditional element");
                blackboardElementIdProp.stringValue = blackboardElements[selectedIndex].GUID;

                BlackboardElement ele = blackboardElements[selectedIndex];
                BlackboardSetter.BlackboardSetterElementTypes.TryGetValue(ele.GetType(), out Type setterElementType);
                if (setterElementType == null)
                {
                    setterValueProp.managedReferenceValue = null;
                    blackboardEleIsSet = false;
                }
                else
                {
                    IBlackboardSetterElement newSetterEle = Activator.CreateInstance(setterElementType) as IBlackboardSetterElement;
                    setterValueProp.managedReferenceValue = newSetterEle;
                }

                property.serializedObject.ApplyModifiedProperties();
                Undo.CollapseUndoOperations(group);
            }

            if (blackboardEleIsSet)
            {
                GUILayout.BeginVertical("box");
                EditorGUILayout.PropertyField(setterValueProp);
                GUILayout.EndVertical();
            }

            EditorGUI.EndProperty();
        }