Esempio n. 1
0
    /// <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--;
        }
    }
Esempio n. 2
0
    private void Start()
    {
        controller = GetComponent <SteamVR_TrackedController>();

        controller.TriggerClicked   += OnTriggerClicked;
        controller.TriggerUnclicked += OnTriggerUnlicked;
        controller.PadTouched       += OnPadTouched;
        controller.PadUntouched     += OnPadUntouched;
        balloon.Initialize(balloonSpawnTarget);
    }