public override void OnGizmoDragUpdate(int handleId) { if (OwnsHandle(handleId)) { if (BoxUsage == Usage.Generic) { _boxSize = Vector3.Scale(_boxSize, Gizmo.RelativeDragScale); if (!_scaleFromCenter) { Gizmo.Transform.Position3D = _scalePivot + _scaleDragWorkData.Axis * _boxSize[_scaleDragWorkData.AxisIndex] * 0.5f; } } else if (BoxUsage == Usage.ObjectScale && _targetHierarchy != null) { // Bug: When scale pivot overlaps object position, ScaleFromPivot will produce incorrect results. _targetHierarchyTransform.ScaleFromPivot(Gizmo.RelativeDragScale, _scalePivot); FitBoxToTargetHierarchy(); IRTTransformGizmoListener transformGizmoListener = _targetHierarchy.GetComponent <IRTTransformGizmoListener>(); if (transformGizmoListener != null) { transformGizmoListener.OnTransformed(Gizmo); } } UpdateTickPositions(); ValidateBoxSize(); } }
public override bool OnGizmoCanBeginDrag(int handleId) { if (BoxUsage == Usage.ObjectScale && _targetHierarchy != null) { IRTTransformGizmoListener transformGizmoListener = _targetHierarchy.GetComponent <IRTTransformGizmoListener>(); if (transformGizmoListener != null) { return(transformGizmoListener.OnCanBeTransformed(Gizmo)); } } return(true); }
private void ScaleObject(GameObject gameObject, Vector3 scalePivot) { Transform objectTransform = gameObject.transform; Vector3 scaleFactor = Gizmo.RelativeDragScale; ObjectRestrictions restrictions = GetObjectRestrictions(gameObject); if (restrictions != null) { if (!restrictions.IsAffectedByHandle(Gizmo.DragHandleId)) { return; } scaleFactor = restrictions.AdjustScaleVector(scaleFactor); } if (ScaleConstraintEnabled) { Vector3 totalDragScale = Gizmo.TotalDragScale; if (totalDragScale[0] < 0.0f) { scaleFactor[0] = 1.0f; } if (totalDragScale[1] < 0.0f) { scaleFactor[1] = 1.0f; } if (totalDragScale[2] < 0.0f) { scaleFactor[2] = 1.0f; } objectTransform.ScaleFromPivot(scaleFactor, scalePivot); objectTransform.localScale = Vector3.Max(objectTransform.localScale, _minPositiveScale); } else { objectTransform.ScaleFromPivot(scaleFactor, scalePivot); } IRTTransformGizmoListener transformGizmoListener = gameObject.GetComponent <IRTTransformGizmoListener>(); if (transformGizmoListener != null) { transformGizmoListener.OnTransformed(Gizmo); } }
private void RotateObject(GameObject gameObject, Quaternion rotation, Vector3 rotationPivot) { ObjectTransformGizmo.ObjectRestrictions restrictions = GetObjectRestrictions(gameObject); if (restrictions != null && !restrictions.IsAffectedByHandle(Gizmo.DragHandleId)) { return; } Transform objectTransform = gameObject.transform; objectTransform.RotateAroundPivot(rotation, rotationPivot); IRTTransformGizmoListener transformGizmoListener = gameObject.GetComponent <IRTTransformGizmoListener>(); if (transformGizmoListener != null) { transformGizmoListener.OnTransformed(Gizmo); } }
private void MoveObject(GameObject gameObject, Vector3 moveVector) { ObjectTransformGizmo.ObjectRestrictions restrictions = GetObjectRestrictions(gameObject); if (restrictions != null) { if (!restrictions.IsAffectedByHandle(Gizmo.DragHandleId)) { return; } moveVector = restrictions.AdjustMoveVector(moveVector); } gameObject.transform.position += moveVector; IRTTransformGizmoListener transformGizmoListener = gameObject.GetComponent <IRTTransformGizmoListener>(); if (transformGizmoListener != null) { transformGizmoListener.OnTransformed(Gizmo); } }
private List <GameObject> GetTransformableParentObjects() { List <GameObject> targetParents = GameObjectEx.FilterParentsOnly(_targetObjects); List <GameObject> transformableParents = new List <GameObject>(); foreach (var parent in targetParents) { IRTTransformGizmoListener transformGizmoListener = parent.GetComponent <IRTTransformGizmoListener>(); if (transformGizmoListener != null && !transformGizmoListener.OnCanBeTransformed(Gizmo)) { continue; } if (Settings.IsLayerTransformable(parent.layer) && Settings.IsObjectTransformable(parent)) { transformableParents.Add(parent); } } return(transformableParents); }
private void ScaleObject(GameObject gameObject, Vector3 scaleFactor, Vector3 scalePivot) { ObjectTransformGizmo.ObjectRestrictions restrictions = GetObjectRestrictions(gameObject); if (restrictions != null) { if (!restrictions.IsAffectedByHandle(Gizmo.DragHandleId)) { return; } scaleFactor = restrictions.AdjustScaleVector(scaleFactor); } Transform objectTransform = gameObject.transform; objectTransform.ScaleFromPivot(scaleFactor, scalePivot); IRTTransformGizmoListener transformGizmoListener = gameObject.GetComponent <IRTTransformGizmoListener>(); if (transformGizmoListener != null) { transformGizmoListener.OnTransformed(Gizmo); } }