void CRMjudgeManager::StartNote( PlayerNumber player , WidgetType widgetType ) const { CRMobject* thisNote = CRMobjectManager::GetInstance()->GetObjectFront( LAYER_MEMORY_POOL ); if ( thisNote == nullptr ) { return; } if ( player == PLAYER_ONE && !CRMplayer1P::GetInstance()->IsDead()) { // 만약 이곳에서 HP 체크를 하지 않으면? // Judge 메소드 주석 참조 thisNote->SetWidgetType( widgetType ); thisNote->SetPosition( NOTE_ONE_START_POSITION_X, NOTE_START_POSITION_Y ); thisNote->SetVisible(true); thisNote->SetSceneType( SCENE_PLAY ); thisNote->SetPlayer( PLAYER_ONE ); CRMobjectManager::GetInstance()->AddObject( thisNote , LAYER_NOTE1 ); CRMobjectManager::GetInstance()->DeleteNoteListFront( LAYER_MEMORY_POOL ); } else if ( player == PLAYER_TWO && !CRMplayer2P::GetInstance()->IsDead() ) { thisNote->SetWidgetType( widgetType ); thisNote->SetPosition( NOTE_TWO_START_POSITION_X, NOTE_START_POSITION_Y ); thisNote->SetVisible(true); thisNote->SetSceneType( SCENE_PLAY ); thisNote->SetPlayer( PLAYER_TWO ); CRMobjectManager::GetInstance()->AddObject( thisNote , LAYER_NOTE2 ); CRMobjectManager::GetInstance()->DeleteNoteListFront( LAYER_MEMORY_POOL ); } }
void CRMjudgeManager::JudgeNoteByPlayer( PlayerNumber playerNumber ) { LayerType playerLayer; CRMplayer* playerClass = nullptr; if ( playerNumber == PLAYER_ONE ) { playerLayer = LAYER_NOTE1; playerClass = CRMplayer1P::GetInstance(); } else { playerLayer = LAYER_NOTE2; playerClass = CRMplayer2P::GetInstance(); } CRMobject* thisNote = CRMobjectManager::GetInstance()->GetObjectFront( playerLayer ); if ( thisNote != nullptr ) { ///////////////////////////////////////////////////////////////// if ( IsKeyInputRight( thisNote , playerNumber ) ) { if ( thisNote->GetPositionY() > NOTE_JUDGE_PERFECT_START_LINE && thisNote->GetPositionY() < NOTE_JUDGE_PERFECT_END_LINE ) { thisNote->SetVisible(false); //effect 플래그 세팅 //플래그만 세팅하면 이펙트 노출은 알아서 되게끔 하자 //플래그 세팅하는 곳은 effect manager(싱글톤)를 따로 두고 진행합시다 /* 1. judge에서 effect Manager flag세팅 2. childeffectimage에서 flag 확인 3. childeffectimage에서 flag 확인 후 다시 flag 초기화 */ float hitPositionX = thisNote->GetPositionX(); float hitPositionY = thisNote->GetPositionY(); CRMeffectManager::GetInstance()->SetFlag( playerNumber , hitPositionX , hitPositionY ); //score up playerClass->AddEvent( JUDGE_PERFECT ); PrintScore( playerNumber, JUDGE_PERFECT ); if ( m_IsItemRecoverOn[playerNumber] == true ) { playerClass->AddHP(4); } //키 누르면서 바로 지우면 플래그 세팅이 안됨 //키를 누르면 무조건 세팅이 되면 miss 처리 불가 //deleteNote 이동 CRMobjectManager::GetInstance()->DeleteNoteListFront( playerLayer ); } // Good else if ( ( thisNote->GetPositionY() > NOTE_JUDGE_GOOD_START_LINE && thisNote->GetPositionY() < NOTE_JUDGE_GOOD_END_LINE ) ) { thisNote->SetVisible(false); //effect 플래그 세팅 float hitPositionX = thisNote->GetPositionX(); float hitPositionY = thisNote->GetPositionY(); CRMeffectManager::GetInstance()->SetFlag( playerNumber , hitPositionX , hitPositionY ); //score up playerClass->AddEvent( JUDGE_GOOD ); PrintScore( playerNumber, JUDGE_GOOD ); if ( m_IsItemRecoverOn[playerNumber] == true ) { playerClass->AddHP(2); } CRMobjectManager::GetInstance()->DeleteNoteListFront( playerLayer ); } // 너무 빨리 눌러 MISS (a키를 누르고 있을때 good나오는 버그 회피) else if ( thisNote->GetPositionY() > NOTE_JUDGE_FAST_MISS_LINE ) { thisNote->SetVisible(false); //score up; playerClass->AddEvent( JUDGE_MISS ); playerClass->SubHP(); PrintScore( playerNumber, JUDGE_MISS ); CRMobjectManager::GetInstance()->DeleteNoteListFront( playerLayer ); } } //note bottom miss else if ( thisNote->GetPositionY() > NOTE_JUDGE_LATE_MISS_LINE ) { //score up playerClass->AddEvent( JUDGE_MISS ); playerClass->SubHP(); PrintScore( playerNumber, JUDGE_MISS ); //thisNote->SetPosition( DEFAULT_POSITION_X, DEFAULT_POSITION_Y ); CRMobjectManager::GetInstance()->DeleteNoteListFront( playerLayer ); } // Perfect ///////////////////////////////////////////////////////////////// } }
HRESULT CRMmainLoop::CreateObject() { HRESULT hr = S_FALSE; // 이미지 리소스를 불러오려면 렌더가 필요함 hr = CRMrender::GetInstance()->CreateFactory(); if ( hr != S_OK ) { MessageBox( NULL, ERROR_CREATE_RENDER, ERROR_TITLE_NORMAL, MB_OK | MB_ICONSTOP ); return hr; } hr = CRMrender::GetInstance()->CreateRenderTarget(); if ( hr != S_OK ) { MessageBox( NULL, ERROR_CREATE_RENDER_TARGET, ERROR_TITLE_NORMAL, MB_OK | MB_ICONSTOP ); return hr; } hr = CRMrender::GetInstance()->CreateBrush(); if ( hr != S_OK ) { MessageBox( NULL, ERROR_CREATE_BRUSH, ERROR_TITLE_NORMAL, MB_OK | MB_ICONSTOP ); return hr; } // 렌더를 메인루프의 생성자에 못 넣는 이유는? // 렌더 쪽에서 메인루프 싱글톤을 호출하므로 메모리 접근 오류 발생! // 이미지 리소스 파일 불러오기 hr = CRMresourceManager::GetInstance()->CreateFactory(); if ( hr != S_OK ) { MessageBox( NULL, ERROR_CREATE_WIC_FACTORY, ERROR_TITLE_NORMAL, MB_OK | MB_ICONSTOP ); return hr; } hr = CRMresourceManager::GetInstance()->CreateTexture(); if ( hr != S_OK ) { MessageBox( NULL, ERROR_CREATE_BG_IMAGE, ERROR_TITLE_NORMAL, MB_OK | MB_ICONSTOP ); return hr; } /**********************************************************************************/ // 오브젝트 매니저 아이템 초기화 /**********************************************************************************/ // 오브젝트 매니저 안쪽으로 리팩토링 할 것 ////////////////////////////////////////////////////////////////////////// CRMobject* newObject = new CRMchildBGImage(); newObject->SetWidgetType(WIDGET_BG_IMAGE_TITLE); newObject->SetPosition(0, 0); newObject->SetSceneType(SCENE_TITLE); CRMobjectManager::GetInstance()->AddObject(newObject, LAYER_BACKGROUND); newObject = new CRMchildBGImage(); newObject->SetWidgetType(WIDGET_BG_IMAGE_PLAY); newObject->SetPosition(0, 0); newObject->SetSceneType(SCENE_PLAY); CRMobjectManager::GetInstance()->AddObject(newObject, LAYER_BACKGROUND); newObject = new CRMchildBGImage(); newObject->SetWidgetType(WIDGET_BG_IMAGE_SELECT); newObject->SetPosition(0, 0); newObject->SetSceneType(SCENE_SELECT_MUSIC); CRMobjectManager::GetInstance()->AddObject(newObject, LAYER_BACKGROUND); ////////////////////////////////////////////////////////////////////////// newObject = new CRMchildBGImage(); newObject->SetWidgetType(WIDGET_ALBUM_IMAGE); newObject->SetPosition(0, 0); newObject->SetSceneType(SCENE_SELECT_MUSIC); CRMobjectManager::GetInstance()->AddAlbumImage(newObject, ALBUM_IMAGE_STATIC); newObject = new CRMchildAlbumImage(); newObject->SetWidgetType(WIDGET_MOVING_ALBUM_IMAGE); newObject->SetPosition(0, 0); newObject->SetSceneType(SCENE_SELECT_MUSIC); CRMobjectManager::GetInstance()->AddAlbumImage(newObject, ALBUM_IMAGE_DYNAMIC); ////////////////////////////////////////////////////////////////////////// newObject = new CRMchildBGImage(); newObject->SetWidgetType(WIDGET_BG_IMAGE_RESULT); newObject->SetPosition(0, 0); newObject->SetSceneType(SCENE_RESULT); CRMobjectManager::GetInstance()->AddObject(newObject, LAYER_BACKGROUND); CRMchildGauge* gaugeObject = new CRMchildGauge(); gaugeObject->SetWidgetType(WIDGET_GAUGE_1P); gaugeObject->SetPosition(378, 650); gaugeObject->SetSceneType(SCENE_PLAY); gaugeObject->SetPlayer(PLAYER_ONE); CRMobjectManager::GetInstance()->AddObject(gaugeObject, LAYER_JUDGE_GAUGE); gaugeObject = new CRMchildGauge(); gaugeObject->SetWidgetType(WIDGET_GAUGE_2P); gaugeObject->SetPosition(893, 650); gaugeObject->SetSceneType(SCENE_PLAY); gaugeObject->SetPlayer(PLAYER_TWO); CRMobjectManager::GetInstance()->AddObject(gaugeObject, LAYER_JUDGE_GAUGE); newObject = new CRMchildJudgeRing(); newObject->SetWidgetType(WIDGET_JUDGE_RING); newObject->SetPosition(382, 530); newObject->SetSceneType(SCENE_PLAY); CRMobjectManager::GetInstance()->AddObject(newObject, LAYER_JUDGE_GAUGE); newObject = new CRMchildJudgeRing(); newObject->SetWidgetType(WIDGET_JUDGE_RING); newObject->SetPosition(895, 530); newObject->SetSceneType(SCENE_PLAY); CRMobjectManager::GetInstance()->AddObject(newObject, LAYER_JUDGE_GAUGE); // 플레이 화면 판정 이미지 newObject = new CRMchildJudgeMessage(); newObject->SetWidgetType(WIDGET_PLAY_JUDGE_NONE); newObject->SetPosition(70, 160); newObject->SetSceneType(SCENE_PLAY); newObject->SetPlayer(PLAYER_ONE); CRMobjectManager::GetInstance()->AddObject(newObject, LAYER_UI); newObject = new CRMchildJudgeMessage(); newObject->SetWidgetType(WIDGET_PLAY_JUDGE_NONE); newObject->SetPosition(581, 160); newObject->SetSceneType(SCENE_PLAY); newObject->SetPlayer(PLAYER_TWO); CRMobjectManager::GetInstance()->AddObject(newObject, LAYER_UI); for ( int i = 0 ; i < MAX_NOTE_IN_POOL ; ++i ) { newObject = new CRMchildNote(); newObject->SetWidgetType(WIDGET_NOTE_NORMAL_1); newObject->SetPosition( DEFAULT_POSITION_X, DEFAULT_POSITION_Y ); newObject->SetSceneType(SCENE_PLAY); CRMobjectManager::GetInstance()->AddObject(newObject, LAYER_MEMORY_POOL); } CRMchildShutter* shutterObject = new CRMchildShutter(); shutterObject->SetWidgetType(WIDGET_SHUTTER); shutterObject->SetPosition(SHUTTER_P1_START_POSITION_X, -890); shutterObject->SetSceneType(SCENE_PLAY); shutterObject->SetPlayer(PLAYER_ONE); CRMobjectManager::GetInstance()->AddObject(shutterObject, LAYER_SHUTTER); shutterObject = new CRMchildShutter(); shutterObject->SetWidgetType(WIDGET_SHUTTER); shutterObject->SetPosition(SHUTTER_P2_START_POSITION_X, -890); shutterObject->SetSceneType(SCENE_PLAY); shutterObject->SetPlayer(PLAYER_TWO); CRMobjectManager::GetInstance()->AddObject(shutterObject, LAYER_SHUTTER); for ( int i = 0 ; i < MAX_EFFECT ; ++ i ) { newObject = new CRMchildEffectImage(); newObject->SetWidgetType(WIDGET_NOTE_HIT); newObject->SetPosition(DEFAULT_POSITION_X, DEFAULT_POSITION_Y); newObject->SetSceneType(SCENE_PLAY); CRMobjectManager::GetInstance()->AddObject(newObject, LAYER_NOTE_HIT); } newObject = new CRMchildAlertGrow(); newObject->SetWidgetType( WIDGET_PLAY_ALERT_GROW_RED ); newObject->SetPosition( SHUTTER_P1_START_POSITION_X , 0 ); newObject->SetSceneType(SCENE_PLAY); newObject->SetPlayer(PLAYER_ONE); CRMobjectManager::GetInstance()->AddObject(newObject, LAYER_UI); newObject = new CRMchildAlertGrow(); newObject->SetWidgetType( WIDGET_PLAY_ALERT_GROW_RED ); newObject->SetPosition( SHUTTER_P2_START_POSITION_X , 0 ); newObject->SetSceneType(SCENE_PLAY); newObject->SetPlayer(PLAYER_TWO); CRMobjectManager::GetInstance()->AddObject(newObject, LAYER_UI); newObject = new CRMchildCpuMode(); newObject->SetWidgetType( WIDGET_UI_IMAGE_PLAY_CPU_MODE ); newObject->SetPosition( SHUTTER_P2_START_POSITION_X , 0 ); newObject->SetSceneType(SCENE_PLAY); newObject->SetPlayer(PLAYER_TWO); CRMobjectManager::GetInstance()->AddObject(newObject, LAYER_UI); // pause용 이미지 newObject = new CRMchildPauseImage(); newObject->SetWidgetType(WIDGET_PAUSE_IMAGE_PLAY_CANCEL); newObject->SetPosition(0, 0); // 값 찾아서 define해야함 newObject->SetSceneType(SCENE_SELECT_MUSIC); // 필요 없지만 그냥 초기화 CRMobjectManager::GetInstance()->AddObject(newObject, LAYER_PAUSE); // title MODE용 이미지 m_ModeSelector = new CRMchildTitleModeSelector; m_ModeSelector->SetWidgetType(WIDGET_TITLE_MODE_SINGLE); m_ModeSelector->SetPosition(390, 400); m_ModeSelector->SetSceneType(SCENE_TITLE); CRMobjectManager::GetInstance()->AddObject(m_ModeSelector, LAYER_PAUSE); // UI이미지 일단 리절트 화면 newObject = new CRMchildUIResultImage(); newObject->SetPlayer( PLAYER_ONE ); newObject->SetWidgetType( WIDGET_UI_IMAGE_RESULT_LOSE_FAIL ); newObject->SetPosition( ( SCREEN_SIZE_X / 2 ) - 462 , 217 ); newObject->SetSceneType(SCENE_RESULT); CRMobjectManager::GetInstance()->AddObject(newObject, LAYER_PAUSE); newObject = new CRMchildUIResultImage(); newObject->SetPlayer( PLAYER_TWO ); newObject->SetWidgetType( WIDGET_UI_IMAGE_RESULT_LOSE_FAIL ); newObject->SetPosition( ( SCREEN_SIZE_X / 2 ) + 50 , 217 ); newObject->SetSceneType(SCENE_RESULT); CRMobjectManager::GetInstance()->AddObject(newObject, LAYER_PAUSE); // 설렉트 화면의 별있는 바 newObject = new CRMchildSelectBar(); newObject->SetWidgetType( WIDGET_UI_IMAGE_SELECT_BAR_0 ); newObject->SetPosition( 0 , 596 ); newObject->SetSceneType(SCENE_SELECT_MUSIC); CRMobjectManager::GetInstance()->AddObject(newObject, LAYER_UI); //<<<< 여기까지 이미지 자원 //>>>> 여기부터 Label 자원 //1. 포지션 위치 값 확인하고 //2. 고정 값 / 유동 값 적용 //3. 유동 값은 각 해당 위치에서 업데이트 되도록 set함수 제작 //4. visible 정리 꼭 할 것 ////////////////////////////////////////////////////////////////////////// //music select 관련 label // ////////////////////////////////////////////////////////////////////////// //P1 관련 label // ////////////////////////////////////////////////////////////////////////// //p2 관련 label // // 아이템 매니저 생성 CRMitemManager::GetInstance()->Create(); CRMchildItemDisplay* itemObject = new CRMchildItemDisplay(); itemObject->SetTier( TIER_1P_ONE ); itemObject->SetPlayer( PLAYER_ONE ); itemObject->SetPosition(ITEM_DISPLAY_POSITION_1P_X, -890); itemObject->SetSceneType(SCENE_PLAY); CRMobjectManager::GetInstance()->AddObject(itemObject, LAYER_ITEM); itemObject = new CRMchildItemDisplay(); itemObject->SetTier( TIER_1P_TWO ); itemObject->SetPlayer( PLAYER_ONE ); itemObject->SetPosition(ITEM_DISPLAY_POSITION_1P_X, -890); itemObject->SetSceneType(SCENE_PLAY); CRMobjectManager::GetInstance()->AddObject(itemObject, LAYER_ITEM); itemObject = new CRMchildItemDisplay(); itemObject->SetTier( TIER_1P_THREE ); itemObject->SetPlayer( PLAYER_ONE ); itemObject->SetPosition(ITEM_DISPLAY_POSITION_1P_X, -890); itemObject->SetSceneType(SCENE_PLAY); CRMobjectManager::GetInstance()->AddObject(itemObject, LAYER_ITEM); ////////////////////////////////////////////////////////////////////////// itemObject = new CRMchildItemDisplay(); itemObject->SetTier( TIER_2P_ONE ); itemObject->SetPlayer( PLAYER_TWO ); itemObject->SetPosition(ITEM_DISPLAY_POSITION_2P_X, -890); itemObject->SetSceneType(SCENE_PLAY); CRMobjectManager::GetInstance()->AddObject(itemObject, LAYER_ITEM); itemObject = new CRMchildItemDisplay(); itemObject->SetTier( TIER_2P_TWO ); itemObject->SetPlayer( PLAYER_TWO ); itemObject->SetPosition(ITEM_DISPLAY_POSITION_2P_X, -890); itemObject->SetSceneType(SCENE_PLAY); CRMobjectManager::GetInstance()->AddObject(itemObject, LAYER_ITEM); itemObject = new CRMchildItemDisplay(); itemObject->SetTier( TIER_2P_THREE ); itemObject->SetPlayer( PLAYER_TWO ); itemObject->SetPosition(ITEM_DISPLAY_POSITION_2P_X, -890); itemObject->SetSceneType(SCENE_PLAY); CRMobjectManager::GetInstance()->AddObject(itemObject, LAYER_ITEM); ////////////////////////////////////////////////////////////////////////// // 툴팁 추가 ////////////////////////////////////////////////////////////////////////// newObject = new CRMchildBGImage(); newObject->SetWidgetType( WIDGET_TOOLTIP_1 ); newObject->SetVisible(true); newObject->SetPosition(0, 0); newObject->SetSceneType( SCENE_SELECT_MUSIC ); CRMobjectManager::GetInstance()->AddObject(newObject, LAYER_TOOLTIP); newObject = new CRMchildBGImage(); newObject->SetWidgetType( WIDGET_TOOLTIP_2 ); newObject->SetVisible(true); newObject->SetPosition(0, 0); newObject->SetSceneType( SCENE_SELECT_MUSIC ); CRMobjectManager::GetInstance()->AddObject(newObject, LAYER_TOOLTIP); newObject = new CRMchildBGImage(); newObject->SetWidgetType( WIDGET_TOOLTIP_3 ); newObject->SetVisible(true); newObject->SetPosition(0, 0); newObject->SetSceneType( SCENE_SELECT_MUSIC ); CRMobjectManager::GetInstance()->AddObject(newObject, LAYER_TOOLTIP); ////////////////////////////////////////////////////////////////////////// CRMchildItemCardDisplay* itemCardObject = nullptr; // for ( int i = 0 ; i < 30; ++i ) // { itemCardObject = new CRMchildItemCardDisplay(); itemCardObject->SetPosition(115, 200); itemCardObject->SetSceneType(SCENE_PLAY); itemCardObject->SetPlayer(PLAYER_ONE); //itemCardObject->SetOrder(i); CRMobjectManager::GetInstance()->AddObject(itemCardObject, LAYER_CARD); itemCardObject = new CRMchildItemCardDisplay(); itemCardObject->SetPosition(627, 200); itemCardObject->SetSceneType(SCENE_PLAY); itemCardObject->SetPlayer(PLAYER_TWO); //itemCardObject->SetOrder(i); CRMobjectManager::GetInstance()->AddObject(itemCardObject, LAYER_CARD); // } return hr; }