private void MergeTileParameters(List <uint> listOfTileData) { List <Parameter> fullParameterList = new List <Parameter>(); foreach (uint tileData in listOfTileData) { ParameterContainer @params = TilemapUtils.GetParamsFromTileData(Tileset, tileData); foreach (Parameter param in @params.ParameterList) { if (!fullParameterList.Exists(o => o.name.Equals(param.name))) { fullParameterList.Add(param); } } } foreach (uint tileData in listOfTileData) { ParameterContainer @params = TilemapUtils.GetParamsFromTileData(Tileset, tileData); foreach (Parameter param in fullParameterList) { if ([email protected](o => o.name.Equals(param.name))) { @params.ParameterList.Add(param.Clone()); } } } }
public static ReorderableList CreateParameterReorderableList(ParameterContainer paramContainer) { ReorderableList reordList = new ReorderableList(paramContainer.ParameterList, typeof(Parameter), true, true, true, true); reordList.onAddDropdownCallback = (Rect buttonRect, ReorderableList l) => { GenericMenu menu = new GenericMenu(); GenericMenu.MenuFunction addBoolParamFunc = () => { paramContainer.AddNewParam(new Parameter("new bool", false)); }; GenericMenu.MenuFunction addIntParamFunc = () => { paramContainer.AddNewParam(new Parameter("new int", 0)); }; GenericMenu.MenuFunction addFloatParamFunc = () => { paramContainer.AddNewParam(new Parameter("new float", 0f)); }; GenericMenu.MenuFunction addObjectParamFunc = () => { paramContainer.AddNewParam(new Parameter("new object", null)); }; GenericMenu.MenuFunction removeAllFunc = () => { if (EditorUtility.DisplayDialog("Warning!", "Are you sure you want to delete all items?", "Yes", "No")) { paramContainer.RemoveAll(); } }; menu.AddItem(new GUIContent("Add Bool"), false, addBoolParamFunc); menu.AddItem(new GUIContent("Add Int"), false, addIntParamFunc); menu.AddItem(new GUIContent("Add Float"), false, addFloatParamFunc); menu.AddItem(new GUIContent("Add Object"), false, addObjectParamFunc); menu.AddSeparator(""); menu.AddItem(new GUIContent("Remove All"), false, removeAllFunc); menu.AddSeparator(""); menu.AddItem(new GUIContent("Sort By Name"), false, paramContainer.SortByName); menu.ShowAsContext(); }; reordList.onRemoveCallback = (ReorderableList list) => { if (EditorUtility.DisplayDialog("Warning!", "Are you sure you want to delete this item?", "Yes", "No")) { ReorderableList.defaultBehaviours.DoRemoveButton(list); } }; reordList.drawHeaderCallback = (Rect rect) => { EditorGUI.LabelField(rect, "Parameters", EditorStyles.boldLabel); Texture2D btnTexture = reordList.elementHeight == 0f ? EditorGUIUtility.FindTexture("winbtn_win_max_h") : EditorGUIUtility.FindTexture("winbtn_win_min_h"); if (GUI.Button(new Rect(rect.width - rect.height, rect.y, rect.height, rect.height), btnTexture, EditorStyles.label)) { reordList.elementHeight = reordList.elementHeight == 0f ? EditorGUIUtility.singleLineHeight : 0f; reordList.draggable = reordList.elementHeight > 0f; } }; reordList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => { if (reordList.elementHeight == 0f) { return; } Parameter param = reordList.list[index] as Parameter; if (index == 0) { s_maxLabelNameSize = 0f; foreach (Parameter p in paramContainer.ParameterList) { s_maxLabelNameSize = Mathf.Max(s_maxLabelNameSize, EditorStyles.label.CalcSize(new GUIContent(p.name + ".")).x); //NOTE: adding '.' to make sure ending spaces are not skipped } } Rect rLabel = new Rect(rect.x, rect.y, s_maxLabelNameSize, EditorGUIUtility.singleLineHeight); if (index == reordList.index) { string newName = EditorGUI.TextField(rLabel, param.name); if (newName != param.name) { paramContainer.RenameParam(param.name, newName); } } else { EditorGUI.LabelField(rLabel, param.name); } Rect rParamValue = new Rect(rLabel.x + s_maxLabelNameSize, rLabel.y, rect.width - s_maxLabelNameSize, rLabel.height); if (param.GetParamType() == eParameterType.Bool) { param.SetValue(EditorGUI.Toggle(rParamValue, param.GetAsBool())); } else if (param.GetParamType() == eParameterType.Int) { param.SetValue(EditorGUI.IntField(rParamValue, param.GetAsInt())); } else if (param.GetParamType() == eParameterType.Float) { param.SetValue(EditorGUI.FloatField(rParamValue, param.GetAsFloat())); } else if (param.GetParamType() == eParameterType.Object) { param.SetValue(EditorGUI.ObjectField(rParamValue, param.GetAsObject(), typeof(UnityEngine.Object), false)); } }; return(reordList); }