CinemachineTransposerEditor.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. using UnityEngine;
  2. using UnityEditor;
  3. using System.Collections.Generic;
  4. namespace Cinemachine.Editor
  5. {
  6. [CustomEditor(typeof(CinemachineTransposer))]
  7. [CanEditMultipleObjects]
  8. internal class CinemachineTransposerEditor : BaseEditor<CinemachineTransposer>
  9. {
  10. /// <summary>Get the property names to exclude in the inspector.</summary>
  11. /// <param name="excluded">Add the names to this list</param>
  12. protected override void GetExcludedPropertiesInInspector(List<string> excluded)
  13. {
  14. base.GetExcludedPropertiesInInspector(excluded);
  15. switch (Target.m_BindingMode)
  16. {
  17. default:
  18. case CinemachineTransposer.BindingMode.LockToTarget:
  19. if (Target.m_AngularDampingMode == CinemachineTransposer.AngularDampingMode.Euler)
  20. excluded.Add(FieldPath(x => x.m_AngularDamping));
  21. else
  22. {
  23. excluded.Add(FieldPath(x => x.m_PitchDamping));
  24. excluded.Add(FieldPath(x => x.m_YawDamping));
  25. excluded.Add(FieldPath(x => x.m_RollDamping));
  26. }
  27. break;
  28. case CinemachineTransposer.BindingMode.LockToTargetNoRoll:
  29. excluded.Add(FieldPath(x => x.m_RollDamping));
  30. excluded.Add(FieldPath(x => x.m_AngularDamping));
  31. excluded.Add(FieldPath(x => x.m_AngularDampingMode));
  32. break;
  33. case CinemachineTransposer.BindingMode.LockToTargetWithWorldUp:
  34. excluded.Add(FieldPath(x => x.m_PitchDamping));
  35. excluded.Add(FieldPath(x => x.m_RollDamping));
  36. excluded.Add(FieldPath(x => x.m_AngularDamping));
  37. excluded.Add(FieldPath(x => x.m_AngularDampingMode));
  38. break;
  39. case CinemachineTransposer.BindingMode.LockToTargetOnAssign:
  40. case CinemachineTransposer.BindingMode.WorldSpace:
  41. excluded.Add(FieldPath(x => x.m_PitchDamping));
  42. excluded.Add(FieldPath(x => x.m_YawDamping));
  43. excluded.Add(FieldPath(x => x.m_RollDamping));
  44. excluded.Add(FieldPath(x => x.m_AngularDamping));
  45. excluded.Add(FieldPath(x => x.m_AngularDampingMode));
  46. break;
  47. case CinemachineTransposer.BindingMode.SimpleFollowWithWorldUp:
  48. excluded.Add(FieldPath(x => x.m_XDamping));
  49. excluded.Add(FieldPath(x => x.m_PitchDamping));
  50. excluded.Add(FieldPath(x => x.m_YawDamping));
  51. excluded.Add(FieldPath(x => x.m_RollDamping));
  52. excluded.Add(FieldPath(x => x.m_AngularDamping));
  53. excluded.Add(FieldPath(x => x.m_AngularDampingMode));
  54. break;
  55. }
  56. if (Target.HideOffsetInInspector)
  57. excluded.Add(FieldPath(x => x.m_FollowOffset));
  58. }
  59. public override void OnInspectorGUI()
  60. {
  61. BeginInspector();
  62. bool needWarning = false;
  63. for (int i = 0; !needWarning && i < targets.Length; ++i)
  64. needWarning = (targets[i] as CinemachineTransposer).FollowTarget == null;
  65. if (needWarning)
  66. EditorGUILayout.HelpBox(
  67. "Transposer requires a Follow Target. Change Body to Do Nothing if you don't want a Follow target.",
  68. MessageType.Warning);
  69. DrawRemainingPropertiesInInspector();
  70. }
  71. #if UNITY_2021_2_OR_NEWER
  72. void OnSceneGUI()
  73. {
  74. DrawSceneTools();
  75. }
  76. protected virtual void OnEnable()
  77. {
  78. CinemachineSceneToolUtility.RegisterTool(typeof(FollowOffsetTool));
  79. }
  80. protected virtual void OnDisable()
  81. {
  82. CinemachineSceneToolUtility.UnregisterTool(typeof(FollowOffsetTool));
  83. }
  84. void DrawSceneTools()
  85. {
  86. var transposer = Target;
  87. if (transposer == null || !transposer.IsValid)
  88. {
  89. return;
  90. }
  91. if (CinemachineSceneToolUtility.IsToolActive(typeof(FollowOffsetTool)))
  92. {
  93. CinemachineSceneToolHelpers.TransposerFollowOffsetTool(transposer);
  94. }
  95. }
  96. #endif
  97. }
  98. }