public void LoadEmitters(PolygonStage stage) { int i = 0; //load emitters and emitterManagers, dont forget to handle emitter repeat and delay ! (stored in PolygonStage) foreach (var emitter in stage.emitters) { emitter.life = 4000 + i++ *700; EmitterManager em = new EmitterManager(); em.LoadEmitter(emitter); emitters.Add(em); } }
void OnEnable() { stage = (PolygonStage)target; emitterList = new ReorderableList( serializedObject, serializedObject.FindProperty("emitters"), true, true, true, true ); emitterList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => { //get the PolygonEmitter element: var element = emitterList.serializedProperty.GetArrayElementAtIndex(index); PolygonEmitter peo = element.objectReferenceValue as System.Object as PolygonEmitter; rect.y += 2; EditorGUI.PropertyField( new Rect(rect.x, rect.y, 300, EditorGUIUtility.singleLineHeight), element, GUIContent.none ); rect.x += 300 + 20; //add missing delay for emitters while (stage.transitionDelay.Count < stage.emitters.Count) { stage.transitionDelay.Add(0); } if (peo != null && stage.transitionDelay.Count > index) { EditorGUI.LabelField( new Rect(rect.x, rect.y, 90, EditorGUIUtility.singleLineHeight), "transition (ms)" ); rect.x += 90 + 20; stage.transitionDelay[index] = EditorGUI.FloatField( new Rect(rect.x, rect.y, 60, EditorGUIUtility.singleLineHeight), stage.transitionDelay[index] ); } }; emitterList.onSelectCallback = (ReorderableList l) => { var prefab = l.serializedProperty.GetArrayElementAtIndex(l.index).objectReferenceValue as System.Object as PolygonEmitter; if (prefab) { EditorGUIUtility.PingObject(prefab); } }; emitterList.onRemoveCallback = (ReorderableList l) => { if (l.serializedProperty.GetArrayElementAtIndex(l.index).objectReferenceValue as System.Object as PolygonEmitter != null) { ReorderableList.defaultBehaviours.DoRemoveButton(l); } ReorderableList.defaultBehaviours.DoRemoveButton(l); }; //new the uninitialized vas }