80 lines
2.3 KiB
C#
Executable File
80 lines
2.3 KiB
C#
Executable File
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using UnityEngine;
|
|
using UnityEngine.Rendering;
|
|
|
|
namespace Assets.HeroEditor4D.Common.Scripts.CharacterScripts
|
|
{
|
|
/// <summary>
|
|
/// Used to order sprite layers (character parts).
|
|
/// </summary>
|
|
public class LayerManager : MonoBehaviour
|
|
{
|
|
/// <summary>
|
|
/// Full list of sprites
|
|
/// </summary>
|
|
public List<SpriteRenderer> Sprites;
|
|
|
|
/// <summary>
|
|
/// SortingGroup can be used when you have multiple characters on scene.
|
|
/// </summary>
|
|
public SortingGroup SortingGroup;
|
|
|
|
/// <summary>
|
|
/// Step between two sprites (layers).
|
|
/// </summary>
|
|
public int SortingOrderStep = 5;
|
|
|
|
public LayerManager CopyTo;
|
|
|
|
/// <summary>
|
|
/// Read ordered sprite list by Sorting Order.
|
|
/// </summary>
|
|
public void ReadSortingOrder()
|
|
{
|
|
Sprites = GetComponentsInChildren<SpriteRenderer>(true).OrderBy(i => i.sortingOrder).ToList();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Set layers order by Sorting Order.
|
|
/// </summary>
|
|
public void SetSortingOrder()
|
|
{
|
|
for (var i = 0; i < Sprites.Count; i++)
|
|
{
|
|
Sprites[i].sortingOrder = SortingOrderStep * i;
|
|
}
|
|
|
|
#if UNITY_EDITOR
|
|
UnityEditor.EditorUtility.SetDirty(this);
|
|
#endif
|
|
}
|
|
|
|
public void CopyOrder()
|
|
{
|
|
if (CopyTo == null) throw new ArgumentNullException(nameof(CopyTo));
|
|
|
|
foreach (var sprite in CopyTo.Sprites)
|
|
{
|
|
sprite.sortingOrder = Sprites.Single(i => i.name == sprite.name && GetSpriteRendererPath(i) == GetSpriteRendererPath(sprite)).sortingOrder;
|
|
}
|
|
|
|
Debug.Log("Copied!");
|
|
}
|
|
|
|
private static string GetSpriteRendererPath(SpriteRenderer spriteRenderer)
|
|
{
|
|
var path = spriteRenderer.name;
|
|
var t = spriteRenderer.transform;
|
|
|
|
while (t.parent != null && t.parent.GetComponent<Character4D>() == null)
|
|
{
|
|
path = t.parent.name + "/" + path;
|
|
t = t.parent;
|
|
}
|
|
|
|
return path;
|
|
}
|
|
}
|
|
} |