Example #1
0
    private void BatchGear(BackgroundGear gear)
    {
        float randomValue = Random.value;

        if (randomValue <= 0.33f)
        {
            gearBatch1.Add(gear);
        }

        else if (randomValue <= 0.67f)
        {
            gearBatch2.Add(gear);
        }

        else
        {
            gearBatch3.Add(gear);
        }
    }
Example #2
0
    private void RunGearGenerationRoutine(bool isOnTheLeft)
    {
        float globalXLimit           = PlatformGenerator.Instance.GlobalXLimit;
        int   numGearsToSpawnOnPlane = config.NumGearsToSpawnOnEachSide;
        int   numCandidates          = config.GearGenerationNumCandidates;

        Vector3[] gearPositions = new Vector3[numGearsToSpawnOnPlane];

        Vector3 cameraPosition = CameraController.Instance.Position;

        float startY = cameraPosition.y + config.GearGenerationYStartOffset;
        float endY   = startY + config.GearGenerationYCap;

        float startZ = cameraPosition.z;
        float endZ   = startZ + RenderSettings.fogEndDistance + config.GearGenerationEndZPadding;

        gearPositions[0] = new Vector3(isOnTheLeft ? -globalXLimit - config.EnvironmentHorizontalPadding : globalXLimit + config.EnvironmentHorizontalPadding, Random.Range(startY, endY), Random.Range(startZ, endZ));

        for (int i = 1; i < numGearsToSpawnOnPlane; i++)
        {
            Vector3 bestCandidate = Vector3.zero;
            float   bestDistance  = 0f;

            for (int j = 0; j < numCandidates; j++)
            {
                Vector3 candidate       = new Vector3(isOnTheLeft ? -globalXLimit - config.EnvironmentHorizontalPadding : globalXLimit + config.EnvironmentHorizontalPadding, Random.Range(startY, endY), Random.Range(startZ, endZ));
                float   closestDistance = 9999f;

                for (int k = 0; k < i; k++)
                {
                    float distance = (candidate - gearPositions[k]).sqrMagnitude;

                    if (distance < closestDistance)
                    {
                        closestDistance = distance;
                    }
                }

                if (closestDistance > bestDistance)
                {
                    bestCandidate = candidate;
                    bestDistance  = closestDistance;
                }
            }

            gearPositions[i] = bestCandidate;
        }

        for (int i = 0; i < gearPositions.Length; i++)
        {
            GameObject     gear          = Instantiate(GetRandomGearModel());
            BackgroundGear gearComponent = gear.GetComponent <BackgroundGear>();

            // Shake up the x's:
            gearPositions[i] = gearPositions[i] + new Vector3(Random.Range(0f, config.GearGenerationMaxXDeviation) * (isOnTheLeft ? -1f : 1f), 0f, 0f);

            gear.transform.position = gearPositions[i];
            gear.transform.rotation = Quaternion.Euler(0f, 90f, 0f);

            float scale = Random.Range(config.GearGenerationMinGearScale, config.GearGenerationMaxGearScale);
            gear.transform.localScale = Vector3.one * scale;

            BatchGear(gearComponent);
        }
    }
Example #3
0
 public void OnBackgroundGearWentOutOfView(BackgroundGear backgroundGear)
 {
     backgroundGear.transform.Translate(0f, 0f, config.GearGenerationZOffscreenTranslation, Space.World);
 }