void cAudio :: Close( void ) { if( bInitialised ) { if( bSounds ) { StopSounds(); for( unsigned int i = 0; i < AUDIO_MAX_SOUNDS; i++ ) { Sound[i] = NULL; } } if( bMusic ) { Mix_FreeMusic( Music ); Music = NULL; } Mix_CloseAudio(); bInitialised = 0; } }
void cAudio :: ToggleSounds( void ) { bSounds = !bSounds; if( !bSounds ) { StopSounds(); } else { Init(); PlaySound( SOUNDS_DIR "/audio_on.ogg" ); } }
//------------------------------------------------------------------------ void CVehicleMovementHelicopter::OnEvent(EVehicleMovementEvent event, const SVehicleMovementEventParams& params) { switch (event) { case eVME_Repair: { if(params.fValue < 0.25) { m_damageActual = 0.0f; m_damage = 0.0f; } } break; case eVME_Collision: { if (0) { m_isEnginePowered = false; pe_simulation_params simParams; simParams.dampingFreefall = 0.01f; simParams.gravity = Vec3(0.0f, 0.0f, -9.8f); GetPhysics()->SetParams(&simParams); } } break; case eVME_GroundCollision: { const float stopOver = 1.0f; } break; case eVME_Damage: { if (!m_pVehicle->IsIndestructable()) { const float stopOver = 1.0f; m_damage = params.fValue; if (m_damage > 0.95f) { m_isEngineDisabled = true; m_isEnginePowered = false; StopExhaust(); StopSounds(); IPhysicalEntity * pPhysicalEntity = GetPhysics(); pe_action_impulse impulse; impulse.angImpulse = Vec3(0.1f, 100.f, 0.0f); pPhysicalEntity->Action(&impulse); pe_simulation_params simParams; simParams.dampingFreefall = 0.01f; simParams.gravity = Vec3(0.0f, 0.0f, -9.8f); pPhysicalEntity->SetParams(&simParams); SVehicleEventParams eventParams; eventParams.entityId = 0; m_pVehicle->BroadcastVehicleEvent(eVE_Destroyed, eventParams); if (m_pVehicle) { if (IEntity *entity = m_pVehicle->GetEntity()) { if (IAIObject *aiobject = entity->GetAI()) { aiobject->Event(AIEVENT_DISABLE, NULL); } } } } } } break; case eVME_WarmUpEngine: m_enginePower = m_enginePowerMax; break; //case eVME_Turbulence: // m_turbulence = max(m_turbulence, params.fValue); // break; default: CVehicleMovementBase::OnEvent(event, params); break; } }
void CGameView::OnTimer(UINT_PTR nIDEvent) { // 심장소리 음악 if (!gv_min && gv_sec < 10 && !gv_timeDV){ // 분이 0이고 초가 10초 미만일 때 시간제한 음악 켬 StopSounds (gv_bgDV) ; PlaySounds (gv_timeDV) ; } CClientDC dc (this) ; CRect rect ; GetClientRect (&rect) ; CFont myFont, *pOldFont ; CString str; // Text 설정 Part myFont.CreateFont (25, 0, 0, 0, FW_BOLD, true, false, false, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, gv_font) ; pOldFont =dc.SelectObject (&myFont) ; dc.SetBkColor (gv_bgColor) ; // 글자의 배경은 바탕과 같이 dc.SetTextColor (0x00FFFFFF & ~gv_bgColor) ; // 글자 색을 바탕화면의 반대 색으로 // 시간에 따른 출력부 if (!gv_scoreTF) { if (gv_min < 10 && gv_min) gv_minStr.Format (_T(" 0%d"), gv_min) ; else if (!gv_min) gv_minStr.Format (_T (" 00")) ; else gv_minStr.Format (_T (" %d"), gv_min) ; if (gv_sec < 10 && gv_sec) gv_secStr.Format (_T("0%d"), gv_sec) ; else if (!gv_sec) gv_secStr.Format (_T ("00")) ; else gv_secStr.Format (_T ("%d"), gv_sec) ; if (gv_csec < 10 && gv_csec) gv_csecStr.Format (_T("0%d"), gv_csec) ; else if (!gv_csec) gv_csecStr.Format (_T ("00")) ; else gv_csecStr.Format (_T ("%d"), gv_csec) ; str.Format (_T (" %s : %s : %s "), gv_minStr, gv_secStr, gv_csecStr) ; dc.SetTextAlign (TA_RIGHT) ; dc.TextOutW (rect.Width () -20, rect.top +45, str) ; // 초계산 if (--gv_csec < 0) { if (!gv_min && !gv_sec) OnSuccess () ; gv_csec =99 ; gv_sec-- ; pTimeDlg ->timeCtrl.StepIt () ; // 초가 줄때마다 실행 } if (gv_sec < 0 && gv_min) { gv_sec =59 ; gv_min-- ; } // 카운트 출력 str.Format (_T (" CLICK COUNT : %u "), gv_cnt) ; dc.TextOutW (rect.Width () -20, rect.top +20, str) ; // 점수 출력 dc.SetTextAlign (TA_CENTER) ; str.Format (_T (" Score : %u "), gv_point) ; dc.TextOutW (rect.Width () /2, rect.top +25, str) ; } else { while (gv_tempMin-- > 0) gv_tempSec +=60 ; // 분이 남아 있다면 초로 옮김 // 시간 감소 및 포인트 증가 if (gv_tempSec > 0) { // 초가 0보다 클때까지 gv_point+=3 ; gv_tempSec-- ; // 점수는 3증가 초는 1증감 pTimeDlg ->timeCtrl.StepIt () ; dc.SetTextAlign (TA_CENTER) ; str.Format (_T (" Score :%u "), gv_point) ; dc.TextOutW (rect.Width () /2 , rect.top +25, str) ; } } dc.SelectObject (myFont) ; myFont.DeleteObject () ; CView::OnTimer(nIDEvent); }
// 성공했을때 void CGameView::OnSuccess(void) { // 랭크 기록 여부 KillTimer (true) ; // 메세지 박스를 선택 안해도 시간이 흐르지 않도록 int res; StopSounds (gv_bgDV) ; StopSounds (gv_timeDV) ; // 시간이 지나거나 성공하면 음악을 끔 if(gv_sec != 0){ PlaySounds (gv_successDV) ; gv_scoreTF =!gv_scoreTF ; // 스코어 타이머 가동 gv_tempMin =gv_min ; gv_tempSec =gv_sec ; SetTimer (true, 40, NULL) ; // 점수에 남은 시간에 대한 포인트를 더한다. res =AfxMessageBox (_T ("축하드립니다! 랭크를 기록 하시겠습니까?"), MB_YESNO) ; // 기록 할 때 if (res == IDYES) { CRankNameDlg dlgName ; dlgName.DoModal () ; CRankDlg *mem =new CRankDlg (dlgName.name, gv_minStr, gv_secStr, gv_csecStr, gv_cnt, gv_lev, gv_rank, gv_point) ; mem ->DoModal () ; } } else{ PlaySounds (gv_failDV) ; res =AfxMessageBox (_T ("안타깝네요. 다시 하시겠습니까?"), MB_YESNO) ; gv_TF =true ; // 재시작을 다시 묻지 않기 위해 StopSounds (gv_failDV) ; // 대화상자를 닫으면 음악을 끄게한다. } // 재시작 여부 if(gv_TF == false){ // 게임 끝내면 gv_TF는 원래 값으로 되돌아옴 KillTimer (true) ; gv_scoreTF =!gv_scoreTF ; // 스코어 타이머 해제 StopSounds (gv_successDV) ; // 대화상자가 뜨기전 음악을 끈다. res = AfxMessageBox(_T("다시 시작하시겠습니까?"), MB_YESNO); } if(res == IDYES){ gv_cnt = gv_point = gv_min = 0 ; gv_csec =100 ; CGameDoc* pDoc = GetDocument(); gv_sec = pDoc->gd_time; pDoc->gd_bRandom = TRUE; // 랜덤하게 그림의 ID변경 for(int n=0;n<pDoc->gd_nRow;n++) for(int m=0;m<pDoc->gd_nCol;m++) pDoc->gd_bShow[n][m] = FALSE; // 아무 그림도 선택하지 않은것으로 인식하기 위한 초기화 pDoc->gd_nBmpFirstID = pDoc->gd_nBmpSecondID = 0 ; pDoc->gd_bMouse = FALSE; gv_nMatchCount = 0; isInit = TRUE; Invalidate(); } else{ // 다시 하지 않으면 종료 PlaySound (L"C:\\image\\벌써가게흐흥.wav", NULL, SND_SYNC) ; PostMessageW(WM_QUIT); } }