15using System.Collections.Generic;
19 public static class SpriteAtlasUtil {
22 public static void ShowInvalidSpriteWarning(IList<LeapGraphicFeatureBase> features) {
23 bool anyRectsInvalid =
false;
24 foreach (var feature
in features) {
25 var spriteFeature = feature as LeapSpriteFeature;
26 if (spriteFeature ==
null)
continue;
28 foreach (var spriteData
in spriteFeature.featureData) {
29 var sprite = spriteData.sprite;
30 if (sprite ==
null)
continue;
33 if (TryGetAtlasedRect(sprite, out rect)) {
34 if (rect.Area() == 0) {
35 anyRectsInvalid =
true;
41 if (anyRectsInvalid) {
42 EditorGUILayout.HelpBox(
"Due to a Unity bug, packed sprites may be invalid until " +
43 "PlayMode has been entered at least once.", MessageType.Warning);
48 public static bool TryGetAtlasedRect(Sprite sprite, out Rect rect) {
50 if (!TryGetAtlasedUvs(sprite, out uvs)) {
55 float minX, minY, maxX, maxY;
56 minX = maxX = uvs[0].x;
57 minY = maxY = uvs[0].y;
59 for (
int j = 1; j < uvs.Length; j++) {
60 minX = Mathf.Min(minX, uvs[j].x);
61 minY = Mathf.Min(minY, uvs[j].y);
62 maxX = Mathf.Max(maxX, uvs[j].x);
63 maxY = Mathf.Max(maxY, uvs[j].y);
66 rect = Rect.MinMaxRect(minX, minY, maxX, maxY);
70 public static bool TryGetAtlasedUvs(Sprite sprite, out Vector2[] uvs) {
72 if (!Application.isPlaying)
73 return tryGetAtlasedUvsEditor(sprite, out uvs);
76 return tryGetAtlasedUvs(sprite, out uvs);
79 private static bool tryGetAtlasedUvs(Sprite sprite, out Vector2[] uvs) {
90 private static bool tryGetAtlasedUvsEditor(Sprite sprite, out Vector2[] uvs) {
92 uvs = SpriteUtility.GetSpriteUVs(sprite, getAtlasData:
true);