using System; using UnityEditor; using UnityEditor.UIElements; using UnityEngine.Experimental.Perception.Randomization.Editor; using UnityEngine.UIElements; namespace UnityEngine.Experimental.Perception.Randomization.VisualElements { class RandomizerElement : VisualElement { SerializedProperty m_Collapsed; SerializedProperty m_Property; VisualElement m_PropertiesContainer; Randomizers.Randomizer randomizer => (Randomizers.Randomizer)StaticData.GetManagedReferenceValue(m_Property); public Type randomizerType => randomizer.GetType(); const string k_CollapsedParameterClass = "collapsed"; public RandomizerList randomizerList { get; } public bool collapsed { get => m_Collapsed.boolValue; set { m_Collapsed.boolValue = value; m_Property.serializedObject.ApplyModifiedPropertiesWithoutUndo(); if (value) AddToClassList(k_CollapsedParameterClass); else RemoveFromClassList(k_CollapsedParameterClass); } } public RandomizerElement(SerializedProperty property, RandomizerList randomizerList) { m_Property = property; this.randomizerList = randomizerList; m_Collapsed = property.FindPropertyRelative("collapsed"); collapsed = m_Collapsed.boolValue; AssetDatabase.LoadAssetAtPath( $"{StaticData.uxmlDir}/Randomizer/RandomizerElement.uxml").CloneTree(this); var classNameLabel = this.Q("class-name"); var splitType = property.managedReferenceFullTypename.Split(' ', '.'); classNameLabel.text = splitType[splitType.Length - 1]; m_PropertiesContainer = this.Q("properties"); var collapseToggle = this.Q("collapse"); collapseToggle.RegisterCallback(evt => collapsed = !collapsed); var enabledToggle = this.Q("enabled"); enabledToggle.BindProperty(property.FindPropertyRelative("k__BackingField")); var removeButton = this.Q