public MakableBlock(SerializedProperty property, ItemModule module) : base(property, module) { makingMethod = property.FindPropertyRelative("makingMethod"); canMakeByTry = property.FindPropertyRelative("canMakeByTry"); formulation = property.FindAutoPropertyRelative("Formulation"); yields = property.FindAutoPropertyRelative("Yields"); list = new ReorderableList(property.serializedObject, yields) { drawElementCallback = (rect, index, isActive, isFocused) => { SerializedProperty element = yields.GetArrayElementAtIndex(index); SerializedProperty yield = element.FindAutoPropertyRelative("Yield"); SerializedProperty rate = element.FindAutoPropertyRelative("Rate"); EditorGUI.LabelField(new Rect(rect.x, rect.y, 50, EditorGUIUtility.singleLineHeight), "产量"); yield.intValue = EditorGUI.IntField(new Rect(rect.x + 52, rect.y, 100, EditorGUIUtility.singleLineHeight), yield.intValue); if (yield.intValue < 1) { yield.intValue = 1; } EditorGUI.LabelField(new Rect(rect.x + 154, rect.y, 50, EditorGUIUtility.singleLineHeight), "概率"); rate.floatValue = EditorGUI.Slider(new Rect(rect.x + 206, rect.y, rect.width - 206, EditorGUIUtility.singleLineHeight), rate.floatValue, 0, 1); }, elementHeightCallback = (index) => { return(EditorGUIUtility.singleLineHeight); }, onCanRemoveCallback = (list) => { return(yields.arraySize > 1 && list.IsSelected(list.index)); }, headerHeight = 0, }; }
private void OnAddDropdownElement(Rect rect, ReorderableList list) { if (0 <= list.index && list.index < tile.m_TilingRules.Count && list.IsSelected(list.index)) { GenericMenu menu = new GenericMenu(); menu.AddItem(EditorGUIUtility.TrTextContent("Add"), false, OnAddElement, list); menu.AddItem(EditorGUIUtility.TrTextContent("Duplicate"), false, OnDuplicateElement, list); menu.DropDown(rect); } else { OnAddElement(list); } }
private void OnAddElement(ReorderableList list) { var count = tile.m_AnimatedSprites != null ? tile.m_AnimatedSprites.Length + 1 : 1; ResizeAnimatedSpriteList(count); if (list.index == 0 || list.index < list.count) { Array.Copy(tile.m_AnimatedSprites, list.index + 1, tile.m_AnimatedSprites, list.index + 2, list.count - list.index - 1); tile.m_AnimatedSprites[list.index + 1] = null; if (list.IsSelected(list.index)) { list.index += 1; } } else { tile.m_AnimatedSprites[count - 1] = null; } }