//实现IIterator的三个接口 Object IIterator.Next() { if (mListEnumerator.MoveNext()) { XmlNode node = (XmlNode)mListEnumerator.Current; try{ mCurrentEffect = new EffectAttribute( Convert.ToInt32(node.Attributes["effect_id"].Value), Convert.ToInt32(node.Attributes["bar_num"].Value), Convert.ToInt32(node.Attributes["beat"].Value), Convert.ToBoolean(node.Attributes["flag_pos"].Value), Convert.ToSingle(node.Attributes["pos_x"].Value), Convert.ToSingle(node.Attributes["pos_y"].Value), Convert.ToSingle(node.Attributes["pos_z"].Value) ); } catch { return(null); } mIndex++; return(mCurrentEffect); } else { return(null); } }
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { EditorGUI.BeginProperty(position, label, property); EffectAttribute effectAttribute = attribute as EffectAttribute; EffectAndValueAttribute effectAndValue = attribute as EffectAndValueAttribute; label = GUIContent.none; // Draw label position = EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), label); // Don't make child fields be indented var indent = EditorGUI.indentLevel; EditorGUI.indentLevel = 0; var operatorProp = property.FindPropertyRelative("Operator"); var operatorValue = (EOperator)operatorProp.enumValueIndex; var rowPosition = position.x; var yPosition = position.y; var width = position.width / 2.0f; var col1 = new Rect(rowPosition, yPosition, 50, position.height); rowPosition += 50; var col2 = new Rect(rowPosition, yPosition, width, position.height); rowPosition += width; var col3 = new Rect(rowPosition, yPosition, 40, position.height); rowPosition += 40; var col4 = new Rect(rowPosition, yPosition, 60, position.height); rowPosition = position.x; yPosition += EditorGUIUtility.singleLineHeight; if (effectAttribute != null) { col2.width = position.width - col1.width; } EditorGUI.PropertyField(col1, property.FindPropertyRelative("StateType"), GUIContent.none); var stateTypeProp = property.FindPropertyRelative("StateType"); var stateType = (EStateType)stateTypeProp.enumValueIndex; switch (stateType) { case EStateType.Ref: EditorGUI.PropertyField(col2, property.FindPropertyRelative("KeyReference"), GUIContent.none); break; case EStateType.Code: EditorGUI.PropertyField(col2, property.FindPropertyRelative("Concatenator"), GUIContent.none); break; case EStateType.Text: EditorGUI.PropertyField(col2, property.FindPropertyRelative("StringValue"), GUIContent.none); break; } if (effectAndValue != null) { EditorGUI.LabelField(col3, "Value"); EditorGUI.PropertyField(col4, property.FindPropertyRelative("Value"), GUIContent.none); } else { if (effectAttribute == null) { var v = EditorGUI.Popup(col3, (int)operatorValue, new string[] { "*", "==", "<", ">", "!=" }); operatorProp.enumValueIndex = v; if (operatorValue != EOperator.Contains && operatorValue != EOperator.DoesNotContain) { EditorGUI.PropertyField(col4, property.FindPropertyRelative("Value"), GUIContent.none); } } } // Set indent back to what it was EditorGUI.indentLevel = indent; EditorGUI.EndProperty(); }