No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

PathEditorToolExtensions.cs 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. using System;
  2. using System.Linq;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityEditor;
  6. using UnityEditor.EditorTools;
  7. using UnityEditor.U2D.Path.GUIFramework;
  8. using UnityObject = UnityEngine.Object;
  9. namespace UnityEditor.U2D.Path
  10. {
  11. public static class PathEditorToolExtensions
  12. {
  13. public static void CycleTangentMode<T>(this PathEditorTool<T> pathEditorTool) where T : ScriptablePath
  14. {
  15. var first = true;
  16. var mixed = false;
  17. var tangentMode = TangentMode.Linear;
  18. var targets = pathEditorTool.targets;
  19. foreach(var target in targets)
  20. {
  21. var path = pathEditorTool.GetPath(target);
  22. if (path.selection.Count == 0)
  23. continue;
  24. for (var i = 0; i < path.pointCount; ++i)
  25. {
  26. if (!path.selection.Contains(i))
  27. continue;
  28. var point = path.GetPoint(i);
  29. if (first)
  30. {
  31. first = false;
  32. tangentMode = point.tangentMode;
  33. }
  34. else if (point.tangentMode != tangentMode)
  35. {
  36. mixed = true;
  37. break;
  38. }
  39. }
  40. if (mixed)
  41. break;
  42. }
  43. if (mixed)
  44. tangentMode = TangentMode.Linear;
  45. else
  46. tangentMode = GetNextTangentMode(tangentMode);
  47. foreach(var target in targets)
  48. {
  49. var path = pathEditorTool.GetPath(target);
  50. if (path.selection.Count == 0)
  51. continue;
  52. path.undoObject.RegisterUndo("Cycle Tangent Mode");
  53. for (var i = 0; i < path.pointCount; ++i)
  54. {
  55. if (!path.selection.Contains(i))
  56. continue;
  57. path.SetTangentMode(i, tangentMode);
  58. }
  59. pathEditorTool.SetPath(target);
  60. }
  61. }
  62. public static void MirrorTangent<T>(this PathEditorTool<T> pathEditorTool) where T : ScriptablePath
  63. {
  64. var targets = pathEditorTool.targets;
  65. foreach(var target in targets)
  66. {
  67. var path = pathEditorTool.GetPath(target);
  68. if (path.selection.Count == 0)
  69. continue;
  70. path.undoObject.RegisterUndo("Mirror Tangents");
  71. for (var i = 0; i < path.pointCount; ++i)
  72. {
  73. if (!path.selection.Contains(i))
  74. continue;
  75. path.MirrorTangent(i);
  76. }
  77. pathEditorTool.SetPath(target);
  78. }
  79. }
  80. private static TangentMode GetNextTangentMode(TangentMode tangentMode)
  81. {
  82. return (TangentMode)((((int)tangentMode) + 1) % Enum.GetValues(typeof(TangentMode)).Length);
  83. }
  84. }
  85. }