using System;
using System.Collections.Generic;
using UnityEditor.U2D;
using UnityEngine;
namespace UnityEditor.Tilemaps
{
///
/// The TileSet asset generates a Tile Palette and other supporting sub-assets from user inputs.
///
public class TileSet : ScriptableObject
{
///
/// Hexagon Layout for Grid
///
public enum HexagonLayout
{
///
/// PointTop Hexagon Cells
///
PointTop,
///
/// FlatTop Hexagon Cells
///
FlatTop,
}
///
/// Source Assets required by the TileSet to generate Tiles from a Texture.
/// This includes a Texture and a script template to generate Tiles from the Texture.
///
[Serializable]
public class TextureSource
{
[SerializeField]
private Texture2D m_Texture;
[SerializeReference]
private TileTemplate m_TileTemplate;
///
/// Texture used to generate Tiles for the TileSet.
///
public Texture2D texture
{
get => m_Texture;
set => m_Texture = value;
}
///
/// Script Template used to generate Tiles from the corresponding Texture.
/// A default template will be used if no script template is provided.
///
public TileTemplate tileTemplate
{
get => m_TileTemplate;
set => m_TileTemplate = value;
}
}
[SerializeField]
private List m_TextureSources;
///
/// List of TextureSources used by the TileSet
///
public List textureSources => m_TextureSources;
// Atlas Settings
[SerializeField]
private bool m_CreateAtlas = true;
[SerializeField]
private ScriptablePacker m_ScriptablePacker = null;
// Grid Settings
[SerializeField]
private GridLayout.CellLayout m_CellLayout = GridLayout.CellLayout.Rectangle;
[SerializeField]
private HexagonLayout m_HexagonLayout = HexagonLayout.PointTop;
[SerializeField]
private Vector3 m_CellSize = Vector3.one;
[SerializeField]
private GridPalette.CellSizing m_CellSizing = GridPalette.CellSizing.Automatic;
[SerializeField]
private TransparencySortMode m_TransparencySortMode = TransparencySortMode.Default;
[SerializeField]
private Vector3 m_TransparencySortAxis = new Vector3(0.0f, 0.0f, 1.0f);
///
/// Cell Layout for the Tile Palette generated by the TileSet
///
public GridLayout.CellLayout cellLayout
{
get => m_CellLayout;
set => m_CellLayout = value;
}
///
/// Hexagonal Cell Layout for the Tile Palette generated by the TileSet
///
public HexagonLayout hexagonLayout
{
get => m_HexagonLayout;
set => m_HexagonLayout = value;
}
///
/// Cell Sizing for the Tile Palette generated by the TileSet
///
public GridPalette.CellSizing cellSizing
{
get => m_CellSizing;
set => m_CellSizing = value;
}
///
/// Cell Size for the Tile Palette generated by the TileSet
///
public Vector3 cellSize
{
get => m_CellSize;
set => m_CellSize = value;
}
///
/// Transparency Sort Mode for the Tile Palette generated by the TileSet
///
public TransparencySortMode sortMode
{
get => m_TransparencySortMode;
set => m_TransparencySortMode = value;
}
///
/// Transparency Sort Axis for the Tile Palette generated by the TileSet
///
public Vector3 sortAxis
{
get => m_TransparencySortAxis;
set => m_TransparencySortAxis = value;
}
///
/// Whether a SpriteAtlas should be created for the TileSet
///
public bool createAtlas
{
get => m_CreateAtlas;
set => m_CreateAtlas = value;
}
///
/// ScriptablePacker used when generated a SpriteAtlas for the TileSet
///
public ScriptablePacker scriptablePacker
{
get => m_ScriptablePacker;
set => m_ScriptablePacker = value;
}
[Serializable]
internal struct SerializableSpriteImportData
{
[SerializeField] private string m_Name;
[SerializeField] private Rect m_Rect;
[SerializeField] private SpriteAlignment m_Alignment;
[SerializeField] private Vector2 m_Pivot;
[SerializeField] private Vector4 m_Border;
[SerializeField] private float m_TessellationDetail;
[SerializeField] private string m_SpriteID;
[SerializeField] private List m_Outline;
public string name { get { return m_Name; } set { m_Name = value; } }
public Rect rect { get { return m_Rect; } set { m_Rect = value; } }
public SpriteAlignment alignment { get { return m_Alignment; } set { m_Alignment = value; } }
public Vector2 pivot { get { return m_Pivot; } set { m_Pivot = value; } }
public Vector4 border { get { return m_Border; } set { m_Border = value; } }
public List outline { get { return m_Outline; } set { m_Outline = value; } }
public float tessellationDetail {get { return m_TessellationDetail; } set { m_TessellationDetail = value; } }
public string spriteID {get { return m_SpriteID; } set { m_SpriteID = value; } }
};
// Generated MetaData
[Serializable]
internal class GeneratedSprites
{
[SerializeField]
public Texture2D m_Texture2D;
[SerializeField]
public int m_PixelsPerUnit;
[SerializeField]
public SerializableSpriteImportData[] m_SpriteImportData;
}
[SerializeField]
internal List m_GeneratedSpritesList;
}
}