TransformSnapshot.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #if UNITY_EDITOR
  2. using UnityEngine;
  3. namespace O3DWB
  4. {
  5. public class TransformSnapshot
  6. {
  7. #region Private Variables
  8. private Vector3 _worldSpacePosition;
  9. private Quaternion _worldSpaceRotation;
  10. private Vector3 _worldSpaceScale;
  11. #endregion
  12. #region Public Methods
  13. public void TakeSnapshot(Transform transform)
  14. {
  15. _worldSpacePosition = transform.position;
  16. _worldSpaceRotation = transform.rotation;
  17. _worldSpaceScale = transform.lossyScale;
  18. }
  19. public override bool Equals(object value)
  20. {
  21. if (ReferenceEquals(value, null)) return false;
  22. if (ReferenceEquals(value, this)) return true;
  23. if (value.GetType() != this.GetType()) return false;
  24. return IsEqual(value as TransformSnapshot);
  25. }
  26. public bool Equals(TransformSnapshot transformSnapshot)
  27. {
  28. if (ReferenceEquals(transformSnapshot, null)) return false;
  29. if (ReferenceEquals(transformSnapshot, this)) return true;
  30. return IsEqual(transformSnapshot);
  31. }
  32. public override int GetHashCode()
  33. {
  34. int hash = 13;
  35. hash = (hash * 7) + _worldSpacePosition.GetHashCode();
  36. hash = (hash * 7) + _worldSpaceRotation.GetHashCode();
  37. hash = (hash * 7) + _worldSpaceScale.GetHashCode();
  38. return hash;
  39. }
  40. public static bool operator ==(TransformSnapshot firstSnapshot, TransformSnapshot secondSnapshot)
  41. {
  42. return !ReferenceEquals(firstSnapshot, null) &&
  43. !ReferenceEquals(secondSnapshot, null) &&
  44. (ReferenceEquals(firstSnapshot, secondSnapshot) || firstSnapshot.IsEqual(secondSnapshot));
  45. }
  46. public static bool operator !=(TransformSnapshot firstSnapshot, TransformSnapshot secondSnapshot)
  47. {
  48. return !(firstSnapshot == secondSnapshot);
  49. }
  50. #endregion
  51. #region Private Methods
  52. private bool IsEqual(TransformSnapshot transformSnapshot)
  53. {
  54. return transformSnapshot._worldSpacePosition == _worldSpacePosition &&
  55. transformSnapshot._worldSpaceRotation == _worldSpaceRotation &&
  56. transformSnapshot._worldSpaceScale == _worldSpaceScale;
  57. }
  58. #endregion
  59. }
  60. }
  61. #endif