private void CreateList() { reorderableList = new ReorderableList(serializedObject, serializedObject.FindProperty("references"), true, true, true, true); reorderableList.drawHeaderCallback = (Rect rect) => { EditorGUI.LabelField(rect, "Object References"); }; reorderableList.elementHeight = (EditorGUIUtility.singleLineHeight * ROWS_PER_ELEMENT) + PADDING_TOP + PADDING_BOTTOM + (ROWS_PER_ELEMENT - 1) * ELEMENT_SPACING; reorderableList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => { GenericObjectPoolObject.ObjectReference reference = Instance.GetReference(index); float y = rect.y; y += PADDING_TOP; reference.Key = EditorGUI.TextField( new Rect(rect.x, y, rect.width, EditorGUIUtility.singleLineHeight), "Key", reference.Key); y += ELEMENT_SPACING + EditorGUIUtility.singleLineHeight; Object oldObj = reference.Object; reference.Object = EditorGUI.ObjectField( new Rect(rect.x, y, rect.width / 2 - LIST_SPACING, EditorGUIUtility.singleLineHeight), "Object", reference.Object, typeof(Object), false); if (oldObj != reference.Object && reference.Key == "") { reference.Key = reference.Object.name; } reference.Instances = EditorGUI.IntSlider( new Rect(rect.x + rect.width / 2, y, rect.width / 2, EditorGUIUtility.singleLineHeight), "Instances", reference.Instances, 0, 100); Instance.SetReference(index, reference); }; }
protected virtual void CreateObjects(GenericObjectPoolObject.ObjectReference reference) { if (pool.ContainsKey(reference.Key)) { Debug.LogError("Duplicate object pool keys", gameObject); return; } pool.Add(reference.Key, new Queue <Object>()); originalObjects.Add(reference.Key, reference.Object); for (int i = 0; i < reference.Instances; i++) { pool[reference.Key].Enqueue(CreateObject(reference.Object)); } }