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); }
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>())); } } }