Exemple #1
0
        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);
        }
Exemple #2
0
        /// <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++;
                    }
                }
            }
        }