Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

-Use 512 size as the minimum limit for AutoTile texture scale #393

Merged
merged 2 commits into from
Feb 21, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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