Example #1
0
    //	private float YPosition {
    //		get { return (_playerxyTransform.position.y + _playerzyTransform.position.y)/2f; }
    //	}

    public void Rotate(float direction)
    {
        if (_isRotating)
        {
            return;
        }
        RaycastHit[] hitInfo     = new RaycastHit[4];
        bool[]       didHit      = new bool[4];
        float        maxDistance = Mathf.Infinity;
        Collider     hitCollider = null;
        Vector3      pivot       = SnappingMath.SnapToRoundedOffset(_transform.position, _pivotGridPrecision);

        didHit [0] = Physics.Raycast(pivot + Vector3.up * _raycastEpsilon + Vector3.right * _playerxyCollider.size.x / 2f, -Vector3.up, out hitInfo [0]);
        didHit [1] = Physics.Raycast(pivot + Vector3.up * _raycastEpsilon + Vector3.left * _playerxyCollider.size.x / 2f, -Vector3.up, out hitInfo [1]);
        didHit [2] = Physics.Raycast(pivot + Vector3.up * _raycastEpsilon + Vector3.forward * _playerzyCollider.size.x / 2f, -Vector3.up, out hitInfo [2]);
        didHit [3] = Physics.Raycast(pivot + Vector3.up * _raycastEpsilon + Vector3.back * _playerzyCollider.size.x / 2f, -Vector3.up, out hitInfo [3]);
        for (int i = 0; i < 4; i++)
        {
            float currDistance = hitInfo [i].distance;
            if (didHit [i] && currDistance < maxDistance)
            {
                maxDistance = currDistance;
                hitCollider = hitInfo [i].collider;
            }
        }
        if (hitCollider == null)
        {
            Debug.LogError("HIT NOTHING!");
        }
        else
        {
            BlockInformation blockInfo = hitCollider.GetComponent <BlockInformation> ();
            if (hitCollider.transform.parent.name != "Planes" && blockInfo != null && blockInfo.CanRotate)
            {
                _activeRotator = blockInfo.MyRotatable;
                _activeRotator.CharacterDriveRotation(direction, _activeRotator.transform.position, _rotationDuration);
                _isRotating = true;
            }
        }
    }