public override void OnInspectorGUI() { serializedObject.Update(); if (m_prevTileset != m_brush.Tileset) { if (m_prevTileset) { m_prevTileset.OnBrushSelected -= OnBrushSelected; m_prevTileset.OnTileSelected -= OnTileSelected; } OnDisable(); OnEnable(); } m_prevTileset = m_brush.Tileset; base.OnInspectorGUI(); if (!m_brush.Tileset) { return; } Vector2 visualTileSize = m_brush.Tileset.VisualTileSize; EditorGUILayout.Space(); GUILayoutUtility.GetRect(1f, 1f, GUILayout.Width(visualTileSize.x), GUILayout.Height(visualTileSize.y)); Rect rSelectedTile = GUILayoutUtility.GetLastRect(); uint tileData = m_brush.GetAnimTileData(); if (tileData != Tileset.k_TileData_Empty) { rSelectedTile.center = new Vector2(EditorGUIUtility.currentViewWidth / 2, rSelectedTile.center.y); GUI.Box(new Rect(rSelectedTile.position - Vector2.one, rSelectedTile.size + 2 * Vector2.one), ""); TilesetEditor.DoGUIDrawTileFromTileData(rSelectedTile, tileData, m_brush.Tileset); } EditorGUILayout.Space(); SerializedProperty randomFlagMaskProperty = serializedObject.FindProperty("RandomizeFlagMask"); System.Enum enumNew = EditorCompatibilityUtils.EnumMaskField(new GUIContent("Random Flags", "Applies random flags when painting tiles"), (eRandomFlags)(randomFlagMaskProperty.longValue >> 29)); randomFlagMaskProperty.longValue = ((long)System.Convert.ChangeType(enumNew, typeof(long)) & 0x7) << 29; uint brushTileData = m_randTileList.index >= 0 ? m_brush.RandomTileList[m_randTileList.index].tileData : Tileset.k_TileData_Empty; brushTileData = BrushTileGridControl.DoTileDataPropertiesLayout(brushTileData, m_brush.Tileset, false); if (m_randTileList.index >= 0) { m_brush.RandomTileList[m_randTileList.index].tileData = brushTileData; } EditorGUILayout.Space(); EditorGUILayout.HelpBox("Activate this to use animated brushes as random tiles", MessageType.Info); EditorGUILayout.PropertyField(serializedObject.FindProperty("RemoveBrushIdAfterRefresh")); // Draw List m_randTileList.elementHeight = visualTileSize.y + 35f; m_randTileList.DoLayoutList(); if (Event.current.type == EventType.Repaint) { m_randTileListHasFocus = m_randTileList.HasKeyboardControl(); } TileSelection tileSelection = ((TilesetBrush)target).Tileset.TileSelection; if (tileSelection != null) { if (GUILayout.Button("Add tiles from tile selection")) { m_brush.RandomTileList.AddRange(tileSelection.selectionData.Select(x => new RandomBrush.RandomTileData() { tileData = x, probabilityFactor = 1f })); } } EditorGUILayout.HelpBox("Select a tile from list and then select a tile from tile selection window.", MessageType.Info); EditorGUILayout.HelpBox("Add and Remove tiles with '+' and '-' buttons.", MessageType.Info); Repaint(); serializedObject.ApplyModifiedProperties(); if (GUI.changed) { m_brush.InvalidateSortedList(); EditorUtility.SetDirty(target); } }
public TileView(string name, TileSelection tileSelection) { m_name = name; m_tileSelection = tileSelection; }
public static ReorderableList CreateTileViewReorderableList(Tileset tileset) { ReorderableList tileViewRList = new ReorderableList(tileset.TileViews, typeof(TileView), true, true, true, true); tileViewRList.onAddDropdownCallback = (Rect buttonRect, ReorderableList l) => { GenericMenu menu = new GenericMenu(); GenericMenu.MenuFunction addTileSelectionFunc = () => { TileSelection tileSelection = tileset.TileSelection.Clone(); tileSelection.FlipVertical(); // flip vertical to fit the tileset coordinate system ( from top to bottom ) tileset.AddTileView("new TileView", tileSelection); EditorUtility.SetDirty(tileset); }; GenericMenu.MenuFunction addBrushSelectionFunc = () => { TileSelection tileSelection = BrushBehaviour.CreateTileSelection(); tileset.AddTileView("new TileView", tileSelection); EditorUtility.SetDirty(tileset); }; GenericMenu.MenuFunction removeAllTileViewsFunc = () => { if (EditorUtility.DisplayDialog("Warning!", "Are you sure you want to delete all the TileViews?", "Yes", "No")) { tileset.RemoveAllTileViews(); EditorUtility.SetDirty(tileset); } }; if (tileset.TileSelection != null) { menu.AddItem(new GUIContent("Add Tile Selection"), false, addTileSelectionFunc); } else { menu.AddDisabledItem(new GUIContent("Add Tile Selection to TileView")); } if (BrushBehaviour.GetBrushTileset() == tileset && BrushBehaviour.CreateTileSelection() != null) { menu.AddItem(new GUIContent("Add Brush Selection"), false, addBrushSelectionFunc); } menu.AddSeparator(""); menu.AddItem(new GUIContent("Remove All TileViews"), false, removeAllTileViewsFunc); menu.AddSeparator(""); menu.AddItem(new GUIContent("Sort By Name"), false, tileset.SortTileViewsByName); menu.ShowAsContext(); }; tileViewRList.onRemoveCallback = (ReorderableList list) => { if (EditorUtility.DisplayDialog("Warning!", "Are you sure you want to delete the TileView?", "Yes", "No")) { ReorderableList.defaultBehaviours.DoRemoveButton(list); EditorUtility.SetDirty(tileset); } }; tileViewRList.drawHeaderCallback = (Rect rect) => { EditorGUI.LabelField(rect, "TileViews", EditorStyles.boldLabel); Texture2D btnTexture = tileViewRList.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)) { tileViewRList.elementHeight = tileViewRList.elementHeight == 0f ? EditorGUIUtility.singleLineHeight : 0f; tileViewRList.draggable = tileViewRList.elementHeight > 0f; } }; tileViewRList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => { if (tileViewRList.elementHeight == 0f) { return; } Rect rLabel = new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight); TileView tileView = tileViewRList.list[index] as TileView; if (index == tileViewRList.index) { string newName = EditorGUI.TextField(rLabel, tileView.name); if (newName != tileView.name) { tileset.RenameTileView(tileView.name, newName); } } else { EditorGUI.LabelField(rLabel, tileView.name); } }; return(tileViewRList); }
private void DisplayParameters() { Event e = Event.current; TileSelection tileSelection = Tileset.TileSelection; if (tileSelection != null) { EditorGUILayout.LabelField("Multi-tile editing not allowed", EditorStyles.boldLabel); } else { UnityEngine.Object prevOwner = m_parameterListOwner; if (Tileset.SelectedBrushId != Tileset.k_BrushId_Default) { m_parameterListOwner = Tileset.FindBrush(Tileset.SelectedBrushId); } else { m_parameterListOwner = Tileset; } if (m_parameterListOwner != null) { if (prevOwner != m_parameterListOwner || Tileset.SelectedTileId != m_prevSelectedTileId || m_tileParameterList == null) { m_prevSelectedTileId = Tileset.SelectedTileId; m_tileParameterList = CreateParameterReorderableList(m_parameterListOwner is Tileset ? ((Tileset)m_parameterListOwner).SelectedTile.paramContainer : ((TilesetBrush)m_parameterListOwner).Params); m_tileParameterList.onChangedCallback += (ReorderableList list) => { EditorUtility.SetDirty(m_parameterListOwner); }; } GUILayoutUtility.GetRect(1, 1, GUILayout.Width(Tileset.VisualTileSize.x), GUILayout.Height(Tileset.VisualTileSize.y)); uint tilePreviewData = m_parameterListOwner is Tileset ? (uint)(((Tileset)m_parameterListOwner).SelectedTileId & Tileset.k_TileDataMask_TileId) : ((TilesetBrush)m_parameterListOwner).GetAnimTileData(); Rect customUV = m_parameterListOwner is Tileset ? default(Rect) : ((TilesetBrush)m_parameterListOwner).GetAnimUV(); GUI.color = Tileset.BackgroundColor; GUI.DrawTexture(GUILayoutUtility.GetLastRect(), EditorGUIUtility.whiteTexture); GUI.color = Color.white; TilesetEditor.DoGUIDrawTileFromTileData(GUILayoutUtility.GetLastRect(), tilePreviewData, Tileset, customUV); m_tileParamScrollViewPos = EditorGUILayout.BeginScrollView(m_tileParamScrollViewPos, GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true)); EditorGUI.BeginChangeCheck(); m_tileParameterList.DoLayoutList(); Rect rList = GUILayoutUtility.GetLastRect(); if (e.type == EventType.MouseDown && !rList.Contains(e.mousePosition)) { m_tileParameterList.ReleaseKeyboardFocus(); m_tileParameterList.index = -1; } if (EditorGUI.EndChangeCheck()) { EditorUtility.SetDirty(m_parameterListOwner); } EditorGUILayout.EndScrollView(); } } }
public override void OnInspectorGUI() { serializedObject.Update(); if (m_prevTileset != m_brush.Tileset) { OnDisable(); OnEnable(); } m_prevTileset = m_brush.Tileset; base.OnInspectorGUI(); if (!m_brush.Tileset) { return; } Vector2 visualTileSize = m_brush.Tileset.VisualTileSize; EditorGUILayout.PropertyField(serializedObject.FindProperty("AnimFPS")); TileSelection tileSelection = ((TilesetBrush)target).Tileset.TileSelection; if (tileSelection != null) { if (GUILayout.Button("Add tile selection as animation frames")) { ((AnimBrush)target).AnimFrames.AddRange(tileSelection.selectionData.Select(x => new AnimBrush.TileAnimFrame() { tileId = x })); } } EditorGUILayout.Space(); // Draw animation GUILayoutUtility.GetRect(1f, 1f, GUILayout.Width(visualTileSize.x), GUILayout.Height(visualTileSize.y)); Rect rAnimFrame = GUILayoutUtility.GetLastRect(); uint tileData = m_brush.GetAnimTileData(); rAnimFrame.center = new Vector2(EditorGUIUtility.currentViewWidth / 2, rAnimFrame.center.y); GUI.Box(new Rect(rAnimFrame.position - Vector2.one, rAnimFrame.size + 2 * Vector2.one), ""); TilesetEditor.DoGUIDrawTileFromTileData(rAnimFrame, tileData, m_brush.Tileset, m_brush.GetAnimUV()); EditorGUILayout.Space(); uint brushTileData = m_frameList.index >= 0 ? m_brush.AnimFrames[m_frameList.index].tileId : Tileset.k_TileData_Empty; brushTileData = BrushTileGridControl.DoTileDataPropertiesLayout(brushTileData, m_brush.Tileset, false); if (m_frameList.index >= 0) { m_brush.AnimFrames[m_frameList.index].tileId = brushTileData; } EditorGUILayout.Space(); // Draw Frames List m_frameList.elementHeight = visualTileSize.y + 10f; m_frameList.DoLayoutList(); EditorGUILayout.HelpBox("Select a frame from list and then select a tile from tile selection window.", MessageType.Info); EditorGUILayout.HelpBox("Add and Remove tiles with '+' and '-' buttons.", MessageType.Info); Repaint(); serializedObject.ApplyModifiedProperties(); if (GUI.changed) { EditorUtility.SetDirty(target); } }