processes a stream's events.
| 69 | |
| 70 | // processes a stream's events. |
| 71 | void oms_stream::Process(float frmtime) { |
| 72 | oms_q_evt evt, evt2 = {}; // event for use |
| 73 | |
| 74 | if (m_timer > 0.0f) |
| 75 | m_timer -= frmtime; |
| 76 | |
| 77 | // invalidate current process result. |
| 78 | m_valid_result = false; |
| 79 | |
| 80 | if (!processCommand()) |
| 81 | return; |
| 82 | |
| 83 | // process queue events. |
| 84 | if (!m_q.recv(&evt)) |
| 85 | return; |
| 86 | |
| 87 | switch (evt.cmd) { |
| 88 | case OMS_STRM_LOAD: |
| 89 | processQLoad((const char *)evt.parm.p); |
| 90 | break; |
| 91 | |
| 92 | case OMS_STRM_FADEOUT: |
| 93 | // reset timer for fadeout to 0 volume |
| 94 | STREAM_COMMANDI(OMS_STRM_FADEOUT); |
| 95 | STREAM_TIMER(evt.parm.f); |
| 96 | break; |
| 97 | |
| 98 | case OMS_STRM_FADEIN: |
| 99 | // fade in to volume m_maxvol |
| 100 | STREAM_COMMANDI(OMS_STRM_FADEIN); |
| 101 | STREAM_TIMER(evt.parm.f); |
| 102 | break; |
| 103 | |
| 104 | case OMS_STRM_STOP: |
| 105 | STREAM_COMMANDI(OMS_STRM_STOP); |
| 106 | m_stream.Stop(); |
| 107 | break; |
| 108 | |
| 109 | case OMS_STRM_FREE: |
| 110 | STREAM_COMMANDI(OMS_STRM_FREE); |
| 111 | m_stream.Close(); |
| 112 | break; |
| 113 | |
| 114 | case OMS_STRM_PLAY: |
| 115 | // process queue events. |
| 116 | if (!m_q.recv(&evt2)) { |
| 117 | Int3(); |
| 118 | } |
| 119 | STREAM_COMMANDI(OMS_STRM_PLAY, evt2.parm.i); |
| 120 | m_stream.SetLoopCount(evt2.parm.i); |
| 121 | m_stream.SetVolume(evt.parm.f); |
| 122 | m_stream.Play(); |
| 123 | break; |
| 124 | |
| 125 | case OMS_STRM_SWITCH: |
| 126 | STREAM_COMMANDP(OMS_STRM_SWITCH, evt.parm.p); |
| 127 | m_stream.Stop(true, &m_data.i); |
| 128 | mprintf(0, "%d-%d ", m_data.i, m_stream.State()); |