Exemple #1
0
        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());
                    }
                }
            }
        }
Exemple #2
0
        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);
        }