void CBaseStreamControl::NotifyFilterState( FILTER_STATE new_state, REFERENCE_TIME tStart ) { CAutoLock lck(&m_CritSec); // or we will get confused if (m_FilterState == new_state) return; switch (new_state) { case State_Stopped: DbgLog((LOG_TRACE,2,TEXT("Filter is STOPPED"))); // execute any pending starts and stops in the right order, // to make sure all notifications get sent, and we end up // in the right state to begin next time (??? why not?) if (m_tStartTime != MAX_TIME && m_tStopTime == MAX_TIME) { ExecuteStart(); } else if (m_tStopTime != MAX_TIME && m_tStartTime == MAX_TIME) { ExecuteStop(); } else if (m_tStopTime != MAX_TIME && m_tStartTime != MAX_TIME) { if (m_tStartTime <= m_tStopTime) { ExecuteStart(); ExecuteStop(); } else { ExecuteStop(); ExecuteStart(); } } // always start off flowing when the graph starts streaming // unless told otherwise m_StreamState = STREAM_FLOWING; m_FilterState = new_state; break; case State_Running: DbgLog((LOG_TRACE,2,TEXT("Filter is RUNNING"))); m_tRunStart = tStart; // fall-through default: // case State_Paused: m_FilterState = new_state; } // unblock! m_StreamEvent.Set(); }
void LompatKe (InfoPlayer *X, AddressOfPetak Pt) /*Mengubah posisi pemain menuju ke petak 'pt' karena berhenti di world travel*/ { (*X).posisi = Pt; if(Info(Pt).id_petak == 1) ExecuteStart(); else if(Info(Pt).id_petak == 3) GetBonus(); else if(Info(Pt).id_petak == 9) Info(global.currentPlayer).penjara = true; else if(Info(Pt).id_petak == 13 || Info(Pt).id_petak == 21 || Info(Pt).id_petak == 29) DrawCards(); else if(Info(Pt).id_petak == 31) PayTax(); else if(isKota(Pt) || isTempatWisata(Pt)) BayarSewa(); }
enum CBaseStreamControl::StreamControlState CBaseStreamControl::CheckSampleTimes ( __in const REFERENCE_TIME * pSampleStart, __in const REFERENCE_TIME * pSampleStop ) { CAutoLock lck(&m_CritSec); ASSERT(!m_bIsFlushing); ASSERT(pSampleStart && pSampleStop); // Don't ask me how I came up with the code below to handle all 19 cases // - DannyMi if (m_tStopTime >= *pSampleStart) { if (m_tStartTime >= *pSampleStop) return m_StreamState; // cases 8 11 12 15 17 18 19 if (m_tStopTime < m_tStartTime) ExecuteStop(); // case 10 ExecuteStart(); // cases 3 5 7 9 13 14 return m_StreamState; } if (m_tStartTime >= *pSampleStop) { ExecuteStop(); // cases 6 16 return m_StreamState; } if (m_tStartTime <= m_tStopTime) { ExecuteStart(); ExecuteStop(); return m_StreamState; // case 1 } else { ExecuteStop(); ExecuteStart(); return m_StreamState; // cases 2 4 } }
void MajuNLangkah (InfoPlayer *X, ListPetak L, int N) /*Mengubah posisi pemain sebanyak N langkah kedepan. Jumlah langkah tergantung dari roll dadu (N>=2 dan N<=12). */ { int i; AddressOfPetak P = (*X).posisi; for(i=0; i<N; i++) { P = Next(P); if(Info(P).id_petak == 1) ExecuteStart(); } (*X).posisi = P; printf("\nAnda melangkah dan sampai ke petak "); PrintKata(InfoPetak(P).nama_petak); puts(""); if(Info(P).id_petak == 3) GetBonus(); else if(Info(P).id_petak == 9) MasukPenjara(X, L); else if(Info(P).id_petak == 13 || Info(P).id_petak == 21 || Info(P).id_petak == 29) DrawCards(); else if(Info(P).id_petak == 31) PayTax(); else if(isKota(P) || isTempatWisata(P)) { printf("Saat ini anda berada di:\n"); PrintPetak(Info(Info(global.currentPlayer).posisi).nama_petak); BayarSewa(); } else if (isWorldCup(P)) { printf("Saat ini anda berada di Petak World Cup\n"); } else if (isWorldTravel(P)) { printf("Saat ini anda berada di Petak World Travel.\n"); } }