// 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; } } }
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); }
// *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); }
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>(); }
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; } }
// 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); } }
// 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); } }
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; }
// 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); } }
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); }
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); }
public void Redo() { _target.SetActive(false); FoamUtils.RemoveObjData(_data, _target); }
public void Undo() { _target.SetActive(true); FoamUtils.CreateObjData(_data, _target); }
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); } } }
public void Redo() { _target.GetComponent <Modelable>().Deselect(); _target.SetActive(true); FoamUtils.CreateObjData(_data, _target); }