Skip to content

Commit

Permalink
-Use 512 size as the minimum limit for AutoTile texture scale (#393)
Browse files Browse the repository at this point in the history
* -Use 512 size as the minimum limit for AutoTile texture scale

* -Use 256 as minimum limit for size -Remove 0.25% minimum -Store scale
  • Loading branch information
ChuanXin-Unity authored Feb 21, 2025
1 parent dfcec49 commit 5c38b6e
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 11 deletions.
3 changes: 3 additions & 0 deletions Editor/Tiles/AutoTile/AutoTileTemplateUtility.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,10 @@ public static void ApplyTemplateToAutoTile(this AutoTileTemplate template
autoTile.m_MaskType = template.maskType;
if (autoTile.m_TextureList == null)
autoTile.m_TextureList = new List<Texture2D>();
if (autoTile.m_TextureScaleList == null)
autoTile.m_TextureScaleList = new List<float>();
autoTile.m_TextureList.Add(texture);
autoTile.m_TextureScaleList.Add(AutoTile.s_DefaultTextureScale);
foreach (var sprite in sprites)
{
foreach (var templateSprite in template.sprites)
Expand Down
40 changes: 30 additions & 10 deletions Editor/Tiles/AutoTile/UI/AutoTileEditorElement.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ internal class AutoTileEditorElement : VisualElement
{
private static readonly string s_StylesheetPath =
"Packages/com.unity.2d.tilemap.extras/Editor/Tiles/AutoTile/UI/AutoTileEditor.uss";

private static readonly float s_MaxSliderScale = 2.5f;

private ListView m_TextureList;
private ScrollView m_TextureScroller;
Expand Down Expand Up @@ -146,20 +148,22 @@ private void TexturePropertyChanged(int index, Texture2D texture2D)
return;

m_AutoTile.m_TextureList[index] = texture2D;
m_AutoTile.m_TextureScaleList[index] = AutoTile.s_DefaultTextureScale;
TexturesChanged();
}

private void PopulateTextureScrollView()
{
textureToElementMap.Clear();
m_TextureScroller.contentContainer.Clear();
m_TextureScroller.Clear();

if (m_TextureList.itemsSource == null)
return;

foreach (var item in m_TextureList.itemsSource)

var count = Math.Min(m_AutoTile.m_TextureScaleList.Count, m_TextureList.itemsSource.Count);
for (var i = 0; i < count; ++i)
{
var texture2D = item as Texture2D;
var texture2D = m_TextureList.itemsSource[i] as Texture2D;
if (texture2D == null)
continue;

Expand Down Expand Up @@ -203,15 +207,26 @@ private void PopulateTextureScrollView()
saveButton.text = "Save";
saveButton.userData = at;
he.Add(saveButton);

var minLength = Math.Max(texture2D.width, texture2D.height);
var start = 256.0f / minLength;

var slider = new Slider("Scale", 0.25f, 2.5f, SliderDirection.Horizontal, 0.1f);
slider.style.flexGrow = 0.8f;
slider.value = 1.0f;
slider.RegisterValueChangedCallback(evt => at.ChangeScale(evt.newValue));
var sliderValue = Math.Min(Mathf.Max(start, m_AutoTile.m_TextureScaleList[i]), s_MaxSliderScale);

var slider = new Slider("Scale", start, s_MaxSliderScale, SliderDirection.Horizontal, 0.1f);
slider.style.flexGrow = 0.9f;
slider.value = Mathf.Max(start, sliderValue);
slider.userData = i;
slider.RegisterValueChangedCallback(evt =>
{
at.ChangeScale(evt.newValue);
m_AutoTile.m_TextureScaleList[(int) slider.userData] = evt.newValue;
SaveTile();
});
he.Add(slider);
ve.Add(he);

at.ChangeScale(1.0f);
at.ChangeScale(sliderValue);

ve.Add(at);

Expand Down Expand Up @@ -265,13 +280,19 @@ private void MaskChanged(Sprite sprite, Texture2D sourceTexture, uint oldMask, u

private void ItemListAdded(IEnumerable<int> insertions)
{
// Note: m_AutoTile.m_TextureList is increased before this method
foreach (var i in insertions)
m_AutoTile.m_TextureScaleList.Insert(i, AutoTile.s_DefaultTextureScale);
SaveTile();
m_TextureList.Rebuild();
TexturesChanged();
}

private void ItemListRemoved(IEnumerable<int> removals)
{
// Note: m_AutoTile.m_TextureList is reduced after this method ends
foreach (var i in removals)
m_AutoTile.m_TextureScaleList.RemoveAt(i);
SaveTile();
m_TextureList.Rebuild();
TexturesChanged();
Expand Down Expand Up @@ -301,7 +322,6 @@ private void SaveTile()
}

EditorUtility.SetDirty(autoTile);
//AssetDatabase.SaveAssetIfDirty(autoTile);
SceneView.RepaintAll();
}
}
Expand Down
2 changes: 1 addition & 1 deletion Editor/Tiles/AutoTile/UI/AutoTileTextureSource.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ internal class AutoTileTextureSource : ScrollView
private Image m_TextureElement;
private AutoTileSpriteSource.ClickState m_ClickState;
private Action m_EditStopped;

public AutoTileTextureSource(Texture2D texture2D, AutoTile.AutoTileMaskType maskType, Action<Sprite, Texture2D, uint, uint> maskChanged, Action editStopped) : base(ScrollViewMode.VerticalAndHorizontal)
{
m_TextureElement = new Image();
Expand Down
19 changes: 19 additions & 0 deletions Runtime/Tiles/AutoTile/AutoTile.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ namespace UnityEngine.Tilemaps
"https://docs.unity3d.com/Packages/com.unity.2d.tilemap.extras@latest/index.html?subfolder=/manual/AutoTile.html")]
public class AutoTile : TileBase
{
internal static readonly float s_DefaultTextureScale = 1f;

[Serializable]
internal abstract class SerializedDictionary<TKey, TValue> : Dictionary<TKey, TValue>, ISerializationCallbackReceiver
{
Expand Down Expand Up @@ -105,6 +107,13 @@ public enum AutoTileMaskType
/// </summary>
[SerializeField]
public List<Texture2D> m_TextureList = new List<Texture2D>();

/// <summary>
/// List of Texture Scale used by the AutoTile
/// </summary>
[SerializeField]
public List<float> m_TextureScaleList = new List<float>();

#endregion

#region Runtime Data
Expand Down Expand Up @@ -246,6 +255,16 @@ public void Validate()
}
}
}

if (m_TextureList.Count != m_TextureScaleList.Count)
{
if (m_TextureList.Count > m_TextureScaleList.Count)
while (m_TextureList.Count - m_TextureScaleList.Count > 0)
m_TextureScaleList.Add(s_DefaultTextureScale);
else if (m_TextureList.Count < m_TextureScaleList.Count)
while (m_TextureScaleList.Count - m_TextureList.Count > 0)
m_TextureScaleList.RemoveAt(m_TextureScaleList.Count-1);
}
}

private uint Convert2x2Mask(uint mask)
Expand Down

0 comments on commit 5c38b6e

Please sign in to comment.