Example #1
0
    // Update is called once per frame
    void Update()
    {
        if (!CheckIsInManipulationState())
        {
            return;
        }
        //if (!CheckIsInManipulationState()) { return; }

        if (_indexDwellCount >= _dwellEffectLowCutoff && _isBeingSelected)
        {
            Color curC = _renderer.material.color;
            float alp  = 0.0f;

            int mappedDwellCount     = _indexDwellCount - _dwellEffectLowCutoff;
            int mappedDwellThreshold = _dwellThreshold - _dwellEffectLowCutoff;

            if (mappedDwellCount < mappedDwellThreshold / 2)
            {
                alp = FoamUtils.LinearMapReverse(mappedDwellCount, 0, mappedDwellThreshold / 2, _lowAlpha, 1.0f);
            }
            else
            {
                alp = FoamUtils.LinearMap(mappedDwellCount, mappedDwellThreshold / 2, mappedDwellThreshold, _lowAlpha, 1.0f);
            }

            _renderer.material.color = new Color(curC.r, curC.g, curC.b, alp);
        }
        else
        {
            if (_isBeingSelected)
            {
                _renderer.material.color = FoamUtils.ObjManiSelectedColor;
            }
        }
    }
Example #2
0
    public static int AnimateGrowSize(int animCount, Vector3 initalScale, Transform prim, Vector3 ObjCreatedPos)
    {
        float newX = FoamUtils.LinearMap(animCount, 0, FoamUtils.ObjCreatedAnimTime, 0.0f, initalScale.x);
        float newY = FoamUtils.LinearMap(animCount, 0, FoamUtils.ObjCreatedAnimTime, 0.0f, initalScale.y);
        float newZ = FoamUtils.LinearMap(animCount, 0, FoamUtils.ObjCreatedAnimTime, 0.0f, initalScale.z);

        prim.localScale = new Vector3(newX, newY, newZ);
        prim.position   = ObjCreatedPos;
        return(animCount + 1);
    }
Example #3
0
    // *delete* the object
    public void Undo()
    {
        if (_data.CurrentSelectionObj && _target.GetInstanceID() == _data.CurrentSelectionObj.GetInstanceID())
        {
            _target.GetComponent <Modelable>().Deselect();
            _data.CurrentSelectionObj = null;
            //FoamUtils.CurrentSelectionObjID = 0;
        }

        _target.SetActive(false);
        FoamUtils.RemoveObjData(_data, _target);
    }
Example #4
0
    public void DestroyTabs()
    {
        int num = _tabs.Count;

        for (int i = 0; i < num; i++)
        {
            _tabs[i].CleanUp();
            FoamUtils.RemoveObjData(m_data, _tabs[i].gameObject);
            GameObject.Destroy(_tabs[i].gameObject);
        }

        _tabs = new List <FoamScaleTab>();
    }
Example #5
0
        void OnTriggerExit(Collider other)
        {
            if (other.name == "palm")
            {
                return;
            }

            if (other.transform.parent == null || other.transform.parent.parent == null)
            {
                return;
            }

            if (other.transform.parent.parent.name == "Hand_l")
            {
                if (other.transform.parent.name != "ring" && other.transform.parent.name != "pinky")
                {
                    m_leftHandFingerIn--;
                }
            }
            else if (other.transform.parent.parent.name == "Hand_r")
            {
                if (other.transform.parent.name != "ring" && other.transform.parent.name != "pinky")
                {
                    m_rightHandFingerIn--;
                }
            }

            // Only exit when already entered
            if (!m_entered)
            {
                return;
            }

            // Jiaju FoamAR addition
            //if (!FoamUtils.IsGlobalGrabbing) return;
            if (FoamUtils.ShouldStopGrabCollider(this.transform.parent.gameObject))
            {
                return;
            }


            if (m_leftHandFingerIn < FINGER_THRESHOLD && m_rightHandFingerIn < FINGER_THRESHOLD)
            {
                DeExpand();
                if (m_grabObj != null)
                {
                    m_grabObj.OnGrabTriggerExit();
                }
                m_entered = false;
            }
        }
Example #6
0
    // OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks
    override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        if (_copiedObj && !_isReleased)
        {
            _transStep = FoamUtils.AnimateWaveTransparency(_copiedRenderer, _transStep);
        }

        // play scale animation first
        if (_copiedObj && _animCount < FoamUtils.ObjCreatedAnimTime)
        {
            _animCount = FoamUtils.AnimateGrowSize(_animCount, _initialScale, _copiedObj, _data.ObjCreatedPos);
            return;
        }

        if (_copiedObj)
        {
            if (!_isReleased)
            {
                _copiedObj.position = _data.ObjCreatedPos;
            }

            if (_data.ActiveGC.bufferedGesture() == "pinch")
            {
                _isReleased = true;

                _copiedObj.gameObject.name = _copiedObj.gameObject.name.Replace("(Clone)", "").Trim();
                if (_copiedObj.gameObject.tag == "DummyCone")
                {
                    GameObject.Destroy(_copiedObj.gameObject);
                    _copiedObj = Instantiate(_data.ConePrefab, _data.ObjCreatedPos, Quaternion.identity);
                    _copiedObj.transform.localScale = _initialScale;
                    _copiedObj.transform.rotation   = _initialRot;
                }

                _copiedObj.gameObject.name     = _copiedObj.gameObject.name.Replace("(Clone)", "").Trim();
                _copiedRenderer.material.color = _copiedOGColor;

                //_data.SceneObjs.Add(_copiedObj.gameObject);
                FoamUtils.CreateObjData(_data, _copiedObj.gameObject);

                animator.SetBool(_hash_objMenuClosedBool, true);
            }
        }
        else
        {
            animator.SetBool(_hash_objMenuClosedBool, true);
        }
    }
Example #7
0
    // OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks
    override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        // change transparency
        if (m_prim && !m_isReleased)
        {
            _transStep = FoamUtils.AnimateWaveTransparency(_primRenderer, _transStep);
        }

        // play scale animation first
        if (m_prim && _animCount < FoamUtils.ObjCreatedAnimTime)
        {
            _animCount = FoamUtils.AnimateGrowSize(_animCount, _initalScale, m_prim, m_data.ObjCreatedPos);
            return;
        }

        if (m_prim)
        {
            if (!m_isReleased)
            {
                m_prim.position = m_data.ObjCreatedPos;
            }

            //if (m_data.ActiveGC.bufferedGesture() == "pinch" || Input.GetKey(KeyCode.DownArrow))
            if (m_data.ActiveGC.bufferedGesture() == "pinch")
            {
                m_isReleased = true;

                m_prim.gameObject.name = m_prim.gameObject.name.Replace("(Clone)", "").Trim();
                if (m_prim.gameObject.tag == "DummyCone")
                {
                    GameObject.Destroy(m_prim.gameObject);
                    m_prim = Instantiate(m_data.ConePrefab, m_data.ObjCreatedPos, Quaternion.identity);
                }

                m_prim.gameObject.name       = m_prim.gameObject.name.Replace("(Clone)", "").Trim();
                _primRenderer.material.color = _primOGColor;

                FoamUtils.CreateObjData(m_data, m_prim.gameObject);

                animator.SetBool(m_hash_actionBool, true);
            }
        }
        else
        {
            animator.SetBool(m_hash_actionBool, true);
        }
    }
Example #8
0
    public override void PerformAction()
    {
        base.PerformAction();

        // undo redo
        ICommand deleteAction = new CommandDelete(m_data.CurrentSelectionObj, m_data);

        UndoRedoManager.AddNewAction(deleteAction);

        m_data.CurrentSelectionObj.SetActive(false);
        m_data.CurrentSelectionObj.GetComponent <Modelable>().Deselect(); // deselect obj
        FoamUtils.RemoveObjData(m_data, m_data.CurrentSelectionObj);
        //GameObject.Destroy(m_data.CurrentSelectionObj);

        m_data.CurrentSelectionObj = null;
        //FoamUtils.CurrentSelectionObjID = 0;
    }
Example #9
0
    // Update is called once per frame
    protected virtual void Update()
    {
        if (_indexColliderCount == 0)
        {
            m_bg_spriteRenderer.color = FoamUtils.RadialIconBGNormalColor;
            m_text.SetActive(false);
        }

        if (_isActive && _indexDwellCount > 10)
        {
            float scal = FoamUtils.LinearMap(_indexDwellCount, 0, _dwellThreshold, 0.0f, 1.0f);
            m_ripple.transform.localScale = new Vector3(scal, scal, 1.0f);
        }
        else
        {
            m_ripple.transform.localScale = new Vector3(0.0f, 0.0f, 1.0f);
        }
    }
Example #10
0
    public virtual MenuRegion RegionDetection(Vector3 palmPos_curr)
    {
        Vector3 local_curr = Vector3.ProjectOnPlane(this.transform.InverseTransformPoint(palmPos_curr), Vector3.forward) - m_palmPos_init;

        MenuRegion region = FoamUtils.checkMenuRegion(local_curr, m_menu_center, m_bound_UppL, m_bound_UppR, m_bound_LowL, m_bound_LowR, inner_radius);

        if (region == m_currentRegion)
        {
            return(region);
        }
        m_currentRegion = region;

        switch (region)
        {
        case MenuRegion.UPPER:
            this.HighlightSprite(0);
            break;


        case MenuRegion.RIGHT:
            this.HighlightSprite(1);
            break;


        case MenuRegion.LOWER:
            this.HighlightSprite(2);
            break;


        case MenuRegion.LEFT:
            this.HighlightSprite(3);
            break;


        case MenuRegion.MIDDLE:
            this.HighlightSprite(-1);

            break;
        }

        return(region);
    }
Example #11
0
    public void SetUpTabs()
    {
        _tabs = new List <FoamScaleTab>();
        if (!m_targetTrans)
        {
            return;
        }
        Bounds curBound = m_targetTrans.GetComponent <MeshFilter>().sharedMesh.bounds; // or just mesh?

        // up
        _tabs.Add(Instantiate(m_scaleTabPrefab, m_targetTrans.position + m_targetTrans.up * (m_targetTrans.localScale[1] * curBound.size[1] / 2 + FoamUtils.ScaleTabOffset), Quaternion.identity).GetComponent <FoamScaleTab>());
        _tabs[_tabs.Count - 1].SetTarget(this, 0, m_targetTrans, m_targetTrans.up, 1, 1);
        FoamUtils.CreateObjData(m_data, _tabs[_tabs.Count - 1].gameObject);

        // down
        _tabs.Add(Instantiate(m_scaleTabPrefab, m_targetTrans.position - m_targetTrans.up * (m_targetTrans.localScale[1] * curBound.size[1] / 2 + FoamUtils.ScaleTabOffset), Quaternion.identity).GetComponent <FoamScaleTab>());
        _tabs[_tabs.Count - 1].SetTarget(this, 1, m_targetTrans, m_targetTrans.up, 1, -1);
        FoamUtils.CreateObjData(m_data, _tabs[_tabs.Count - 1].gameObject);

        // right
        _tabs.Add(Instantiate(m_scaleTabPrefab, m_targetTrans.position + m_targetTrans.right * (m_targetTrans.localScale[0] * curBound.size[0] / 2 + FoamUtils.ScaleTabOffset), Quaternion.identity).GetComponent <FoamScaleTab>());
        _tabs[_tabs.Count - 1].SetTarget(this, 2, m_targetTrans, m_targetTrans.right, 0, 1);
        FoamUtils.CreateObjData(m_data, _tabs[_tabs.Count - 1].gameObject);

        // left
        _tabs.Add(Instantiate(m_scaleTabPrefab, m_targetTrans.position - m_targetTrans.right * (m_targetTrans.localScale[0] * curBound.size[0] / 2 + FoamUtils.ScaleTabOffset), Quaternion.identity).GetComponent <FoamScaleTab>());
        _tabs[_tabs.Count - 1].SetTarget(this, 3, m_targetTrans, m_targetTrans.right, 0, -1);
        FoamUtils.CreateObjData(m_data, _tabs[_tabs.Count - 1].gameObject);

        // forward
        _tabs.Add(Instantiate(m_scaleTabPrefab, m_targetTrans.position + m_targetTrans.forward * (m_targetTrans.localScale[2] * curBound.size[2] / 2 + FoamUtils.ScaleTabOffset), Quaternion.identity).GetComponent <FoamScaleTab>());
        _tabs[_tabs.Count - 1].SetTarget(this, 4, m_targetTrans, m_targetTrans.forward, 2, 1);
        FoamUtils.CreateObjData(m_data, _tabs[_tabs.Count - 1].gameObject);

        // back
        _tabs.Add(Instantiate(m_scaleTabPrefab, m_targetTrans.position - m_targetTrans.forward * (m_targetTrans.localScale[2] * curBound.size[2] / 2 + FoamUtils.ScaleTabOffset), Quaternion.identity).GetComponent <FoamScaleTab>());
        _tabs[_tabs.Count - 1].SetTarget(this, 5, m_targetTrans, m_targetTrans.forward, 2, -1);
        FoamUtils.CreateObjData(m_data, _tabs[_tabs.Count - 1].gameObject);
    }
        private Dictionary <Face, Vertex> CreateGeodesicVertices(List <Face> icosahedralFaces)
        {
            var geodesicVertices = new Dictionary <Face, Vertex>();

            foreach (var face in icosahedralFaces)
            {
                var centerOfFace = FoamUtils.Center(face);

                var corners           = face.Vertices.Select(vertex => vertex.Position).ToList();
                var clockwiseComparer = new CompareVectorsClockwise(centerOfFace, corners.First());
                var orderedCorners    = corners.OrderBy(corner => corner, clockwiseComparer).ToList();

                var edgeA        = orderedCorners[1].normalized - orderedCorners[0].normalized;
                var edgeB        = orderedCorners[2].normalized - orderedCorners[0].normalized;
                var voronoiPoint = Vector3.Cross(edgeA, edgeB).normalized;

                var geodesicVertex = new Vertex {
                    Position = voronoiPoint
                };
                geodesicVertices.Add(face, geodesicVertex);
            }

            return(geodesicVertices);
        }
Example #13
0
 public void Redo()
 {
     _target.SetActive(false);
     FoamUtils.RemoveObjData(_data, _target);
 }
Example #14
0
 public void Undo()
 {
     _target.SetActive(true);
     FoamUtils.CreateObjData(_data, _target);
 }
Example #15
0
        void OnTriggerEnter(Collider other)
        {
            // Don't want palm
            if (other.name == "palm")
            {
                return;
            }
            if (other.transform.parent == null || other.transform.parent.parent == null)
            {
                return;
            }

            if (other.transform.parent.parent.name == "Hand_l")
            {
                if (other.transform.parent.name != "ring" && other.transform.parent.name != "pinky")
                {
                    m_leftHandFingerIn++;
                }
            }
            else if (other.transform.parent.parent.name == "Hand_r")
            {
                if (other.transform.parent.name != "ring" && other.transform.parent.name != "pinky")
                {
                    m_rightHandFingerIn++;
                }
            }

            // meaningless if it's already entered.
            if (m_entered)
            {
                return;
            }

            // if it's locked, don't change anything
            if (m_ableToExpand == false)
            {
                return;
            }

            // Jiaju FoamAR addition
            //if (!FoamUtils.IsGlobalGrabbing) return;
            if (FoamUtils.ShouldStopGrabCollider(this.transform.parent.gameObject))
            {
                return;
            }


            if (m_leftHandFingerIn >= FINGER_THRESHOLD)
            {
                // Jiaju
                Modelable model = _parentGameObject.GetComponent <Modelable>();
                if (model)
                {
                    model.SetAsSelected();
                }
            }
            else if (m_rightHandFingerIn >= FINGER_THRESHOLD)
            {
                // Jiaju
                Modelable model = _parentGameObject.GetComponent <Modelable>();
                if (model)
                {
                    model.SetAsSelected();
                }

                // Tell it to be grabbed
                if (m_grabObj != null)
                {
                    m_grabObj.OnGrabTriggerEnter(this, false);
                    m_entered = true;
                    Expand(other.transform.parent.parent);
                }
            }
        }
Example #16
0
 public void Redo()
 {
     _target.GetComponent <Modelable>().Deselect();
     _target.SetActive(true);
     FoamUtils.CreateObjData(_data, _target);
 }