ObjectMouseMoveAlongDirectionSession.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #if UNITY_EDITOR
  2. using UnityEngine;
  3. namespace O3DWB
  4. {
  5. public class ObjectMouseMoveAlongDirectionSession
  6. {
  7. #region Private Variables
  8. private GameObject _gameObject;
  9. private Transform _gameObjectTransform;
  10. private Vector3 _objectPositionAtSessionBegin;
  11. private Vector2 _cursorPosAtSessionStart;
  12. private Vector3 _normalizedMoveDirection;
  13. private bool _isActive = false;
  14. private ObjectMouseMoveAlongDirectionSettings _settings;
  15. #endregion
  16. #region Public Properties
  17. public bool IsActive { get { return _isActive; } }
  18. #endregion
  19. #region Public Methods
  20. public void Begin(GameObject gameObject, Vector3 moveDirection, ObjectMouseMoveAlongDirectionSettings settings)
  21. {
  22. if (_isActive || moveDirection.magnitude == 0 || gameObject == null) return;
  23. _gameObject = gameObject;
  24. _gameObjectTransform = gameObject.transform;
  25. _objectPositionAtSessionBegin = _gameObjectTransform.position;
  26. _settings = settings;
  27. _cursorPosAtSessionStart = MouseCursor.Instance.Position;
  28. _normalizedMoveDirection = moveDirection;
  29. _normalizedMoveDirection.Normalize();
  30. _isActive = true;
  31. }
  32. public void End()
  33. {
  34. _isActive = false;
  35. }
  36. public void UpdateForMouseMovement(Event e)
  37. {
  38. if(_isActive && _gameObject != null)
  39. {
  40. Vector2 currentCursorPos = MouseCursor.Instance.Position;
  41. Vector2 fromPosAtSessionStartToCurrentPos = currentCursorPos - _cursorPosAtSessionStart;
  42. UndoEx.RecordForToolAction(_gameObjectTransform);
  43. _gameObjectTransform.position = _objectPositionAtSessionBegin + _normalizedMoveDirection * (_settings.MouseSensitivity * fromPosAtSessionStartToCurrentPos.x);
  44. }
  45. }
  46. #endregion
  47. }
  48. }
  49. #endif