protected virtual MMRadioReceiver InstantiateBlock(Vector3 newPosition, string newName) { // instantiating the block and setting its name _receiver = Instantiate(GroundPrefabToInstantiate, newPosition, Quaternion.identity, ParentContainer); _receiver.name = newName; // setting its receiver settings float distanceToDancer = Vector3.Distance(Dancer.transform.position + DancerOffset, newPosition); float maxDistance = Mathf.Max(NumberOfColumns * Depth, NumberOfRows * Width) / 2f; float remappedDistance = MMMaths.Remap(distanceToDancer, 0f, maxDistance, 0f, 1f); float newAmplitude = Amplitude.Evaluate(remappedDistance); float random = Random.Range(MinRandom, MaxRandom); newAmplitude *= random; newAmplitude *= AmplitudeMultiplier; int channel = Random.Range(0, 2); _receiver.MinRandomLevelMultiplier = newAmplitude; _receiver.MaxRandomLevelMultiplier = newAmplitude; _receiver.GenerateRandomLevelMultiplier(); _receiver.Channel = channel; // setting its material float randomMaterial = Random.Range(0f, 100f); if (randomMaterial < 80f) { _receiver.GetComponent <MeshRenderer>().material = GroundMaterial; } else { if (randomMaterial < 90f) { _receiver.GetComponent <MeshRenderer>().material = GroundMaterialAlt1; } else { _receiver.GetComponent <MeshRenderer>().material = GroundMaterialAlt2; } } // setting its position _receiver.transform.position = newPosition; return(_receiver); }
/// <summary> /// Instantiates cubes to form a ground and randomizes their settings /// </summary> protected virtual void GenerateGround() { int counter = 0; List <GameObject> list = new List <GameObject>(); for (int i = 0; i < ParentContainer.transform.childCount; i++) { list.Add(ParentContainer.transform.GetChild(i).gameObject); } foreach (GameObject child in list) { counter++; if (Application.isPlaying) { Destroy(child.gameObject); } else { DestroyImmediate(child.gameObject); } } _counter = 0; // we instantiate our ground grid for (int i = 0; i < NumberOfRows; i++) { for (int j = 0; j < NumberOfColumns; j++) { _wipPosition.x = i * Width; _wipPosition.y = 0; _wipPosition.z = j * Depth; _wipPosition += Offset; _wipName = "GroundBlock_" + _counter; InstantiateBlock(_wipPosition, _wipName); _counter++; } } // we generate some floating cubes too for (int i = 0; i < NumberOfRows; i++) { for (int j = 0; j < NumberOfColumns; j++) { _wipPosition.x = i * Width; _wipPosition.y = Random.Range(MinHeight, MaxHeight); _wipPosition.z = j * Depth; _wipPosition += Offset; if ((MMMaths.Chance(FloatingBlockChance)) && (Vector3.Distance(_wipPosition, Dancer.transform.position) > MinDistanceToDancer)) { _wipName = "AirBlock_" + _counter; _receiver = InstantiateBlock(_wipPosition, _wipName); _receiver.transform.localScale = _receiver.transform.localScale * Random.Range(MinScale, MaxScale); _receiver.MinRandomLevelMultiplier *= 3f; _receiver.MaxRandomLevelMultiplier *= 3f; MMAutoRotate autoRotate = _receiver.gameObject.AddComponent <MMAutoRotate>(); autoRotate.RotationSpeed = new Vector3(0f, 100f, 0f); _counter++; } } } }