@startuml class AxisRotateStrategy { + OverridesSurfaceTracking : bool <> - <> _localAxis : LocalAxis - <> _lockedPosition : Vector3 - _isRotating : bool - _pendingDegrees : float - _lastMousePos : Vector2 + Sensitivity : float = 0.4f + AxisRotateStrategy(localAxis:LocalAxis, lockedPosition:Vector3) + BeginRotate() : void + EndRotate() : void + UpdateMovement(ctx:GhostMovementContext) : void - GetWorldAxis(t:Transform) : Vector3 - {static} SnapToNearestRightAngle(q:Quaternion) : Quaternion } enum LocalAxis { Up, Forward, Right, } IGhostMovementStrategy <|-- AxisRotateStrategy AxisRotateStrategy +-- LocalAxis @enduml