public override void OnInspectorGUI() { Tileset tileset = (Tileset)target; serializedObject.Update(); EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(serializedObject.FindProperty("AtlasTexture")); if (EditorGUI.EndChangeCheck()) { serializedObject.ApplyModifiedProperties(); tileset.UpdateTilesetConfigFromAtlasImportSettings(); } if (tileset.AtlasTexture == null) { EditorGUILayout.HelpBox("Select an atlas texture for the tileset", MessageType.Info); } else { EditorGUILayout.PropertyField(serializedObject.FindProperty("m_pixelsPerUnit")); s_gridFoldout = EditorGUILayout.Foldout(s_gridFoldout, "Grid"); if (s_gridFoldout) { tileset.TilePxSize = _GetPositiveIntVect2(EditorGUILayout.Vector2Field("Pixel Size", tileset.TilePxSize)); tileset.SliceOffset = _GetPositiveIntVect2(EditorGUILayout.Vector2Field("Offset", tileset.SliceOffset)); tileset.SlicePadding = _GetPositiveIntVect2(EditorGUILayout.Vector2Field("Padding", tileset.SlicePadding)); if (GUILayout.Button("Slice Atlas")) { tileset.Slice(); } } s_tilePaletteFoldout = EditorGUILayout.Foldout(s_tilePaletteFoldout, "Tile Palette"); if (s_tilePaletteFoldout) { m_tilesetCtrl.Tileset = tileset; m_tilesetCtrl.Display(); Repaint(); } s_brushGroupsFoldout = EditorGUILayout.Foldout(s_brushGroupsFoldout, "Brush Groups"); if (s_brushGroupsFoldout) { m_groupsList.DoLayoutList(); } GroupMatrixGUI.DoGUI("Group Autotiling Mask", tileset.BrushGroupNames, ref s_brushAutotilingMaskFoldout, ref s_brushGroupMatrixScrollPos, GetValue, SetValue); } if (GUI.changed) { serializedObject.ApplyModifiedProperties(); EditorUtility.SetDirty(target); } }
void OnGUI() { bool sliceTileset = false; m_scrollPos = EditorGUILayout.BeginScrollView(m_scrollPos, GUIStyle.none, GUI.skin.verticalScrollbar); { EditorGUILayout.Space(); EditorGUILayout.BeginVertical(EditorStyles.helpBox); { EditorGUILayout.LabelField("Atlas Texture:", EditorStyles.boldLabel); EditorGUI.indentLevel += 1; EditorGUI.BeginChangeCheck(); m_tileset = (Tileset)EditorGUILayout.ObjectField("Tileset (optional)", m_tileset, typeof(Tileset), false); if (EditorGUI.EndChangeCheck() && m_tileset) { m_padding = (int)Mathf.Max(m_slicePadding.x, m_slicePadding.y); m_extrude = 0; } // Read Data From Tileset if (m_tileset) { m_tileSize = m_tileset.TilePxSize; m_slicePadding = m_tileset.SlicePadding; m_sliceOffset = m_tileset.SliceOffset; m_atlasTexture = m_tileset.AtlasTexture; } m_atlasTexture = (Texture2D)EditorGUILayout.ObjectField("Atlas texture", m_atlasTexture, typeof(Texture2D), false); EditorGUI.indentLevel -= 1; } EditorGUILayout.EndHorizontal(); GUI.enabled = m_atlasTexture != null; EditorGUILayout.Space(); EditorGUILayout.BeginVertical(EditorStyles.helpBox); { EditorGUILayout.LabelField("Slice Settings:", EditorStyles.boldLabel); EditorGUI.indentLevel += 1; EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Tile Size (pixels)", GUILayout.MaxWidth(120f)); m_tileSize = EditorGUILayout.Vector2Field("", m_tileSize, GUILayout.MaxWidth(180f), GUILayout.MaxHeight(1f)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Offset", GUILayout.MaxWidth(120f)); m_sliceOffset = EditorGUILayout.Vector2Field("", m_sliceOffset, GUILayout.MaxWidth(180f), GUILayout.MaxHeight(1f)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Padding", GUILayout.MaxWidth(120f)); m_slicePadding = EditorGUILayout.Vector2Field("", m_slicePadding, GUILayout.MaxWidth(180f), GUILayout.MaxHeight(1f)); EditorGUILayout.EndHorizontal(); EditorGUI.indentLevel -= 1; } EditorGUILayout.EndVertical(); EditorGUILayout.Space(); EditorGUILayout.BeginVertical(EditorStyles.helpBox); { EditorGUILayout.LabelField("New Settings:", EditorStyles.boldLabel); EditorGUI.indentLevel += 1; m_padding = EditorGUILayout.IntField(new GUIContent("Padding (pixels)", "Separation between tiles in pixels"), m_padding); m_extrude = EditorGUILayout.IntField(new GUIContent("Extrude (pixels)", "How many pixels the color is extruded from tile border"), m_extrude); m_padding = Mathf.Max(0, m_padding, m_extrude * 2); m_extrude = Mathf.Max(0, m_extrude); if (GUILayout.Button("Preview")) { m_previewTexture = BuildAtlas(m_atlasTexture, m_padding, m_extrude, m_tileSize, m_sliceOffset, m_slicePadding); AtlasPreviewWindow atlasPreviewWnd = EditorWindow.GetWindow <AtlasPreviewWindow>(true, "Atlas Preview", true); atlasPreviewWnd.Texture = m_previewTexture; atlasPreviewWnd.TileSize = m_tileSize; atlasPreviewWnd.Padding = m_padding; atlasPreviewWnd.Extrude = m_extrude; atlasPreviewWnd.ShowUtility(); } if (GUILayout.Button("Apply Settings")) { Texture2D outputAtlas = BuildAtlas(m_atlasTexture, m_padding, m_extrude, m_tileSize, m_sliceOffset, m_slicePadding); byte[] pngData = outputAtlas.EncodeToPNG(); string atlasTexturePath = Application.dataPath + AssetDatabase.GetAssetPath(m_atlasTexture).Substring(6); System.IO.File.WriteAllBytes(atlasTexturePath, pngData); AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(m_atlasTexture)); Debug.Log("Saving atlas texture: " + atlasTexturePath); if (m_tileset) { m_sliceOffset = new Vector2(m_extrude, m_extrude); m_slicePadding = new Vector2(m_padding, m_padding); sliceTileset = true; } } EditorGUI.indentLevel -= 1; } EditorGUILayout.EndVertical(); if (m_previewTexture) { GUILayout.Box(m_previewTexture, GUILayout.Width(position.width - 24f)); } GUI.enabled = true; } EditorGUILayout.EndScrollView(); // Save Data into tileset if (m_tileset) { m_tileset.TilePxSize = m_tileSize; m_tileset.SlicePadding = m_slicePadding; m_tileset.SliceOffset = m_sliceOffset; m_tileset.AtlasTexture = m_atlasTexture; if (sliceTileset) { m_tileset.Slice(); foreach (Tilemap tilemap in FindObjectsOfType <Tilemap>()) { if (tilemap.Tileset == m_tileset) { tilemap.Refresh(true, false); } } } } if (GUI.changed) { if (m_tileset) { EditorUtility.SetDirty(m_tileset); } } }
public override void OnInspectorGUI() { Tileset tileset = (Tileset)target; serializedObject.Update(); EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(serializedObject.FindProperty("AtlasTexture")); if (EditorGUI.EndChangeCheck()) { serializedObject.ApplyModifiedProperties(); tileset.UpdateTilesetConfigFromAtlasImportSettings(); } if (tileset.AtlasTexture == null) { EditorGUILayout.HelpBox("Select an atlas texture for the tileset", MessageType.Info); } else { EditorGUILayout.PropertyField(serializedObject.FindProperty("m_pixelsPerUnit")); if (GUILayout.Button(new GUIContent("Optimize Atlas Texture Settings", "Change the import settings for an optimum result"))) { OptimizeTextureImportSettings(tileset.AtlasTexture); } s_atlasSettingsFoldout = EditorGUILayout.Foldout(s_atlasSettingsFoldout, "Atlas Settings"); if (s_atlasSettingsFoldout) { EditorGUILayout.BeginVertical(EditorStyles.helpBox); tileset.TilePxSize = _GetPositiveIntVect2(EditorGUILayout.Vector2Field("Tile Size (pixels)", tileset.TilePxSize), Vector2.one); tileset.SliceOffset = _GetPositiveIntVect2(EditorGUILayout.Vector2Field(new GUIContent("Offset", "The offset position in pixels to start slicing tiles from the atlas texture"), tileset.SliceOffset)); tileset.SlicePadding = _GetPositiveIntVect2(EditorGUILayout.Vector2Field(new GUIContent("Padding", "The separation in pixels between tiles"), tileset.SlicePadding)); if (GUILayout.Button("Slice Atlas")) { tileset.Slice(); } EditorGUILayout.EndVertical(); } EditorGUILayout.Separator(); if (GUILayout.Button("Import TMX into the Scene")) { CreativeSpore.TiledImporter.TmxImporter.ImportTmxIntoTheScene(tileset); } EditorGUILayout.Separator(); string[] modeNames = System.Enum.GetNames(typeof(eMode)); s_mode = (eMode)GUILayout.Toolbar((int)s_mode, modeNames); EditorGUILayout.BeginVertical(EditorStyles.helpBox, GUILayout.MinHeight(s_mode == eMode.Tiles ? Screen.height * 0.8f : 0f)); { switch (s_mode) { case eMode.Tiles: m_tilesetCtrl.Tileset = tileset; m_tilesetCtrl.Display(); Repaint(); break; case eMode.BrushGroups: s_brushGroupsFoldout = EditorGUILayout.Foldout(s_brushGroupsFoldout, "Groups"); if (s_brushGroupsFoldout) { m_groupsList.DoLayoutList(); } GroupMatrixGUI.DoGUI("Group Autotiling Mask", tileset.BrushGroupNames, ref s_brushAutotilingMaskFoldout, ref s_brushGroupMatrixScrollPos, GetAutotiling, SetAutotiling); EditorGUILayout.HelpBox("Check the group that should autotile between them when Autotiling Mode Group is enabled in a brush", MessageType.Info); break; } } EditorGUILayout.EndVertical(); } if (GUI.changed) { serializedObject.ApplyModifiedProperties(); EditorUtility.SetDirty(target); } }