public override void OnInspectorGUI() { AutoTileLookup lookup = target as AutoTileLookup; showBaseInspector = EditorGUILayout.Foldout(showBaseInspector, "Show Base Inspector"); if (showBaseInspector) { base.OnInspectorGUI(); } overrideRulesFromTile = EditorGUILayout.Foldout(overrideRulesFromTile, "Override Rules List"); if (overrideRulesFromTile) { EditorGUILayout.BeginVertical(GUI.skin.box); { EditorGUILayout.LabelField( "This will set the target rules for this lookup to match. " + "You don't need to use this unless you are creating a new lookup.", GUI.skin.box); RuleTile load = (RuleTile)EditorGUILayout.ObjectField("Load Ruleset", null, typeof(RuleTile), false); if (load) { lookup.m_maskValues = load.m_TilingRules; } } EditorGUILayout.EndVertical(); } showSubTileMapping = EditorGUILayout.Foldout(showSubTileMapping, "Show Subtile Mapping"); if (showSubTileMapping) { EditorGUILayout.BeginVertical(GUI.skin.box); { EditorGUILayout.LabelField( "This shows each Rule (set with the override tile rules parameter.) " + "Alongside each rule is the lookup data for each quadrant of the tile.", GUI.skin.box); } EditorGUILayout.EndVertical(); SubTileMappingGUI(lookup); } EditorGUILayout.BeginVertical(GUI.skin.box); { EditorGUILayout.LabelField( "This will take the texture and generate " + "the appropriate assets + RuleTile data.", GUI.skin.box); Texture2D texture = (Texture2D)EditorGUILayout.ObjectField(null, typeof(Texture2D), false); if (texture != null) { ImportAutotile.ImportSubtile(texture, lookup); } } EditorGUILayout.EndVertical(); }
static void ProcessSubtileTexture(Texture2D _texture, AutoTileLookup _lookup) { //Spprite importer stuff to prep the asset for slicing. string path = AssetDatabase.GetAssetPath(_texture); var importer = AssetImporter.GetAtPath(path) as TextureImporter; importer.textureType = TextureImporterType.Sprite; importer.spriteImportMode = SpriteImportMode.Multiple; importer.mipmapEnabled = false; importer.filterMode = FilterMode.Point; importer.spritePivot = Vector2.down; importer.textureCompression = TextureImporterCompression.Uncompressed; var textureSettings = new TextureImporterSettings(); importer.ReadTextureSettings(textureSettings); textureSettings.spriteMeshType = SpriteMeshType.FullRect; textureSettings.spriteExtrude = 0; importer.SetTextureSettings(textureSettings); //for A2s we know the subtil size is width/4 int minSpriteSize = _texture.width / 4; //Slice the asset Rect[] rects = InternalSpriteUtility.GenerateGridSpriteRectangles( _texture, Vector2.zero, new Vector2(minSpriteSize, minSpriteSize), Vector2.zero); List <Rect> rectList = new List <Rect>(rects); string filenameNoExtension = Path.GetFileNameWithoutExtension(path); List <SpriteMetaData> metas = new List <SpriteMetaData>(); int count = 0; foreach (Rect rect in rectList) { var meta = new SpriteMetaData(); meta.pivot = Vector2.one * 0.5f;//center meta.alignment = (int)SpriteAlignment.Center; meta.rect = rect; int xpos = count % 4; int ypos = Mathf.CeilToInt(count / 4); int rightside = xpos % 2; int topside = (ypos + 1) % 2; int lookup = (topside * 2) + rightside; meta.name = RuleTileEditor.m_ModDirections[lookup] + count.ToString("00") + "_" + filenameNoExtension; metas.Add(meta); count++; } importer.spritesheet = metas.ToArray(); AssetDatabase.ImportAsset(path, ImportAssetOptions.ForceUpdate); Object[] objects = AssetDatabase.LoadAllAssetsAtPath(path); List <Sprite> sprites = new List <Sprite>(); for (int i = 0; i < objects.Length; i++) { //filter out non-sprites. I was getting some extra entry here. if ((objects[i] as Sprite) != null) { sprites.Add(objects[i] as Sprite); } } sprites.Sort((Sprite x, Sprite y) => x.name.CompareTo(y.name)); RuleTile m_tile = ScriptableObject.CreateInstance <RuleTile>(); m_tile.m_TilingRules = new List <RuleTile.TilingRule>(); int rulecount = 0; for (int i = 255; i >= 0; i--) { RuleTile.TilingRule rule = ImportAutotile.GetRule(i); if (rule != null) { AddSpritesToRule(ref rule, sprites, rulecount, _lookup); rulecount++; m_tile.m_TilingRules.Add(rule); } } AssetDatabase.CreateAsset(m_tile, "Assets/" + filenameNoExtension + "tile.asset"); }