// Use this for initialization void Start() { _controlledTransformOriginalScale = ControlledTransform.localScale; _originalScale = transform.localScale; _inContact = false; _pickableScript = GetComponent <IPickable>(); _rbInContactList = new HashSet <Rigidbody>(); _rbToStartAngleDict = new Dictionary <Rigidbody, float>(); _lastPickState = false; _selfColliderToTypeDict = new Dictionary <Collider, ColliderType>(); FindChildColliders(); _curSquashyState = SquashyState.Idle; _pressingThreshFromIdle = 0.9f * _controlledTransformOriginalScale.x; _pressingLocalScaleMin = _controlledTransformOriginalScale.x; _releasingLocalScaleMax = 0; _controlledTransformTargetLocalScale = _controlledTransformOriginalScale; }
private void SquashyStateTransition() { switch (_curSquashyState) { case SquashyState.Idle: if (ControlledTransform.localScale.x < _pressingThreshFromIdle) { _curSquashyState = SquashyState.Pressing; } break; case SquashyState.Pressing: if (ControlledTransform.localScale.x >= _pressingLocalScaleMin + 0.1f * _controlledTransformOriginalScale.x) { _curSquashyState = SquashyState.Releasing; _pressingLocalScaleMin = _controlledTransformOriginalScale.x; } else { _pressingLocalScaleMin = Mathf.Min(ControlledTransform.localScale.x, _pressingLocalScaleMin); } break; case SquashyState.Releasing: if (ControlledTransform.localScale.x <= _releasingLocalScaleMax - 0.1f * _controlledTransformOriginalScale.x) { _curSquashyState = SquashyState.Pressing; _releasingLocalScaleMax = 0; } else if (ControlledTransform.localScale.x > _controlledTransformOriginalScale.x - 0.00001f) { _curSquashyState = SquashyState.Idle; _releasingLocalScaleMax = 0; } else { _releasingLocalScaleMax = Mathf.Max(ControlledTransform.localScale.x, _releasingLocalScaleMax); } break; } }