Ejemplo n.º 1
0
    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);
    }
Ejemplo n.º 2
0
 public virtual void OnBeginDrag(BIWGizmosAxis axis, Transform entityTransform)
 {
     startDragging   = true;
     targetTransform = entityTransform;
     activeAxis      = axis;
     axis.SetColorHighlight();
 }
Ejemplo n.º 3
0
    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());
 }
Ejemplo n.º 5
0
    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;
 }
Ejemplo n.º 7
0
    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);
    }
Ejemplo n.º 10
0
    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);
    }
Ejemplo n.º 11
0
    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);
 }
Ejemplo n.º 13
0
    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);
    }
Ejemplo n.º 14
0
 public override void OnBeginDrag(BIWGizmosAxis axis, Transform entityTransform)
 {
     base.OnBeginDrag(axis, entityTransform);
     raycastPlane = new Plane(activeAxis.transform.forward, transform.position);
 }
Ejemplo n.º 15
0
 public abstract float TransformEntity(Transform targetTransform, BIWGizmosAxis axis, float axisValue);