A game about forced loneliness, made by TACStudios
at master 552 lines 24 kB view raw
1using UnityEngine; 2using System; 3using System.Collections.Generic; 4using UnityEngine.Experimental.Rendering; 5using UnityEvent = UnityEngine.Event; 6 7namespace UnityEditor.U2D.Sprites 8{ 9 [Serializable] 10 internal class SpriteEditorMenuSetting : ScriptableObject 11 { 12 public enum SlicingType 13 { 14 Automatic = 0, 15 GridByCellSize = 1, 16 GridByCellCount = 2, 17 IsometricGrid = 3 18 } 19 20 [SerializeField] 21 public Vector2 gridCellCount = new Vector2(1, 1); 22 [SerializeField] 23 public Vector2 gridSpriteSize = new Vector2(64, 64); 24 [SerializeField] 25 public Vector2 gridSpriteOffset = new Vector2(0, 0); 26 [SerializeField] 27 public Vector2 gridSpritePadding = new Vector2(0, 0); 28 [SerializeField] 29 public Vector2 pivot = Vector2.zero; 30 [SerializeField] 31 public int autoSlicingMethod = (int)SpriteFrameModule.AutoSlicingMethod.DeleteAll; 32 [SerializeField] 33 public int spriteAlignment; 34 [SerializeField] 35 public SlicingType slicingType; 36 [SerializeField] 37 public bool keepEmptyRects; 38 [SerializeField] 39 public bool isAlternate; 40 } 41 42 internal class SpriteEditorMenu : EditorWindow 43 { 44 private static Styles s_Styles; 45 private static long s_LastClosedTime; 46 private static SpriteEditorMenuSetting s_Setting; 47 private ITextureDataProvider m_TextureDataProvider; 48 private SpriteFrameModule m_SpriteFrameModule; 49 private List<Rect> m_PotentialRects; 50 51 private class Styles 52 { 53 public GUIStyle background = "grey_border"; 54 public GUIStyle notice; 55 56 public Styles() 57 { 58 notice = new GUIStyle(GUI.skin.label); 59 notice.alignment = TextAnchor.MiddleCenter; 60 notice.wordWrap = true; 61 } 62 63 public readonly GUIContent[] spriteAlignmentOptions = 64 { 65 EditorGUIUtility.TrTextContent("Center"), 66 EditorGUIUtility.TrTextContent("Top Left"), 67 EditorGUIUtility.TrTextContent("Top"), 68 EditorGUIUtility.TrTextContent("Top Right"), 69 EditorGUIUtility.TrTextContent("Left"), 70 EditorGUIUtility.TrTextContent("Right"), 71 EditorGUIUtility.TrTextContent("Bottom Left"), 72 EditorGUIUtility.TrTextContent("Bottom"), 73 EditorGUIUtility.TrTextContent("Bottom Right"), 74 EditorGUIUtility.TrTextContent("Custom") 75 }; 76 77 public readonly GUIContent[] slicingMethodOptions = 78 { 79 EditorGUIUtility.TrTextContent("Delete Existing"), 80 EditorGUIUtility.TrTextContent("Smart"), 81 EditorGUIUtility.TrTextContent("Safe") 82 }; 83 public readonly string[] slicingMethodInfoText = 84 { 85 L10n.Tr("Delete Existing removes all existing Sprites and recreates them from scratch."), 86 L10n.Tr("Smart attempts to create new Sprites while retaining or adjusting existing ones. This slicing method does not remove any existing Sprites."), 87 L10n.Tr("Safe adds new Sprites without changing anything already in place. This slicing method does not remove any existing Sprites.") 88 }; 89 90 public readonly GUIContent methodLabel = EditorGUIUtility.TrTextContent("Method"); 91 public readonly GUIContent pivotLabel = EditorGUIUtility.TrTextContent("Pivot"); 92 public readonly GUIContent typeLabel = EditorGUIUtility.TrTextContent("Type"); 93 public readonly GUIContent sliceButtonLabel = EditorGUIUtility.TrTextContent("Slice"); 94 public readonly GUIContent columnAndRowLabel = EditorGUIUtility.TrTextContent("Column & Row"); 95 public readonly GUIContent columnLabel = EditorGUIUtility.TextContent("C"); 96 public readonly GUIContent rowLabel = EditorGUIUtility.TextContent("R"); 97 public readonly GUIContent pixelSizeLabel = EditorGUIUtility.TrTextContent("Pixel Size"); 98 public readonly GUIContent xLabel = EditorGUIUtility.TextContent("X"); 99 public readonly GUIContent yLabel = EditorGUIUtility.TextContent("Y"); 100 public readonly GUIContent offsetLabel = EditorGUIUtility.TrTextContent("Offset"); 101 public readonly GUIContent paddingLabel = EditorGUIUtility.TrTextContent("Padding"); 102 public readonly GUIContent automaticSlicingHintLabel = EditorGUIUtility.TrTextContent("Texture is in compressed format. For better result please use manual slicing.", "Compressed textures may have artifacts that will affect the automatic slicing result. It is recommended to use manual slicing for better result."); 103 public readonly GUIContent customPivotLabel = EditorGUIUtility.TrTextContent("Custom Pivot"); 104 public readonly GUIContent keepEmptyRectsLabel = EditorGUIUtility.TrTextContent("Keep Empty Rects"); 105 public readonly GUIContent isAlternateLabel = EditorGUIUtility.TrTextContent("Is Alternate"); 106 107 public readonly string deleteExistingTitle = L10n.Tr("Potential loss of Sprite data"); 108 public readonly string deleteExistingMessage = L10n.Tr("The Delete Existing slicing method recreates all Sprites with their default names. Renamed Sprites will lose their data in the process, and references to these Sprites will be lost. \n\nDo you wish you continue?"); 109 public readonly string yes = L10n.Tr("Yes"); 110 public readonly string no = L10n.Tr("No"); 111 } 112 113 internal List<Rect> GetPotentialRects() 114 { 115 if (m_PotentialRects == null) 116 m_PotentialRects = new List<Rect>(); 117 m_PotentialRects.Clear(); 118 switch (s_Setting.slicingType) 119 { 120 case SpriteEditorMenuSetting.SlicingType.Automatic: 121 // Do not show rects for Automatic 122 break; 123 case SpriteEditorMenuSetting.SlicingType.GridByCellCount: 124 DetermineGridCellSizeWithCellCount(out var cellSize); 125 m_PotentialRects.AddRange(m_SpriteFrameModule.GetGridRects(cellSize 126 , s_Setting.gridSpriteOffset 127 , s_Setting.gridSpritePadding 128 , true)); 129 break; 130 case SpriteEditorMenuSetting.SlicingType.GridByCellSize: 131 m_PotentialRects.AddRange(m_SpriteFrameModule.GetGridRects(s_Setting.gridSpriteSize 132 , s_Setting.gridSpriteOffset 133 , s_Setting.gridSpritePadding 134 , true)); 135 break; 136 case SpriteEditorMenuSetting.SlicingType.IsometricGrid: 137 m_PotentialRects.AddRange(m_SpriteFrameModule.GetIsometricRects(s_Setting.gridSpriteSize 138 , s_Setting.gridSpriteOffset 139 , s_Setting.isAlternate 140 , true)); 141 break; 142 } 143 144 return m_PotentialRects; 145 } 146 147 private void Init(Rect buttonRect, SpriteFrameModule sf, ITextureDataProvider dataProvider) 148 { 149 // Create for once if setting was not created before. 150 if (s_Setting == null) 151 s_Setting = CreateInstance<SpriteEditorMenuSetting>(); 152 153 m_SpriteFrameModule = sf; 154 m_SpriteFrameModule.onModuleDeactivated -= OnModuleDeactivate; 155 m_SpriteFrameModule.onModuleDeactivated += OnModuleDeactivate; 156 m_TextureDataProvider = dataProvider; 157 158 buttonRect = GUIUtility.GUIToScreenRect(buttonRect); 159 const float windowHeight = 235f; 160 var windowSize = new Vector2(300, windowHeight); 161 ShowAsDropDown(buttonRect, windowSize); 162 163 Undo.undoRedoPerformed += UndoRedoPerformed; 164 165 RectSettingsDirty(); 166 } 167 168 private void UndoRedoPerformed() 169 { 170 Repaint(); 171 } 172 173 void OnEnable() 174 { 175 AssemblyReloadEvents.beforeAssemblyReload += Close; 176 } 177 178 private void OnDisable() 179 { 180 AssemblyReloadEvents.beforeAssemblyReload -= Close; 181 Undo.undoRedoPerformed -= UndoRedoPerformed; 182 s_LastClosedTime = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; 183 m_SpriteFrameModule.potentialRects = null; 184 m_SpriteFrameModule.spriteEditor.RequestRepaint(); 185 m_SpriteFrameModule.onModuleDeactivated -= OnModuleDeactivate; 186 } 187 188 void OnModuleDeactivate() 189 { 190 this.Close(); 191 } 192 193 private void RectSettingsDirty() 194 { 195 m_SpriteFrameModule.potentialRects = GetPotentialRects(); 196 m_SpriteFrameModule.spriteEditor.RequestRepaint(); 197 } 198 199 internal static bool ShowAtPosition(Rect buttonRect, SpriteFrameModule sf, ITextureDataProvider textureProvider) 200 { 201 // We could not use realtimeSinceStartUp since it is set to 0 when entering/exitting playmode, we assume an increasing time when comparing time. 202 long nowMilliSeconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; 203 bool justClosed = nowMilliSeconds < s_LastClosedTime + 50; 204 if (!justClosed) 205 { 206 if (UnityEvent.current != null) // Event.current can be null during integration test 207 UnityEvent.current.Use(); 208 209 SpriteEditorMenu spriteEditorMenu = CreateInstance<SpriteEditorMenu>(); 210 spriteEditorMenu.Init(buttonRect, sf, textureProvider); 211 return true; 212 } 213 return false; 214 } 215 216 private void OnGUI() 217 { 218 if (s_Styles == null) 219 s_Styles = new Styles(); 220 221 // Leave some space above the elements 222 GUILayout.Space(4); 223 224 EditorGUIUtility.labelWidth = 124f; 225 EditorGUIUtility.wideMode = true; 226 227 GUI.Label(new Rect(0, 0, position.width, position.height), GUIContent.none, s_Styles.background); 228 229 EditorGUI.BeginChangeCheck(); 230 SpriteEditorMenuSetting.SlicingType slicingType = s_Setting.slicingType; 231 slicingType = (SpriteEditorMenuSetting.SlicingType)EditorGUILayout.EnumPopup(s_Styles.typeLabel, slicingType); 232 if (EditorGUI.EndChangeCheck()) 233 { 234 Undo.RegisterCompleteObjectUndo(s_Setting, "Change slicing type"); 235 s_Setting.slicingType = slicingType; 236 237 UpdateToDefaultAutoSliceMethod(); 238 RectSettingsDirty(); 239 } 240 switch (slicingType) 241 { 242 case SpriteEditorMenuSetting.SlicingType.GridByCellSize: 243 case SpriteEditorMenuSetting.SlicingType.GridByCellCount: 244 OnGridGUI(); 245 break; 246 case SpriteEditorMenuSetting.SlicingType.Automatic: 247 OnAutomaticGUI(); 248 break; 249 case SpriteEditorMenuSetting.SlicingType.IsometricGrid: 250 OnIsometricGridGUI(); 251 break; 252 } 253 254 DoPivotGUI(); 255 GUILayout.Space(2f); 256 EditorGUI.BeginChangeCheck(); 257 var slicingMethod = s_Setting.autoSlicingMethod; 258 slicingMethod = EditorGUILayout.Popup(s_Styles.methodLabel, slicingMethod, s_Styles.slicingMethodOptions); 259 if (EditorGUI.EndChangeCheck()) 260 { 261 Undo.RegisterCompleteObjectUndo(s_Setting, "Change Slicing Method"); 262 s_Setting.autoSlicingMethod = slicingMethod; 263 } 264 265 EditorGUILayout.HelpBox(s_Styles.slicingMethodInfoText[slicingMethod], MessageType.Info); 266 267 GUILayout.FlexibleSpace(); 268 GUILayout.BeginHorizontal(); 269 GUILayout.Space(EditorGUIUtility.labelWidth + 4); 270 if (GUILayout.Button(s_Styles.sliceButtonLabel)) 271 { 272 if (DoesNotNeedWarning() || EditorUtility.DisplayDialog(s_Styles.deleteExistingTitle, s_Styles.deleteExistingMessage, s_Styles.yes, s_Styles.no)) 273 DoSlicing(); 274 } 275 GUILayout.EndHorizontal(); 276 } 277 278 private bool DoesNotNeedWarning() 279 { 280 var hasNoData = m_SpriteFrameModule.spriteCount == 0; 281 var isNotUsingDeleteAll = s_Setting.autoSlicingMethod != (int)SpriteFrameModule.AutoSlicingMethod.DeleteAll; 282 if (hasNoData || isNotUsingDeleteAll) 283 return true; 284 285 var onlyUsingDefaultName = m_SpriteFrameModule.IsOnlyUsingDefaultNamedSpriteRects(); 286 return onlyUsingDefaultName; 287 } 288 289 private static void UpdateToDefaultAutoSliceMethod() 290 { 291 s_Setting.autoSlicingMethod = (int)SpriteFrameModule.AutoSlicingMethod.DeleteAll; 292 } 293 294 private void DoSlicing() 295 { 296 switch (s_Setting.slicingType) 297 { 298 case SpriteEditorMenuSetting.SlicingType.GridByCellCount: 299 case SpriteEditorMenuSetting.SlicingType.GridByCellSize: 300 DoGridSlicing(); 301 break; 302 case SpriteEditorMenuSetting.SlicingType.Automatic: 303 DoAutomaticSlicing(); 304 break; 305 case SpriteEditorMenuSetting.SlicingType.IsometricGrid: 306 DoIsometricGridSlicing(); 307 break; 308 } 309 } 310 311 private void TwoIntFields(GUIContent label, GUIContent labelX, GUIContent labelY, ref int x, ref int y) 312 { 313 float height = EditorGUI.kSingleLineHeight; 314 Rect rect = GUILayoutUtility.GetRect(EditorGUILayout.kLabelFloatMinW, EditorGUILayout.kLabelFloatMaxW, height, height, EditorStyles.numberField); 315 316 Rect labelRect = rect; 317 labelRect.width = EditorGUIUtility.labelWidth; 318 labelRect.height = EditorGUI.kSingleLineHeight; 319 320 GUI.Label(labelRect, label); 321 322 Rect fieldRect = rect; 323 fieldRect.width -= EditorGUIUtility.labelWidth; 324 fieldRect.height = EditorGUI.kSingleLineHeight; 325 fieldRect.x += EditorGUIUtility.labelWidth; 326 fieldRect.width /= 2; 327 fieldRect.width -= 2; 328 329 EditorGUIUtility.labelWidth = 12; 330 331 x = EditorGUI.IntField(fieldRect, labelX, x); 332 fieldRect.x += fieldRect.width + 3; 333 y = EditorGUI.IntField(fieldRect, labelY, y); 334 335 EditorGUIUtility.labelWidth = labelRect.width; 336 } 337 338 private void OnGridGUI() 339 { 340 int width, height; 341 m_TextureDataProvider.GetTextureActualWidthAndHeight(out width, out height); 342 var texture = m_TextureDataProvider.GetReadableTexture2D(); 343 int maxWidth = texture != null ? width : 4096; 344 int maxHeight = texture != null ? height : 4096; 345 346 if (s_Setting.slicingType == SpriteEditorMenuSetting.SlicingType.GridByCellCount) 347 { 348 int x = (int)s_Setting.gridCellCount.x; 349 int y = (int)s_Setting.gridCellCount.y; 350 351 EditorGUI.BeginChangeCheck(); 352 TwoIntFields(s_Styles.columnAndRowLabel, s_Styles.columnLabel, s_Styles.rowLabel, ref x, ref y); 353 if (EditorGUI.EndChangeCheck()) 354 { 355 Undo.RegisterCompleteObjectUndo(s_Setting, "Change column & row"); 356 357 s_Setting.gridCellCount.x = Mathf.Clamp(x, 1, maxWidth); 358 s_Setting.gridCellCount.y = Mathf.Clamp(y, 1, maxHeight); 359 RectSettingsDirty(); 360 } 361 } 362 else 363 { 364 int x = (int)s_Setting.gridSpriteSize.x; 365 int y = (int)s_Setting.gridSpriteSize.y; 366 367 EditorGUI.BeginChangeCheck(); 368 TwoIntFields(s_Styles.pixelSizeLabel, s_Styles.xLabel, s_Styles.yLabel, ref x, ref y); 369 if (EditorGUI.EndChangeCheck()) 370 { 371 Undo.RegisterCompleteObjectUndo(s_Setting, "Change grid size"); 372 373 s_Setting.gridSpriteSize.x = Mathf.Clamp(x, 1, maxWidth); 374 s_Setting.gridSpriteSize.y = Mathf.Clamp(y, 1, maxHeight); 375 RectSettingsDirty(); 376 } 377 } 378 379 { 380 int x = (int)s_Setting.gridSpriteOffset.x; 381 int y = (int)s_Setting.gridSpriteOffset.y; 382 383 EditorGUI.BeginChangeCheck(); 384 TwoIntFields(s_Styles.offsetLabel, s_Styles.xLabel, s_Styles.yLabel, ref x, ref y); 385 if (EditorGUI.EndChangeCheck()) 386 { 387 Undo.RegisterCompleteObjectUndo(s_Setting, "Change grid offset"); 388 389 s_Setting.gridSpriteOffset.x = Mathf.Clamp(x, 0, maxWidth - s_Setting.gridSpriteSize.x); 390 s_Setting.gridSpriteOffset.y = Mathf.Clamp(y, 0, maxHeight - s_Setting.gridSpriteSize.y); 391 RectSettingsDirty(); 392 } 393 } 394 395 { 396 int x = (int)s_Setting.gridSpritePadding.x; 397 int y = (int)s_Setting.gridSpritePadding.y; 398 399 EditorGUI.BeginChangeCheck(); 400 TwoIntFields(s_Styles.paddingLabel, s_Styles.xLabel, s_Styles.yLabel, ref x, ref y); 401 if (EditorGUI.EndChangeCheck()) 402 { 403 Undo.RegisterCompleteObjectUndo(s_Setting, "Change grid padding"); 404 405 s_Setting.gridSpritePadding.x = Mathf.Clamp(x, 0, maxWidth); 406 s_Setting.gridSpritePadding.y = Mathf.Clamp(y, 0, maxHeight); 407 RectSettingsDirty(); 408 } 409 } 410 411 EditorGUI.BeginChangeCheck(); 412 bool keepEmptyRects = s_Setting.keepEmptyRects; 413 keepEmptyRects = EditorGUILayout.Toggle(s_Styles.keepEmptyRectsLabel, keepEmptyRects); 414 if (EditorGUI.EndChangeCheck()) 415 { 416 Undo.RegisterCompleteObjectUndo(s_Setting, "Keep Empty Rects"); 417 s_Setting.keepEmptyRects = keepEmptyRects; 418 } 419 } 420 421 private void OnAutomaticGUI() 422 { 423 float spacing = 38f; 424 var texture = m_TextureDataProvider.texture; 425 if (texture != null && GraphicsFormatUtility.IsCompressedFormat(texture.format)) 426 { 427 EditorGUILayout.LabelField(s_Styles.automaticSlicingHintLabel, s_Styles.notice); 428 spacing -= 31f; 429 } 430 } 431 432 private void OnIsometricGridGUI() 433 { 434 int width, height; 435 m_TextureDataProvider.GetTextureActualWidthAndHeight(out width, out height); 436 var texture = m_TextureDataProvider.GetReadableTexture2D(); 437 int maxWidth = texture != null ? width : 4096; 438 int maxHeight = texture != null ? height : 4096; 439 440 { 441 int x = (int)s_Setting.gridSpriteSize.x; 442 int y = (int)s_Setting.gridSpriteSize.y; 443 444 EditorGUI.BeginChangeCheck(); 445 TwoIntFields(s_Styles.pixelSizeLabel, s_Styles.xLabel, s_Styles.yLabel, ref x, ref y); 446 if (EditorGUI.EndChangeCheck()) 447 { 448 Undo.RegisterCompleteObjectUndo(s_Setting, "Change grid size"); 449 450 s_Setting.gridSpriteSize.x = Mathf.Clamp(x, 1, maxWidth); 451 s_Setting.gridSpriteSize.y = Mathf.Clamp(y, 1, maxHeight); 452 RectSettingsDirty(); 453 } 454 } 455 456 { 457 int x = (int)s_Setting.gridSpriteOffset.x; 458 int y = (int)s_Setting.gridSpriteOffset.y; 459 460 EditorGUI.BeginChangeCheck(); 461 TwoIntFields(s_Styles.offsetLabel, s_Styles.xLabel, s_Styles.yLabel, ref x, ref y); 462 if (EditorGUI.EndChangeCheck()) 463 { 464 Undo.RegisterCompleteObjectUndo(s_Setting, "Change grid offset"); 465 466 s_Setting.gridSpriteOffset.x = Mathf.Clamp(x, 0, maxWidth - s_Setting.gridSpriteSize.x); 467 s_Setting.gridSpriteOffset.y = Mathf.Clamp(y, 0, maxHeight - s_Setting.gridSpriteSize.y); 468 RectSettingsDirty(); 469 } 470 } 471 472 EditorGUI.BeginChangeCheck(); 473 bool keepEmptyRects = s_Setting.keepEmptyRects; 474 keepEmptyRects = EditorGUILayout.Toggle(s_Styles.keepEmptyRectsLabel, keepEmptyRects); 475 if (EditorGUI.EndChangeCheck()) 476 { 477 Undo.RegisterCompleteObjectUndo(s_Setting, "Keep Empty Rects"); 478 s_Setting.keepEmptyRects = keepEmptyRects; 479 } 480 EditorGUI.BeginChangeCheck(); 481 bool isAlternate = s_Setting.isAlternate; 482 isAlternate = EditorGUILayout.Toggle(s_Styles.isAlternateLabel, isAlternate); 483 if (EditorGUI.EndChangeCheck()) 484 { 485 Undo.RegisterCompleteObjectUndo(s_Setting, "Is Alternate"); 486 s_Setting.isAlternate = isAlternate; 487 RectSettingsDirty(); 488 } 489 } 490 491 private void DoPivotGUI() 492 { 493 EditorGUI.BeginChangeCheck(); 494 int alignment = s_Setting.spriteAlignment; 495 alignment = EditorGUILayout.Popup(s_Styles.pivotLabel, alignment, s_Styles.spriteAlignmentOptions); 496 if (EditorGUI.EndChangeCheck()) 497 { 498 Undo.RegisterCompleteObjectUndo(s_Setting, "Change Alignment"); 499 s_Setting.spriteAlignment = alignment; 500 s_Setting.pivot = SpriteEditorUtility.GetPivotValue((SpriteAlignment)alignment, s_Setting.pivot); 501 } 502 503 Vector2 pivot = s_Setting.pivot; 504 EditorGUI.BeginChangeCheck(); 505 using (new EditorGUI.DisabledScope(alignment != (int)SpriteAlignment.Custom)) 506 { 507 pivot = EditorGUILayout.Vector2Field(s_Styles.customPivotLabel, pivot); 508 } 509 if (EditorGUI.EndChangeCheck()) 510 { 511 Undo.RegisterCompleteObjectUndo(s_Setting, "Change custom pivot"); 512 513 s_Setting.pivot = pivot; 514 } 515 } 516 517 private void DoAutomaticSlicing() 518 { 519 // 4 seems to be a pretty nice min size for a automatic sprite slicing. It used to be exposed to the slicing dialog, but it is actually better workflow to slice&crop manually than find a suitable size number 520 m_SpriteFrameModule.DoAutomaticSlicing(4, s_Setting.spriteAlignment, s_Setting.pivot, (SpriteFrameModule.AutoSlicingMethod)s_Setting.autoSlicingMethod); 521 } 522 523 private void DoGridSlicing() 524 { 525 if (s_Setting.slicingType == SpriteEditorMenuSetting.SlicingType.GridByCellCount) 526 SetGridCellSizeWithCellCount(); 527 528 m_SpriteFrameModule.DoGridSlicing(s_Setting.gridSpriteSize, s_Setting.gridSpriteOffset, s_Setting.gridSpritePadding, s_Setting.spriteAlignment, s_Setting.pivot, (SpriteFrameModule.AutoSlicingMethod)s_Setting.autoSlicingMethod, s_Setting.keepEmptyRects); 529 } 530 531 private void DoIsometricGridSlicing() 532 { 533 m_SpriteFrameModule.DoIsometricGridSlicing(s_Setting.gridSpriteSize, s_Setting.gridSpriteOffset, s_Setting.spriteAlignment, s_Setting.pivot, (SpriteFrameModule.AutoSlicingMethod)s_Setting.autoSlicingMethod, s_Setting.keepEmptyRects, s_Setting.isAlternate); 534 } 535 536 private void SetGridCellSizeWithCellCount() 537 { 538 DetermineGridCellSizeWithCellCount(out var cellSize); 539 s_Setting.gridSpriteSize = cellSize; 540 } 541 542 private void DetermineGridCellSizeWithCellCount(out Vector2 cellSize) 543 { 544 m_TextureDataProvider.GetTextureActualWidthAndHeight(out var width, out var height); 545 var texture = m_TextureDataProvider.GetReadableTexture2D(); 546 int maxWidth = texture != null ? width : 4096; 547 int maxHeight = texture != null ? height : 4096; 548 549 SpriteEditorUtility.DetermineGridCellSizeWithCellCount(maxWidth, maxHeight, s_Setting.gridSpriteOffset, s_Setting.gridSpritePadding, s_Setting.gridCellCount, out cellSize); 550 } 551 } 552}