Example #1
0
    private void Update()
    {
        if (InputManager.instance.touchDown)
        {
            Ray        ray = Camera.main.ScreenPointToRay(InputManager.instance.position);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit, Mathf.Infinity, GizmoControl.GIZMO_LAYER_MASK, QueryTriggerInteraction.Collide))
            {
                storedGizmoObj        = hit.collider.gameObject;
                storedPosition        = storedGizmoObj.transform.position;
                storedInversePosition = transform.position - (storedPosition - transform.position);
                storedMode            = BBUtils.FindModeFromObj(objModeMapping, hit.collider.gameObject);
                BBUtils.GetProjectedPosition(InputManager.instance.position, transform.position, storedMode, out storedProjectedPosition, transform);
                storedMat = storedGizmoObj.GetComponent <Renderer>().material;
                storedGizmoObj.GetComponent <Renderer>().material = selectedMat;
                scaling = true;
            }
        }
        else if (InputManager.instance.touching && scaling)
        {
            Vector3 targetProjectedPosition;
            bool    success = BBUtils.GetProjectedPosition(InputManager.instance.position, transform.position, storedMode, out targetProjectedPosition, transform);
            if (success)
            {
                Vector3 newPosition = storedPosition + (targetProjectedPosition - storedProjectedPosition);
                if ((newPosition - storedPosition).sqrMagnitude > GizmoControl.MAX_DISTANCE * GizmoControl.MAX_DISTANCE)
                {
                    newPosition = storedPosition + (newPosition - storedPosition).normalized * GizmoControl.MAX_DISTANCE;
                }

                transform.position           = (newPosition + storedInversePosition) / 2;
                linkedObj.transform.position = transform.position;
                float   extent       = Vector3.Distance(newPosition, storedInversePosition);
                Vector3 currentScale = linkedObj.transform.localScale;
                switch (storedMode)
                {
                case Mode.X:
                    linkedObj.transform.localScale = new Vector3(extent, currentScale.y, currentScale.z);
                    break;

                case Mode.Y:
                    linkedObj.transform.localScale = new Vector3(currentScale.x, extent, currentScale.z);
                    break;

                case Mode.Z:
                    linkedObj.transform.localScale = new Vector3(currentScale.x, currentScale.y, extent);
                    break;
                }

                SetGizmoLocations();
            }
        }
        else if (InputManager.instance.touchUp && scaling)
        {
            storedMode = Mode.NONE;
            storedGizmoObj.GetComponent <Renderer>().material = storedMat;
            storedGizmoObj = null;
            storedMat      = null;
            scaling        = false;
        }

        ResizeGizmo();
    }
Example #2
0
    void Update()
    {
        if (InputManager.instance.touchDown)
        {
            Ray          ray = Camera.main.ScreenPointToRay(InputManager.instance.position);
            RaycastHit[] hits;
            hits = Physics.RaycastAll(ray, Mathf.Infinity, GizmoControl.GIZMO_LAYER_MASK, QueryTriggerInteraction.Collide);
            foreach (RaycastHit hit in hits)
            {
                Mode mode = BBUtils.FindModeFromObj(objModeMapping, hit.collider.gameObject);
                if (mode == Mode.X || mode == Mode.Y || mode == Mode.Z)
                {
                    storedMode     = mode;
                    storedGizmoObj = hit.collider.gameObject;
                    break;
                }
                else if (mode != Mode.NONE)
                {
                    storedMode     = mode;
                    storedGizmoObj = hit.collider.gameObject;
                }
            }

            if (storedMode != Mode.NONE)
            {
                storedPosition = transform.position;
                BBUtils.GetProjectedPosition(InputManager.instance.position, transform.position, storedMode, out storedProjectedPosition, transform);
                storedMat = BBUtils.ChangeSiblingMaterial(storedGizmoObj, selectedMat);
                moving    = true;
            }
        }
        else if (InputManager.instance.touching && moving)
        {
            Vector3 targetProjectedPosition;
            bool    success = BBUtils.GetProjectedPosition(InputManager.instance.position, transform.position, storedMode, out targetProjectedPosition, transform);
            if (success)
            {
                Vector3 newPosition = storedPosition + (targetProjectedPosition - storedProjectedPosition);
                if ((newPosition - storedPosition).sqrMagnitude <= GizmoControl.MAX_DISTANCE * GizmoControl.MAX_DISTANCE)
                {
                    transform.position = newPosition;
                }
                else
                {
                    transform.position = storedPosition + (newPosition - storedPosition).normalized * GizmoControl.MAX_DISTANCE;
                }
            }
        }
        else if (InputManager.instance.touchUp && moving)
        {
            storedMode = Mode.NONE;
            BBUtils.ChangeSiblingMaterial(storedGizmoObj, storedMat);
            storedGizmoObj = null;
            moving         = false;
        }

        if (linkedObj != null)
        {
            linkedObj.transform.position = transform.position;
        }

        ResizeGizmo();
    }