virtual dword GetPlayPos() const{ if(!inited) return 0; if(finished) return GetPlayTime(); dword ret; #ifdef USE_OPTIONAL_POSITIONING const_cast<C_simple_sound_player_imp*>(this)->InitLib(); if(mca_GetPosition){ TTimeIntervalMicroSeconds p; #ifdef _DEBUG (plr->*mca_GetPosition)(p); #else mca_GetPosition(plr, p); #endif ret = (p.Int64()/TInt64(1000)).Low(); }else ret = 0; #else TTimeIntervalMicroSeconds p; plr->GetPosition(p); ret = dword(p.Int64()/TInt64(1000)); #endif return Min(ret, GetPlayTime()); }
virtual bool IsDone() const{ if(!snd->IsPlaying() && GetPlayPos()==GetPlayTime()){ //finish with some delay, so that hw has time to play the sound if(!end_play_time) end_play_time = GetTickTime(); if(GetTickTime()-end_play_time > 1000) return true; } return false; }
bool COggStream::IsFinished() { return !Valid() || (GetPlayTime() >= GetTotalTime()); }
int NSF::GetLength () { return GetPlayTime () + GetLoopTime () * GetLoopNum () + GetFadeTime (); }
void CPlayerGameStats::GenerateGameStats (CGameStats &Stats, CSpaceObject *pPlayerShip, bool bGameOver) const // GenerateGameStats // // Generates a stats for everything we track { int j; CShip *pShip = (pPlayerShip ? pPlayerShip->AsShip() : NULL); if (pShip == NULL) return; CPlayerShipController *pPlayer = (CPlayerShipController *)pShip->GetController(); if (pPlayer == NULL) return; CSovereign *pPlayerSovereign = g_pUniverse->FindSovereign(g_PlayerSovereignUNID); if (pPlayerSovereign == NULL) return; // Base stats Stats.Insert(CONSTLIT("Genome"), strCapitalize(GetGenomeName(pPlayer->GetPlayerGenome()))); Stats.Insert(CONSTLIT("Score"), strFormatInteger(CalcEndGameScore(), -1, FORMAT_THOUSAND_SEPARATOR | FORMAT_UNSIGNED)); Stats.Insert(CONSTLIT("Ship class"), pShip->GetNounPhrase(0)); CTimeSpan Time = GetPlayTime(); if (!Time.IsBlank()) Stats.Insert(CONSTLIT("Time played"), Time.Format(NULL_STR)); #ifdef REAL_TIME Time = GetGameTime(); if (!Time.IsBlank()) Stats.Insert(CONSTLIT("Time elapsed in game"), Time.Format(NULL_STR)); #endif // Some combat stats CString sDestroyed = GetStat(ENEMY_SHIPS_DESTROYED_STAT); if (!sDestroyed.IsBlank()) Stats.Insert(CONSTLIT("Enemy ships destroyed"), sDestroyed, CONSTLIT("combat")); sDestroyed = GetStat(FRIENDLY_SHIPS_DESTROYED_STAT); if (!sDestroyed.IsBlank()) Stats.Insert(CONSTLIT("Friendly ships destroyed"), sDestroyed, CONSTLIT("combat")); sDestroyed = GetStat(ENEMY_STATIONS_DESTROYED_STAT); if (!sDestroyed.IsBlank()) Stats.Insert(CONSTLIT("Enemy stations destroyed"), sDestroyed, CONSTLIT("combat")); sDestroyed = GetStat(FRIENDLY_STATIONS_DESTROYED_STAT); if (!sDestroyed.IsBlank()) Stats.Insert(CONSTLIT("Friendly stations destroyed"), sDestroyed, CONSTLIT("combat")); // Add stat for every station destroyed CStatCounterArray CounterArray; CMapIterator i; m_StationStats.Reset(i); while (m_StationStats.HasMore(i)) { SStationTypeStats *pStats; DWORD dwUNID = m_StationStats.GetNext(i, &pStats); CStationType *pType = g_pUniverse->FindStationType(dwUNID); if (pType == NULL) continue; CString sName = pType->GetNounPhrase(0); CString sSort = strPatternSubst(CONSTLIT("%03d%s"), 100 - pType->GetLevel(), sName); if (pType->GetSovereign()->IsEnemy(pPlayerSovereign)) CounterArray.Insert(sName, pStats->iDestroyed, CONSTLIT("Enemy stations destroyed"), sSort); else CounterArray.Insert(sName, pStats->iDestroyed, CONSTLIT("Friendly stations destroyed"), sSort); } CounterArray.GenerateGameStats(Stats); // Add stat for every ship class destroyed CounterArray.DeleteAll(); m_ShipStats.Reset(i); while (m_ShipStats.HasMore(i)) { SShipClassStats *pStats; DWORD dwUNID = m_ShipStats.GetNext(i, &pStats); CShipClass *pClass = g_pUniverse->FindShipClass(dwUNID); if (pClass == NULL) continue; CString sName = pClass->GetNounPhrase(0); CString sSort = strPatternSubst(CONSTLIT("%09d%s"), 100000000 - pClass->GetScore(), sName); if (pStats->iEnemyDestroyed > 0) CounterArray.Insert(sName, pStats->iEnemyDestroyed, CONSTLIT("Enemy ships destroyed"), sSort); if (pStats->iFriendDestroyed > 0) CounterArray.Insert(sName, pStats->iFriendDestroyed, CONSTLIT("Friendly ships destroyed"), sSort); } CounterArray.GenerateGameStats(Stats); // Add stat for every weapon fired m_ItemStats.Reset(i); while (m_ItemStats.HasMore(i)) { SItemTypeStats *pStats; DWORD dwUNID = m_ItemStats.GetNext(i, &pStats); CItemType *pItemType = g_pUniverse->FindItemType(dwUNID); if (pItemType == NULL) continue; CString sName = pItemType->GetNounPhrase(nounShort); CString sSort = strPatternSubst(CONSTLIT("%03d%s"), 100 - pItemType->GetLevel(), sName); // Installed items if (pStats->dwFirstInstalled != INVALID_TIME) Stats.Insert(sName, NULL_STR, CONSTLIT("Items installed"), sSort); if (pStats->iCountFired > 0) Stats.Insert(sName, strFormatInteger(pStats->iCountFired, -1, FORMAT_THOUSAND_SEPARATOR | FORMAT_UNSIGNED), CONSTLIT("Weapons fired"), sSort); } // Stats for player equipment (but only if the game is done) if (bGameOver) { TSortMap<CString, CItem> InstalledItems; // First we generate a sorted list of installed items // (We do this in case there are multiple of the same device/armor so that // we can coalesce them together into a single line). CItemListManipulator ItemList(pShip->GetItemList()); ItemList.ResetCursor(); while (ItemList.MoveCursorForward()) { const CItem &Item(ItemList.GetItemAtCursor()); if (Item.IsInstalled()) { CString sEnhancement = Item.GetEnhancedDesc(pShip); CString sItemName = Item.GetNounPhrase(nounActual | nounCountOnly | nounShort); CString sLine = (sEnhancement.IsBlank() ? sItemName : strPatternSubst(CONSTLIT("%s [%s]"), sItemName, sEnhancement)); bool bInserted; CItem *pEntry = InstalledItems.SetAt(sLine, &bInserted); if (bInserted) { *pEntry = Item; pEntry->SetCount(1); } else pEntry->SetCount(pEntry->GetCount() + 1); } } // Now add all the installed items to the stats for (j = 0; j < InstalledItems.GetCount(); j++) { // Redo the line now that we know the proper count CString sEnhancement = InstalledItems[j].GetEnhancedDesc(pShip); CString sItemName = InstalledItems[j].GetNounPhrase(nounActual | nounCountOnly); CString sLine = (sEnhancement.IsBlank() ? sItemName : strPatternSubst(CONSTLIT("%s [%s]"), sItemName, sEnhancement)); // Compute the sort order int iOrder; switch (InstalledItems[j].GetType()->GetCategory()) { case itemcatWeapon: iOrder = 0; break; case itemcatLauncher: iOrder = 1; break; case itemcatShields: iOrder = 2; break; case itemcatArmor: iOrder = 3; break; case itemcatReactor: iOrder = 4; break; case itemcatDrive: iOrder = 5; break; default: iOrder = 6; break; } CString sSort = strPatternSubst(CONSTLIT("%d%03d%s"), iOrder, 100 - InstalledItems[j].GetType()->GetLevel(), sLine); Stats.Insert(sLine, NULL_STR, CONSTLIT("Final equipment"), sSort); } // Add the remaining items ItemList.ResetCursor(); while (ItemList.MoveCursorForward()) { const CItem &Item(ItemList.GetItemAtCursor()); if (!Item.IsInstalled()) { CString sEnhancement = Item.GetEnhancedDesc(pShip); CString sItemName = Item.GetNounPhrase(nounActual | nounCountOnly); CString sLine = (sEnhancement.IsBlank() ? sItemName : strPatternSubst(CONSTLIT("%s [%s]"), sItemName, sEnhancement)); CString sSort = strPatternSubst(CONSTLIT("%03d%s"), 100 - Item.GetType()->GetLevel(), sLine); Stats.Insert(sLine, NULL_STR, CONSTLIT("Final items"), sSort); } } } }
void WaveTest_Play(char *pszFileName) { HWAVELIB hWaveLib = WaveLib_Init(pszFileName, FALSE); PWAVELIB pWaveLib = (PWAVELIB)hWaveLib; int x; // hWaveLib = WaveLib_Init(pszFileName, FALSE); FileSize = GetSize(); FileLength = GetLength(); //waveOutGetDevCaps(&pWaveLib->hThread,&devicecapability, sizeof(devicecapability)); if(hWaveLib) { do { PlaybackTimeNow =GetPlayTime(hWaveLib); PlaybackPercentage = (PlaybackTimeNow/total_time)*100; //printf("Querying device capabilities...\n"); //loadbar(PlaybackTimeNow,total_time,10,10); //getPlaybackTimePercentage(FileLength, PlaybackTimeNow); showbar(); if (PlaybackPercentage >= 0 && PlaybackPercentage < 10) { //waveOutGetVolume(pWaveLib->hWaveOut,&volume); nextvolume = 0x0000; nextvolume = ((int)PlaybackPercentage*25)<<8; waveOutSetVolume(pWaveLib->hWaveOut,nextvolume); printf("Ch1++|Vol:%X|", nextvolume); } else if (PlaybackPercentage >= 10 && PlaybackPercentage < 20) { nextvolume = 0xFF00 - (((int)(PlaybackPercentage-10)*25)<<8); waveOutSetVolume(pWaveLib->hWaveOut,nextvolume); printf("Ch1--|Vol:%X|", nextvolume); } else if (PlaybackPercentage >= 20 && PlaybackPercentage < 30) { nextvolume = 0x0000; nextvolume = ((int)(PlaybackPercentage-20)*25); waveOutSetVolume(pWaveLib->hWaveOut,nextvolume); printf("Ch2++|Vol:00%X|", nextvolume); } else if (PlaybackPercentage >= 30 && PlaybackPercentage < 40) { nextvolume = 0x00FF - ((int)(PlaybackPercentage-30)*25); waveOutSetVolume(pWaveLib->hWaveOut,nextvolume); printf("Ch2--|Vol:00%X|", nextvolume); } else if (PlaybackPercentage >= 40 && PlaybackPercentage < 50) { nextvolume = 0x0000; nextvolume = (((int)(PlaybackPercentage-40)*25<<8)) | ((int)(PlaybackPercentage-40)*25); waveOutSetVolume(pWaveLib->hWaveOut,nextvolume); printf("Ch1&2++|Vol:%X|", nextvolume); } else if (PlaybackPercentage >= 50 && PlaybackPercentage < 70) { playbackrate = ((((int)(PlaybackPercentage-50)*25)/64)<<16); result = waveOutSetPlaybackRate(pWaveLib->hWaveOut,playbackrate); if (result == MMSYSERR_INVALHANDLE){ printf("nohandle");} else if (result == MMSYSERR_NODRIVER) printf("nodriver"); else if (result == MMSYSERR_NOMEM) printf("nomem"); else if (result == MMSYSERR_NOTSUPPORTED){ printf("notsup");//printf("WARNING: Changing playback rate unsupported.\n"); } else if (result == MMSYSERR_NOERROR); printf("@%dx|", (((int)(PlaybackPercentage-50)*25)/64)); } else if (PlaybackPercentage >= 70 && PlaybackPercentage < 90) { //playbackrate = ((((int)(PlaybackPercentage-70)*25)/64)<<16); waveOutGetPlaybackRate(pWaveLib->hWaveOut,&playbackrate); //printf("@%dx|", (((int)(PlaybackPercentage-50)*25)/64)); printf("@%Xx|", playbackrate); } } while(PlaybackTimeNow < FileLength); printf("Playbacktime: %d | FileLength: %d",PlaybackTimeNow,total_time); WaveLib_UnInit(hWaveLib); } else { WaveTest_PrintError(); } }