protected virtual float GetHitPointToAxisValue(BIWGizmosAxis axis, Vector3 hitPoint, Vector2 mousePosition) { Vector3 dir = (hitPoint - axis.transform.position).normalized; float sign = Vector3.Angle(dir, axis.transform.forward) == 180 ? -1 : 1; return(Vector3.Distance(activeAxis.transform.position, hitPoint) * sign); }
public virtual void OnBeginDrag(BIWGizmosAxis axis, Transform entityTransform) { startDragging = true; targetTransform = entityTransform; activeAxis = axis; axis.SetColorHighlight(); }
private Vector3 GetScaleDirection(Transform entityTransform, BIWGizmosAxis axis) { Vector3 scaleDirection = activeAxis.transform.forward; if (axis == axisProportionalScale) { scaleDirection = Vector3.one; float inputDirection = (lastMousePosition.x - initialMousePosition.x) + (lastMousePosition.y - initialMousePosition.y); if (inputDirection < 0) { scaleDirection = -Vector3.one; } initialMousePosition = lastMousePosition; initialHitPoint = lastHitPoint; } else if (worldOrientedGizmos) { scaleDirection = entityTransform.rotation * activeAxis.transform.forward; scaleDirection.x = Mathf.Abs(scaleDirection.x); scaleDirection.y = Mathf.Abs(scaleDirection.y); scaleDirection.z = Mathf.Abs(scaleDirection.z); } return(scaleDirection); }
private void OnBeginDrag(BIWGizmosAxis hittedAxis) { isTransformingObject = true; activeGizmo = hittedAxis.GetGizmo(); activeGizmo.OnBeginDrag(hittedAxis, selectedEntitiesParent); freeCameraMovement.SetCameraCanMove(false); OnGizmoTransformObjectStart?.Invoke(activeGizmo.GetGizmoType()); }
public override float TransformEntity(Transform entityTransform, BIWGizmosAxis axis, float axisValue) { Space space = worldOrientedGizmos ? Space.World : Space.Self; Vector3 rotationVector = activeAxis.transform.forward; float amount = axisValue * Mathf.Rad2Deg; entityTransform.Rotate(rotationVector, amount, space); return(amount); }
private void SetAxisHover(BIWGizmosAxis axis) { if (hoveredAxis != null && hoveredAxis != axis) { hoveredAxis.SetColorDefault(); } else if (axis != null) { axis.SetColorHighlight(); } hoveredAxis = axis; }
private void CheckGizmosRaycast(Vector3 mousePosition) { RaycastHit hit; if (Raycast(mousePosition, gizmoMask, out hit, CompareSelectionHit)) { BIWGizmosAxis gizmosAxis = hit.collider.gameObject.GetComponent <BIWGizmosAxis>(); if (gizmosAxis != null) { OnGizmosAxisPressed?.Invoke(gizmosAxis); } } }
private void CheckGizmoHover(Vector3 mousePosition) { RaycastHit hit; if (raycastController.RaycastToGizmos(mousePosition, out hit)) { BIWGizmosAxis gizmoAxis = hit.collider.gameObject.GetComponent <BIWGizmosAxis>(); SetAxisHover(gizmoAxis); } else { SetAxisHover(null); } }
public override float TransformEntity(Transform entityTransform, BIWGizmosAxis axis, float axisValue) { Vector3 initialEntityPosition = entityTransform.position; if (snapFactor > 0) { initialEntityPosition = GetPositionRoundedToSnapFactor(entityTransform.position, axisValue); } Vector3 move = activeAxis.transform.forward * axisValue; Vector3 position = initialEntityPosition + move; entityTransform.position = position; return(axisValue); }
protected override float GetHitPointToAxisValue(BIWGizmosAxis axis, Vector3 hitPoint, Vector2 mousePosition) { if (axis == axisProportionalScale) { if (startDragging) { initialMousePosition = mousePosition; initialHitPoint = hitPoint; } lastMousePosition = mousePosition; lastHitPoint = hitPoint; return(Vector3.Distance(initialHitPoint, hitPoint)); } return(axis.transform.InverseTransformPoint(hitPoint).z); }
public override float TransformEntity(Transform entityTransform, BIWGizmosAxis axis, float axisValue) { Vector3 scaleDirection = GetScaleDirection(entityTransform, axis); // In order to avoid to make the scale of each selected entity dependent of the 'entityTransform' parent, // we temporally move all entities to the same position as 'entityTransform' before calculate the new scale. foreach (Transform entity in entityTransform) { entitiesOriginalPositions.Add(entity, entity.transform.position); entity.transform.position = entityTransform.position; } if (axis == axisProportionalScale) { // New scale calculation (for proportional scale gizmo) entityTransform.localScale = GetNewScale(entityTransform, axisValue, scaleDirection, false); } else { // New scale calculation (for XYZ-axis scale gizmo) foreach (var originalEntity in entitiesOriginalPositions) { Transform entity = originalEntity.Key; entity.transform.SetParent(null); entity.localScale = GetNewScale(entity.transform, axisValue, scaleDirection, true); entity.SetParent(entityTransform); } } // Once the new scale has been calculated, we restore the original positions of all the selected entities. foreach (var originalEntity in entitiesOriginalPositions) { Transform entity = originalEntity.Key; Vector3 originalPosition = originalEntity.Value; entity.position = originalPosition; } entitiesOriginalPositions.Clear(); return(axisValue); }
private void OnGizmosAxisPressed(BIWGizmosAxis pressedAxis) { OnBeginDrag(pressedAxis); }
protected override float GetHitPointToAxisValue(BIWGizmosAxis axis, Vector3 hitPoint, Vector2 mousePosition) { Vector3 hitDir = (hitPoint - transform.position).normalized; return(Vector3.SignedAngle(axis.transform.up, hitDir, axis.transform.forward) * Mathf.Deg2Rad); }
public override void OnBeginDrag(BIWGizmosAxis axis, Transform entityTransform) { base.OnBeginDrag(axis, entityTransform); raycastPlane = new Plane(activeAxis.transform.forward, transform.position); }
public abstract float TransformEntity(Transform targetTransform, BIWGizmosAxis axis, float axisValue);