Exemplo n.º 1
0
    private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = new Ray(transform.position, Vector3.forward);
            if (Physics.Raycast(ray, out RaycastHit hitInfo))
            {
                if (hitInfo.collider.TryGetComponent(out Block block))
                {
                    _rigidbody.isKinematic = false;
                    _rigidbody.velocity    = Vector3.zero;
                }
                else if (hitInfo.collider.TryGetComponent(out Segment segment))
                {
                    _rigidbody.isKinematic = true;
                    _rigidbody.velocity    = Vector3.zero;
                }
                else if (hitInfo.collider.TryGetComponent(out Finish finish))
                {
                    _rigidbody.isKinematic = true;
                    _rigidbody.velocity    = Vector3.zero;
                    FinishBlock?.Invoke();
                }
            }
        }

        if (Input.GetMouseButton(0))
        {
            if (_currentStick == null && _rigidbody.isKinematic == true)
            {
                _power        = 0;
                _currentStick = CreateStick();
            }

            _power += Time.deltaTime;
            _power  = Mathf.Clamp(_power, 0f, 1f);

            if (_currentStick != null)
            {
                _currentStick.UpdateBlend(_power);
            }
        }

        if (Input.GetMouseButtonUp(0))
        {
            transform.parent = null;
            if (_currentStick != null)
            {
                _rigidbody.isKinematic = false;
                _rigidbody.AddForce(Vector3.up * _jumpForce * _power, ForceMode.Impulse);

                Destroy(_currentStick.gameObject);
            }

            _currentStick      = null;
            transform.rotation = Quaternion.identity;// new Quaternion(0, 0, 0, 0);
            transform.position = new Vector3(transform.position.x, transform.position.y, -4f);
        }
    }