void CGameDlg::OnTimer(UINT_PTR nIDEvent) { if (nIDEvent == PLAY_TIMER_ID && m_bPlaying && !m_bPause) { m_GameProgress.StepIt(); DrawGameTime(); if(m_GameProgress.GetPos()==10) if(!mute) m_nSound.TimeCaution(); if (m_GameProgress.GetPos()==0) { if(!mute){ m_nSound.Stop(); m_nSound.Lose(); } KillTimer(1); m_bPlaying = false; GetDlgItem(IDC_BTN_START)->EnableWindow(TRUE); CGameResult result; result.TotalScore = Score+TimeBonus; result.TotalCombo = TotalCombo; result.TimeBonus = TimeBonus; result.DoModal(); } } CDialogEx::OnTimer(nIDEvent); }
void CGameDlg::OnBnClickedBtnStart() { if(!mute) m_nSound.ButtonClick(); m_nSound.InGameBGM(); m_GameProgress.SetRange(0,SetTime); m_GameProgress.SetStep(-1); m_GameProgress.SetPos(300); SetTimer(PLAY_TIMER_ID, 1000,NULL); ShowScore(); DrawGameTime(); GetDlgItem(IDC_BTN_START)->EnableWindow(m_bPlaying); m_bPlaying = true; m_bPause = false; m_GameC.StartGame(); UpdateMap(); }
void GameMainScene::Render() { glPushAttrib(GL_ALL_ATTRIB_BITS); { //ビューポートの設定 const int width = oka::Screen::GetInstance()->GetWidth(); const int height = oka::Screen::GetInstance()->GetHeight(); glViewport(0, 0, width, height); if (nullptr != oka::CharacterManager::GetInstance()->GetPlayer()) { //カメラの注視点 glm::vec3 target = oka::CharacterManager::GetInstance()->GetPlayer()->m_transform.m_position; //攻撃を受けている際は注視点を揺らす const bool isHit = oka::CharacterManager::GetInstance()->GetPlayer()->GetIsHitAttack(); if (isHit) { glm::vec3 shake; std::random_device rnd; std::mt19937 mt(rnd()); std::uniform_int_distribution<> x(-1, 1); std::uniform_int_distribution<> y(-1, 1); std::uniform_int_distribution<> z(-1, 1); shake.x = x(mt); shake.y = y(mt); shake.z = z(mt); shake *= 0.02f; target += shake; } g_camera->SetTarget(target); const glm::vec3 toVec = oka::CharacterManager::GetInstance()->GetPlayer()->m_transform.m_myToVec; const glm::vec3 upVec = oka::CharacterManager::GetInstance()->GetPlayer()->m_transform.m_myUpVec; //カメラの座標 glm::vec3 pos; pos += upVec*3.0f; pos += target - (toVec * 8.0f); g_camera->SetPos(pos); //カメラの上 glm::vec3 up = g_camera->GetUp(); up = up + (upVec - up)*0.05f; up = glm::normalize(up); g_camera->SetUp(up); } g_camera->Perspective(); g_camera->SetViewMatrix(); g_camera->MultViewMatrix(); /* 光の位置 */ float light[] = { 0.0f, 1.0f, 0.0f, 0 }; glLightfv(GL_LIGHT0, GL_POSITION, light); //全オブジェクトの描画 auto itr = oka::GameManager::GetInstance()->m_gameObjects.begin(); auto end = oka::GameManager::GetInstance()->m_gameObjects.end(); while (itr != end) { itr->second->Draw(); itr++; } if (nullptr != oka::CharacterManager::GetInstance()->GetPlayer()) { oka::CharacterManager::GetInstance()->GetPlayer()->DrawTarget(); } glDisable(GL_LIGHTING); glDisable(GL_DEPTH_TEST); const float left = 0.0f; const float right = (float)oka::Screen::GetInstance()->GetWidth(); const float bottom = 0.0f; const float top = (float)oka::Screen::GetInstance()->GetHeight(); g_camera->Ortho(left, right, bottom, top, 1.0f, -1.0f); if (nullptr != oka::CharacterManager::GetInstance()->GetPlayer()) { bool isHit = oka::CharacterManager::GetInstance()->GetPlayer()->GetIsHitAttack(); //マスク if (isHit) { oka::Screen::GetInstance()->SetMask(glm::vec4(1.0f, 0.0f, 0.0f, 0.3f)); } oka::ScoreManager::GetInstance()->DrawScore(); oka::CharacterManager::GetInstance()->GetPlayer()->DrawRadarPos(); DrawGameTime(); DrawRadar(); auto itr = oka::CharacterManager::GetInstance()->GetCharacters()->begin(); auto end = oka::CharacterManager::GetInstance()->GetCharacters()->end(); while (itr != end) { (*itr)->DrawRadarPos(); itr++; } //操作方法 glColor3f(0.0f, 0.0f, 0.0f); oka::MyString::Draw("[Lstick]Control", glm::vec2(300.0f, 100.0f), glm::vec2(0.2f, 0.2f)); oka::MyString::Draw("[LB/RB]Roll", glm::vec2(500.0f, 100.0f), glm::vec2(0.2f, 0.2f)); oka::MyString::Draw("[A]Accel", glm::vec2(300.0f, 50.0f), glm::vec2(0.2f, 0.2f)); oka::MyString::Draw("[X]Shot", glm::vec2(400.0f, 50.0f), glm::vec2(0.2f, 0.2f)); oka::MyString::Draw("[Y]HomingShot", glm::vec2(500.0f, 50.0f), glm::vec2(0.2f, 0.2f)); } fps(); } glPopAttrib(); }