Example #1
0
    public void MergeCubes(CubeData cube0, CubeData cube1)
    {
        if (cube0 == null || cube1 == null)
        {
            return;
        }

        int newCubeID = GetPowerOfTwoByCubeNumber(cube0.GetCubeNumber());

        if (newCubeID > _maxCubeIndexOnMap)
        {
            _maxCubeIndexOnMap = newCubeID;
        }

        GameObject _newCubePrefab = _cubePrefabs.GetCubePrefab(newCubeID);

        Vector3 newCubePosition = cube1.transform.position;

        Destroy(cube0.gameObject);
        Destroy(cube1.gameObject);

        GameObject newCube = Instantiate(_newCubePrefab, newCubePosition, Quaternion.Euler(Random.Range(-180f, 180f), Random.Range(-180f, 180f), Random.Range(-180f, 180f)), _cubesParent);

        newCube.GetComponent <Rigidbody>()?.AddForce((Vector3.up + Vector3.forward + Random.insideUnitSphere) * MergingPower, ForceMode.Impulse);

        SpawnMergingEffect(newCube.transform.position);

        CheckForWin(newCubeID);
    }
Example #2
0
    private void OnCollisionEnter(Collision collision)
    {
        CubeData cubeData = collision.gameObject.GetComponent <CubeData>();

        if (cubeData != null && !_isCollided)
        {
            GetComponent <Rigidbody>().useGravity   = true;
            GetComponent <CubeData>().IsJustSpawned = false;

            if (cubeData.GetCubeNumber() == GetComponent <CubeData>().GetCubeNumber())
            {
                StartCoroutine(TimerToMerging(cubeData, GetComponent <CubeData>()));
            }
        }
    }