예제 #1
0
    // Use this for initialization
    void Start()
    {
        FmodEventSystemHandle handle = new FmodEventSystemHandle();

        ReverbSettings.FmodReverbPreset globalReverbSetting = FmodReverb.GLOBAL_REVERB;
        m_globalReverb = FmodReverb.CreateInstance(typeof(FmodReverb)) as FmodReverb;
        GameObject obj = GameObject.Instantiate(Resources.Load("FmodReverbZone")) as GameObject;

        m_globalReverbZone = obj.GetComponent <FmodReverbZone>();

        if (m_globalReverbZone == null)
        {
            Debug.LogError("Prefab for FmodReverbZone should have component FmodReverbZone !");
        }
        m_globalReverbZone.SetGlobal(true);
        m_globalReverbZone.name = "Global Reverb";
        m_globalReverb.Initialize(globalReverbSetting.Name, globalReverbSetting.Properties);
        m_globalReverbZone.SetReverb(m_globalReverb);
        m_globalReverbZone.Priority = 0;
        m_globalReverbZone.fadeTime = 0;
        m_currentZone = m_globalReverbZone;
        StackReverb(m_currentZone);
        handle.getEventSystem().setReverbImmediate(globalReverbSetting.Properties);
        handle.Dispose();
        m_startProperties = globalReverbSetting.Properties;
        m_curProperties   = globalReverbSetting.Properties;
        m_endProperties   = globalReverbSetting.Properties;
    }
 public void OnDestroy()
 {
     if (m_handle != null)
     {
         m_handle.Dispose();
         m_handle = null;
     }
 }
예제 #3
0
    public void EnableReverb()
    {
        if (m_reverb != null && m_collider != null) {
            FmodEventSystemHandle handle = new FmodEventSystemHandle();

            handle.getEventSystem().setReverb(this);
            handle.Dispose();
        }
    }
예제 #4
0
    public void DisableReverb()
    {
        if (m_reverb != null && m_collider != null)
        {
            FmodEventSystemHandle handle = new FmodEventSystemHandle();

            handle.getEventSystem().unsetReverb(this);
            handle.Dispose();
        }
    }
예제 #5
0
 public void Clean()
 {
     CleanRuntimeEvent();
     if (m_eventSystemHandle != null)
     {
         m_eventSystemHandle.Dispose();
         m_eventSystemHandle = null;
     }
     if (m_selfHandle.IsAllocated)
     {
         m_selfHandle.Free();
     }
 }
예제 #6
0
    public void UpdateGlobalReverb()
    {
        if (m_currentZone == m_globalReverbZone && m_globalReverbZone != null && m_globalReverb != null) {
            FmodEventSystemHandle handle = new FmodEventSystemHandle();
            ReverbSettings.FmodReverbPreset globalReverbSetting = ReverbSettings.Get().CurPreset;

            m_globalReverb = m_globalReverbZone.GetReverb();
            m_globalReverb.Initialize(globalReverbSetting.Name, globalReverbSetting.Properties);
            m_curProperties = m_globalReverb.getProperties();
            m_endProperties = m_curProperties;
            handle.getEventSystem().setReverbImmediate(m_curProperties);
            handle.Dispose();
        }
    }
예제 #7
0
    public void UpdateGlobalReverb()
    {
        if (m_currentZone == m_globalReverbZone && m_globalReverbZone != null && m_globalReverb != null)
        {
            FmodEventSystemHandle           handle = new FmodEventSystemHandle();
            ReverbSettings.FmodReverbPreset globalReverbSetting = ReverbSettings.Get().CurPreset;

            m_globalReverb = m_globalReverbZone.GetReverb();
            m_globalReverb.Initialize(globalReverbSetting.Name, globalReverbSetting.Properties);
            m_curProperties = m_globalReverb.getProperties();
            m_endProperties = m_curProperties;
            handle.getEventSystem().setReverbImmediate(m_curProperties);
            handle.Dispose();
        }
    }
예제 #8
0
    // Update is called once per frame
    void Update()
    {
        if (m_isInTransition)
        {
            FmodEventSystemHandle handle = new FmodEventSystemHandle();

            m_curTransitionTime += Time.deltaTime;
            if (m_curTransitionTime >= m_curTransitionDuration)
            {
                m_curTransitionTime = m_curTransitionDuration;
                m_isInTransition    = false;
            }
            m_curProperties = FmodReverb.getLerpedProperties(m_startProperties, m_endProperties, m_curTransitionTime / m_curTransitionDuration);
            handle.getEventSystem().setReverbImmediate(m_curProperties);
            handle.Dispose();
        }
    }
예제 #9
0
    private void _updateReverbStack()
    {
        if (m_reverbStack.Count == 0)
        {
            return;
        }
        m_reverbStack.Sort((x, y) => (int)(y.Priority).CompareTo((int)x.Priority));
        FmodReverbZone newCurrentZone = m_reverbStack[0];


        if (m_currentZone != newCurrentZone)           // we should transition
        {
            float fadeInTime = newCurrentZone.fadeTime;

            // if we are transitionning from a zone back to the global zone, we use the previous fade time
            // to fade out
            if (newCurrentZone == m_globalReverbZone && m_currentZone != m_globalReverbZone)
            {
                m_globalReverb.Initialize(m_globalReverb.getName(), FmodReverb.GLOBAL_REVERB.Properties);
                fadeInTime = m_currentZone.fadeTime;
            }
            FMOD.REVERB_PROPERTIES targetProps = newCurrentZone.GetReverb().getProperties();
            if (fadeInTime <= 0)
            {
                FmodEventSystemHandle handle = new FmodEventSystemHandle();

                m_isInTransition  = false;
                m_startProperties = m_curProperties;
                m_endProperties   = targetProps;
                handle.getEventSystem().setReverbImmediate(targetProps);
                handle.Dispose();
            }
            else
            {
                m_isInTransition        = true;
                m_startProperties       = m_curProperties;
                m_endProperties         = targetProps;
                m_curTransitionDuration = fadeInTime;
                m_curTransitionTime     = 0;
            }
            m_currentZone = newCurrentZone;
        }
    }
예제 #10
0
    public void Initialize(string fileTotalPath)
    {
        FmodEventSystemHandle eventSystemHandle = new FmodEventSystemHandle();
        string filePath;
        string fileName;

        System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match(fileTotalPath, @"(.*)/([^/]+)$");
        if (match.Success)
        {
            filePath = match.Groups[1].Value;
            fileName = match.Groups[2].Value;
        }
        else
        {
            throw new Exception("ERROR: Can't extract name and path to .fev from the string '" + fileTotalPath + "'");
        }
        m_fileName = fileName;
        m_filePath = filePath;
        m_dateTime = System.DateTime.UtcNow;
        name       = m_filePath + "/" + m_fileName;
        m_events   = eventSystemHandle.getEventSystem().loadEventsFromFile(filePath, fileName, this);
        eventSystemHandle.Dispose();
    }
예제 #11
0
    // Use this for initialization
    void Start()
    {
        FmodEventSystemHandle handle = new FmodEventSystemHandle();
        ReverbSettings.FmodReverbPreset globalReverbSetting = FmodReverb.GLOBAL_REVERB;
        m_globalReverb = FmodReverb.CreateInstance(typeof(FmodReverb)) as FmodReverb;
        GameObject obj = GameObject.Instantiate(Resources.Load("FmodReverbZone")) as GameObject;
        m_globalReverbZone = obj.GetComponent<FmodReverbZone>();

        if (m_globalReverbZone == null) {
            Debug.LogError("Prefab for FmodReverbZone should have component FmodReverbZone !");
        }
        m_globalReverbZone.SetGlobal(true);
        m_globalReverbZone.name = "Global Reverb";
        m_globalReverb.Initialize(globalReverbSetting.Name, globalReverbSetting.Properties);
        m_globalReverbZone.SetReverb(m_globalReverb);
        m_globalReverbZone.Priority = 0;
        m_globalReverbZone.fadeTime = 0;
        m_currentZone = m_globalReverbZone;
        StackReverb (m_currentZone);
        handle.getEventSystem().setReverbImmediate(globalReverbSetting.Properties);
        handle.Dispose();
        m_startProperties = globalReverbSetting.Properties;
        m_curProperties = globalReverbSetting.Properties;
        m_endProperties = globalReverbSetting.Properties;
    }
예제 #12
0
    private void _updateReverbStack()
    {
        if (m_reverbStack.Count == 0) {
            return ;
        }
        m_reverbStack.Sort((x, y) => (int)(y.Priority).CompareTo((int)x.Priority));
        FmodReverbZone newCurrentZone = m_reverbStack[0];

        if (m_currentZone != newCurrentZone) { // we should transition
            float fadeInTime = newCurrentZone.fadeTime;

            // if we are transitionning from a zone back to the global zone, we use the previous fade time
            // to fade out
            if (newCurrentZone == m_globalReverbZone && m_currentZone != m_globalReverbZone) {
                m_globalReverb.Initialize(m_globalReverb.getName(), FmodReverb.GLOBAL_REVERB.Properties);
                fadeInTime = m_currentZone.fadeTime;
            }
            FMOD.REVERB_PROPERTIES targetProps = newCurrentZone.GetReverb().getProperties();
            if (fadeInTime <= 0) {
                FmodEventSystemHandle handle = new FmodEventSystemHandle();

                m_isInTransition = false;
                m_startProperties = m_curProperties;
                m_endProperties = targetProps;
                handle.getEventSystem().setReverbImmediate(targetProps);
                handle.Dispose();
            } else {
                m_isInTransition = true;
                m_startProperties = m_curProperties;
                m_endProperties = targetProps;
                m_curTransitionDuration = fadeInTime;
                m_curTransitionTime = 0;
            }
            m_currentZone = newCurrentZone;
        }
    }
예제 #13
0
    // Update is called once per frame
    void Update()
    {
        if (m_isInTransition) {
            FmodEventSystemHandle handle = new FmodEventSystemHandle();

            m_curTransitionTime += Time.deltaTime;
            if (m_curTransitionTime >= m_curTransitionDuration) {
                m_curTransitionTime = m_curTransitionDuration;
                m_isInTransition = false;
            }
            m_curProperties = FmodReverb.getLerpedProperties(m_startProperties, m_endProperties, m_curTransitionTime / m_curTransitionDuration);
            handle.getEventSystem().setReverbImmediate(m_curProperties);
            handle.Dispose();
        }
    }
예제 #14
0
    public void Initialize(string fileTotalPath)
    {
        FmodEventSystemHandle eventSystemHandle = new FmodEventSystemHandle();
        string filePath;
        string fileName;

        System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match(fileTotalPath, @"(.*)/([^/]+)$");
        if (match.Success)
        {
            filePath = match.Groups[1].Value;
            fileName = match.Groups[2].Value;
        } else {
            throw new Exception("ERROR: Can't extract name and path to .fev from the string '" + fileTotalPath + "'");
        }
        m_fileName = fileName;
        m_filePath = filePath;
        m_dateTime = System.DateTime.UtcNow;
        name = m_filePath + "/" + m_fileName;
        m_events = eventSystemHandle.getEventSystem().loadEventsFromFile(filePath, fileName, this);
        eventSystemHandle.Dispose();
    }