/// <summary> /// Spawns balloons. /// </summary> /// <param name="balloonCount">Number of balloons to spawn.</param> private void SpawnBalloons(int balloonCount) { if (balloonCount <= 0) { return; } // Spawn balloons in a clump within the spawn area Vector3 centerPos = new Vector3(Random.Range(m_spawnAreaMin.position.x, m_spawnAreaMax.position.x), Random.Range(m_spawnAreaMin.position.y, m_spawnAreaMax.position.y), 0.0f); // Spawn and initialize center balloon Balloon centerBalloon = SpawnBalloon(centerPos); float colorFactor = 1.0f; const float DELTA_COLOR_FACTOR = 0.03f; int sortingOrder = balloonCount; centerBalloon.Initialize(m_collectedBalloonPositions[m_balloons.Count - 1].position, m_hand.BalloonGrabPos, colorFactor, sortingOrder); // Each successive balloon has a darker shade than the previous one colorFactor -= DELTA_COLOR_FACTOR; // Each successive balloon is placed behind the previous one sortingOrder--; // Spawn the other balloons (if any) while (m_balloons.Count < balloonCount) { // Spawn balloons within a certain distance from the center float distFromCenter = Random.Range(m_balloonDistMin, m_balloonDistMax); Vector3 dirFromCenter = new Vector3(Random.Range(-1.0f, 1.0f), Random.Range(-1.0f, 1.0f), 0.0f); Vector3 pos = centerPos + distFromCenter * dirFromCenter.normalized; // Make sure there is enough space between balloons bool isSpaced = true; float minDistSq = m_balloonDistMin * m_balloonDistMin; foreach (Balloon balloon in m_balloons) { if ((balloon.transform.position - pos).sqrMagnitude < minDistSq) { isSpaced = false; break; } } // If not spaced enough from other balloons, re-randomize a new position if (!isSpaced) { continue; } // Spawn and initialize balloon Balloon newBalloon = SpawnBalloon(pos); newBalloon.Initialize(m_collectedBalloonPositions[m_balloons.Count - 1].position, m_hand.BalloonGrabPos, colorFactor, sortingOrder); // Each successive balloon has a darker shade than the previous one colorFactor -= DELTA_COLOR_FACTOR; // Each successive balloon is placed behind the previous one sortingOrder--; } }
private void Start() { controller = GetComponent <SteamVR_TrackedController>(); controller.TriggerClicked += OnTriggerClicked; controller.TriggerUnclicked += OnTriggerUnlicked; controller.PadTouched += OnPadTouched; controller.PadUntouched += OnPadUntouched; balloon.Initialize(balloonSpawnTarget); }