Exemple #1
0
    private PropagatingSpeaker GetNextFree(int required)
    {
        for (int i = 0; i < audioSourcePool.Length; i++)
        {
            if (!audioSourcePool[poolIndex].Connected)
            {
                PropagatingSpeaker ps = audioSourcePool[poolIndex];
                ps.Connected = true;
                return(ps);
            }

            poolIndex = (poolIndex + 1) % AudioClipPoolSize;
        }

        // Run "Garbage Collector" before extending pool
        if (GarbageCollect(required))
        {
            poolIndex = 0;
            return(GetNextFree(required));
        }
        else
        {
            if (AutoExtendAudioPool)
            {
                Debug.Log("Extending Audio Pool, initial size was not enough");
                ExtendPool(required);
                return(GetNextFree(required));
            }
            else
            {
                Debug.Log("Propagating Audio Pool ran out of audio sources");
                return(null);
            }
        }
    }
Exemple #2
0
    private bool ConnectSpeakers(PropagatingAudioSource host)
    {
        if (!IsConnected(host))
        {
            PropagatingSoundGateway[] gateways = RoomToNeighbourPositions[host.HostRoom];
            PropagatingSpeaker[]      speakers = new PropagatingSpeaker[gateways.Length];

            for (int i = 0; i < speakers.Length; i++)
            {
                PropagatingSpeaker speaker = GetNextFree(speakers.Length);
                if (speaker == null)
                {
                    FreeSpeakers(speakers);
                    return(false);
                }
                else
                {
                    speaker.Dampening = gateways[i].Dampening;
                    speakers[i]       = speaker;
                }
            }

            // All required speakers are available - position them correctly
            for (int i = 0; i < speakers.Length; i++)
            {
                speakers[i].audioSource.transform.position = gateways[i].SoundTarget;
                SpeakerToOrigin[speakers[i]] = host;
            }

            ConnectedSpeakers[host] = speakers;
        }

        return(true);
    }