void CPolyDlg::OnBtnModifyCorner() { CComboBox& combo = m_Combo_Corner ; //convenience int cnridx = m_Combo_Corner.GetCurSel() ; ASSERT( combo.GetCount() > 0 && cnridx >= 0 ) ; //get values from list CString itemstr ; combo.GetLBText( cnridx, itemstr ) ; Vector3D vcnr = GetCnrVector( itemstr ) ; COLORREF color = GetCnrColor( itemstr ) ; int itemnum = GetItemNum( itemstr ) ; //11/29/01 launch 2D coordinate entry dlg CVertexDlg dlg ; CString xstr, ystr ; dlg.m_X = vcnr.x ; dlg.m_Y = vcnr.y ; dlg.m_Z = vcnr.z ; dlg.m_Red = GetRValue( color ) ; dlg.m_Green = GetGValue( color ) ; dlg.m_Blue = GetBValue( color ) ; if( dlg.DoModal() == IDOK ) { int numsegs = m_Combo_Corner.GetCount() ; //06/20/03 don't allow duplicate points Vector3D vNewCrnr = Vector3D( dlg.m_X, dlg.m_Y, dlg.m_Z ) ; int matchnum = FindDupCrnr( vNewCrnr, combo ) ; //rev 09/11/03 if( matchnum > 0 && matchnum != cnridx+1 ) { //If match found, warn user and exit w/o adding to list CString csMsgstr; csMsgstr.Format("Duplicate point found at corner #%d !" , matchnum ); AfxMessageBox( csMsgstr, MB_OK | MB_ICONEXCLAMATION ); return; } //replace the original point in the corner list CString numstr, coordstr ; FormatNumStr( numstr, itemnum ) ; coordstr.Format( m_csCoordFmtStr, dlg.m_X, dlg.m_Y, dlg.m_Z, dlg.m_Red, dlg.m_Green, dlg.m_Blue ) ; combo.DeleteString( cnridx ) ; combo.InsertString( cnridx, numstr + coordstr ) ; combo.SetCurSel( cnridx ) ; UpdateControls() ; } }
int CPolyDlg::FindDupCrnr( Vector3D crnr, CComboBox& combo ) { //06/20/03 don't allow duplicate points int numsegs = combo.GetCount() ; for (int i = 0; i < numsegs; i++ ) { CString csInstr; combo.GetLBText(i, csInstr ); int nCornerNum = GetItemNum( csInstr ) ; Vector3D v = GetCnrVector( csInstr ) ; if (v.x == crnr.x && v.y == crnr.y )//Matching coordinate set found { //If match found, return corner number return nCornerNum ; } } return -1 ; //no match found }
int CPolyDlg::RenumberList( CComboBox* pCombo ) { //Purpose: renumber points after combobox insert/delete operations //Inputs: pointer to combobox to renumber //Outputs: // 1) renumbered point list // 2) returns number of points in list // 3) item highlighting removed CString itmstr, itmnumstr, coordstr ; int itemnum ; int numitems = pCombo->GetCount() ; for( int itmidx = 0; itmidx < numitems; itmidx++ ) { pCombo->GetLBText(itmidx, itmstr ) ; if( ( itemnum = GetItemNum( itmstr ) ) <= 0 ) { AfxMessageBox( itmstr + " is an invalid item!" ) ; } else { //09/20/03 rev to extract item# & cnr vals & then //reconstruct string using m_csCoordFmtStr FormatNumStr( itmnumstr, itmidx+1 ) ; Vector3D v = GetCnrVector( itmstr ) ; coordstr.Format( m_csCoordFmtStr, v.x, v.y, v.z ) ; pCombo->DeleteString( itmidx ) ; pCombo->InsertString( itmidx, itmnumstr+coordstr ) ; } } pCombo->SetCurSel( -1 ) ; return numitems ; //changed 6/12/00 }
void CPolyDlg::OnEnterKey( UINT ctlID ) { CString csMsg, csEditstr, csItemNum, newitmstr ; int itemnum ; CComboBox& combo = m_Combo_Corner ; //convenience //Get editbox string CWnd* pWnd = (combo.GetWindow(GW_CHILD)) ; CWnd* pEditWnd = (pWnd->GetNextWindow()); //pointer to editbox window pEditWnd->GetWindowText( csEditstr ); csEditstr.TrimLeft() ; csEditstr.TrimRight() ; int numtokens = GetNumTokens( csEditstr ) ; int numitems = combo.GetCount() ; //check for too few or too many tokens in the entry string if( numtokens < 2 ) { csMsg = "Each entry must have at least X & Y positions " ; AfxMessageBox( csMsg + "\n" + csEditstr ) ; return ; } else if( numtokens > 7 ) { csMsg = "Each line can have no more than seven items" ; AfxMessageBox( csMsg + "\n" + csEditstr ) ; return ; } //OK, 2 or 3 tokens: get valid X/Y pos Vector3D vcrnr = GetCnrVector( csEditstr ) ; //3 tokens are considered to be [X Position] [Y Position] [Z Position] if( numtokens == 3 ) { //prepend item num & add to end itemnum = numitems + 1 ; FormatNumStr( csItemNum, itemnum ) ; newitmstr.Format( m_csCoordFmtStr, vcrnr.x, vcrnr.y, vcrnr.z, 0, 0, 0 ) ; csEditstr = csItemNum + newitmstr ; combo.AddString( csEditstr ) ; itemnum = GetItemNum( csEditstr ) ; } // 6 tokens are assumed to be [X Position] [Y Position] [Z Position] [R] [G] [B] else if( numtokens == 6 ) { COLORREF col = GetCnrColor( csEditstr ) ; int R = GetRValue( col ) ; int G = GetGValue( col ) ; int B = GetBValue( col ) ; //prepend item num & add to end itemnum = numitems + 1 ; FormatNumStr( csItemNum, itemnum ) ; newitmstr.Format( m_csCoordFmtStr, vcrnr.x, vcrnr.y, vcrnr.z, R, G, B ) ; csEditstr = csItemNum + newitmstr ; combo.AddString( csEditstr ) ; itemnum = GetItemNum( csEditstr ) ; } //otherwise we assume [Item #] [X Position] [Y Position] [Z Position] [R] [G] [B] else { itemnum = GetItemNum( csEditstr ) ; COLORREF col = GetCnrColor( csEditstr ) ; int R = GetRValue( col ) ; int G = GetGValue( col ) ; int B = GetBValue( col ) ; //insert at item number or add to end if( itemnum > numitems ) { //prepend correct item num & add to end itemnum = numitems + 1 ; FormatNumStr( csItemNum, itemnum ) ; newitmstr.Format( m_csCoordFmtStr, vcrnr.x, vcrnr.y, vcrnr.z, R, G, B ) ; csEditstr = csItemNum + newitmstr ; combo.AddString( csEditstr ) ; } else if( itemnum < numitems ) { combo.DeleteString( itemnum - 1 ) ; FormatNumStr( csItemNum, itemnum ) ; newitmstr.Format( m_csCoordFmtStr, vcrnr.x, vcrnr.y, vcrnr.z, R, G, B ) ; csEditstr = csItemNum + newitmstr ; combo.InsertString( itemnum - 1, csEditstr ) ; } else //itemnum points to last string { combo.DeleteString( itemnum - 1 ) ; FormatNumStr( csItemNum, itemnum ) ; newitmstr.Format( m_csCoordFmtStr, vcrnr.x, vcrnr.y, vcrnr.z, R, G, B ) ; csEditstr = csItemNum + newitmstr ; combo.AddString( csEditstr ) ; } } //leave this item selected combo.SetCurSel( itemnum - 1 ) ; UpdateControls() ; //added 07/10/03 }
//============================================================================= // 更新処理 //============================================================================= void UpdateGameManager(void) { #ifdef _DEBUG if(GetKeyboardTrigger(DIK_F1)) { g_nGameMode = SELECTMODE_PLAY; } if(GetKeyboardTrigger(DIK_F2)) { g_nGameMode = SELECTMODE_WALLEDIT; } if(GetKeyboardTrigger(DIK_F3)) { g_nGameMode = SELECTMODE_GIMMICKEDIT; } if(GetKeyboardTrigger(DIK_F4)) { g_nGameMode = SELECTMODE_PLAYEREDIT; } if(GetKeyboardTrigger(DIK_F5)) { g_nGameMode = SELECTMODE_DELETE; } if(GetKeyboardTrigger(DIK_F6)) { g_nGameMode = SELECTMODE_SCENECHANGE; } if(GetKeyboardTrigger(DIK_F7)) { g_nGameMode = SELECTMODE_PLAYERBAR_NUM; } if(GetKeyboardTrigger(DIK_F8)) { g_nGameMode = SELECTMODE_ITEMNUMEDIT; } if(g_nGameMode != SELECTMODE_PLAY) GetBackG()[BACKGROUND_EDIT_NET].bUse = true; else GetBackG()[BACKGROUND_EDIT_NET].bUse = false; #endif switch (g_nGameMode) { case SELECTMODE_PLAY: { PrintDebugProc("【ゲームモード】\n"); if(GetTimeCounter()->fCurrentTime > TIME_15) g_bIsPlay = false; if(!g_bIsPlay) { if(IsMouseRightTriggered()) { int nGimNum = -1; int nItemNum = GetItemNum()->nItemLockTime; bool bIsLock = false; if(IsGimmickLock(&nGimNum, &bIsLock, &nItemNum) == true) { if(bIsLock == true) { SetItem(D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f), ITEM_TYPE_01, nGimNum); UpdataItemNum(-1); } else { DeleteItem(nGimNum); UpdataItemNum(1); } } } } break; } case SELECTMODE_WALLEDIT: { PrintDebugProc("【壁を編集するモード】\n"); WallCreateMode(); break; } case SELECTMODE_GIMMICKEDIT: { PrintDebugProc("【ギミック編集モード】\n"); GimmickCreateMode(); break; } case SELECTMODE_PLAYEREDIT: { PrintDebugProc("【プレイヤー編集モード】\n"); if(IsMouseLeftPressed()) IsMouseHitPlayer(); PlayerEdit(); break; } case SELECTMODE_DELETE: { PrintDebugProc("【削除モード】\n"); DeleteGimmick(); DeleteWall(); break; } case SELECTMODE_SCENECHANGE: { PrintDebugProc("【ステージ切り替えるモード】\n"); if(IsMouseRightTriggered()) { if(*GetSceneNum() < SCENE_TYPE_MAX) (*GetSceneNum())++; if(*GetSceneNum() == SCENE_TYPE_MAX) *GetSceneNum() = 0; g_bIsSceneInit = true; } if(g_bIsSceneInit == true) { g_bIsSceneInit = false; switch (*GetSceneNum()) { case SCENE_01: // 从文件中读取 LoadData(SCENE_01); break; case SCENE_02: // 从文件中读取 LoadData(SCENE_02); break; case SCENE_03: // 从文件中读取 LoadData(SCENE_03); break; case SCENE_04: // 从文件中读取 LoadData(SCENE_04); break; case SCENE_05: // 从文件中读取 LoadData(SCENE_05); break; default: break; } // 読み込むデータを初期化 InitDataPlayer(); InitDataWall(); InitDataGimmick(); InitDataPlayerbar(); for(int nCntGim = 0; nCntGim < MAX_GIMMICK; nCntGim++) { // 根据补完的数据对机关场景进行位置和运动预处理 SetupGimmickTrack(nCntGim); *GetCleanupSwitch() = false; } } break; } case SELECTMODE_PLAYERBAR_NUM: { PrintDebugProc("【時間軸編集モード】\n"); PrintDebugProc("数字キー「1」 時間軸数:1\n"); PrintDebugProc("数字キー「2」 時間軸数:2\n"); PrintDebugProc("数字キー「3」 時間軸数:3\n"); if(GetKeyboardTrigger(DIK_1)) { for(int nCntPlayBar = 0; nCntPlayBar < MAX_PLAYBAR; nCntPlayBar++) { //if(g_pPlaybar_GM[nCntPlayBar].bUse == true) g_pPlaybar_GM[nCntPlayBar].bUse = false; } for(int nCntGim = 0; nCntGim < MAX_GIMMICK; nCntGim++) { if(g_pGimmick_GM[nCntGim].bUse) { g_pGimmick_GM[nCntGim].nPriorityNum01 = -1; g_pGimmick_GM[nCntGim].nPriorityNum02 = -1; g_pGimmick_GM[nCntGim].nPriorityNum03 = -1; } } SetPlaybar(D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f), PLAYBAR_3_1); PlaybarNumCount(); } if(GetKeyboardTrigger(DIK_2)) { for(int nCntPlayBar = 0; nCntPlayBar < MAX_PLAYBAR; nCntPlayBar++) { //if(g_pPlaybar_GM[nCntPlayBar].bUse == true) g_pPlaybar_GM[nCntPlayBar].bUse = false; } for(int nCntGim = 0; nCntGim < MAX_GIMMICK; nCntGim++) { if(g_pGimmick_GM[nCntGim].bUse) { g_pGimmick_GM[nCntGim].nPriorityNum01 = -1; g_pGimmick_GM[nCntGim].nPriorityNum02 = -1; g_pGimmick_GM[nCntGim].nPriorityNum03 = -1; } } SetPlaybar(D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f), PLAYBAR_3_1); SetPlaybar(D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f), PLAYBAR_3_2); PlaybarNumCount(); } if(GetKeyboardTrigger(DIK_3)) { for(int nCntPlayBar = 0; nCntPlayBar < MAX_PLAYBAR; nCntPlayBar++) { //if(g_pPlaybar_GM[nCntPlayBar].bUse == true) g_pPlaybar_GM[nCntPlayBar].bUse = false; } for(int nCntGim = 0; nCntGim < MAX_GIMMICK; nCntGim++) { if(g_pGimmick_GM[nCntGim].bUse) { g_pGimmick_GM[nCntGim].nPriorityNum01 = -1; g_pGimmick_GM[nCntGim].nPriorityNum02 = -1; g_pGimmick_GM[nCntGim].nPriorityNum03 = -1; } } SetPlaybar(D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f), PLAYBAR_3_1); SetPlaybar(D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f), PLAYBAR_3_2); SetPlaybar(D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f), PLAYBAR_3_3); PlaybarNumCount(); } break; } case SELECTMODE_ITEMNUMEDIT: { PrintDebugProc("【アイテム個数編集モード】\n"); PrintDebugProc("【メニュー】 【アイテム】 【個数】\n"); PrintDebugProc("数字キー「1」 時間固定アイテム:%d\n\n", g_pItemNum_GM->nItemLockTime); if(GetKeyboardTrigger(DIK_1)) { g_nMenuSelect_GM = 1; } switch (g_nMenuSelect_GM) { case 1: PrintDebugProc("矢印キー【左】、【右】 【プラス/マイナス 1】\n"); PrintDebugProc("矢印キー【上】、【下】 【プラス/マイナス 5】\n"); if(GetKeyboardRepeat(DIK_LEFT)) { g_pItemNum_GM->nItemLockTime -= 1; if(g_pItemNum_GM->nItemLockTime < 0) g_pItemNum_GM->nItemLockTime = 0; } if(GetKeyboardRepeat(DIK_RIGHT)) { g_pItemNum_GM->nItemLockTime += 1; if(g_pItemNum_GM->nItemLockTime > 9) g_pItemNum_GM->nItemLockTime = 9; } if(GetKeyboardRepeat(DIK_DOWN)) { g_pItemNum_GM->nItemLockTime -= 5; if(g_pItemNum_GM->nItemLockTime < 0) g_pItemNum_GM->nItemLockTime = 0; } if(GetKeyboardRepeat(DIK_UP)) { g_pItemNum_GM->nItemLockTime += 5; if(g_pItemNum_GM->nItemLockTime > 9) g_pItemNum_GM->nItemLockTime = 9; } break; default: break; } } default: break; } if(!g_bIsPlay) { switch (*GetSceneNum()) { case SCENE_01: PrintDebugProc("【SCENE_01】\n"); // 今のシーンをセーフする if(IsMouseCenterTriggered()) SaveData(SCENE_01); break; case SCENE_02: PrintDebugProc("【SCENE_02】\n"); if(IsMouseCenterTriggered()) SaveData(SCENE_02); break; case SCENE_03: PrintDebugProc("【SCENE_03】\n"); if(IsMouseCenterTriggered()) SaveData(SCENE_03); break; case SCENE_04: PrintDebugProc("【SCENE_04】\n"); if(IsMouseCenterTriggered()) SaveData(SCENE_04); break; case SCENE_05: PrintDebugProc("【SCENE_05】\n"); if(IsMouseCenterTriggered()) SaveData(SCENE_05); break; default: break; } } switch(*GetMode()) { case GAMEMODE_LOGO: break; case GAMEMODE_TITLE: { if(GetKeyboardTrigger(DIK_RETURN) || IsMouseLeftTriggered()) SetFade(FADE_OUT, FADE_IN, GAMEMODE_STAGE_SELECT); break; } case GAMEMODE_STAGE_SELECT: { g_bIsStop = true; g_bIsPlay = false; if(GetKeyboardTrigger(DIK_RETURN)) SetFade(FADE_OUT, FADE_IN, GAMEMODE_GAME); if(IsMouseLeftTriggered()) { int pIconNum = 0; if(IsMouseHitIcon(&pIconNum) == true) { *GetSceneNum() = GetGameElement()[pIconNum].nType; g_bIsSceneInit = true; } } if(g_bIsSceneInit == true) { g_bIsSceneInit = false; switch (*GetSceneNum()) { case SCENE_01: // 从文件中读取 LoadData(SCENE_01); break; case SCENE_02: // 从文件中读取 LoadData(SCENE_02); break; case SCENE_03: // 从文件中读取 LoadData(SCENE_03); break; case SCENE_04: // 从文件中读取 LoadData(SCENE_04); break; case SCENE_05: // 从文件中读取 LoadData(SCENE_05); break; default: break; } // 読み込むデータを初期化 InitDataPlayer(); InitDataWall(); InitDataGimmick(); InitDataPlayerbar(); for(int nCntGim = 0; nCntGim < MAX_GIMMICK; nCntGim++) { // 根据补完的数据对机关场景进行位置和运动预处理 SetupGimmickTrack(nCntGim); *GetCleanupSwitch() = false; } //*GetMode() = GAMEMODE_GAME; SetFade(FADE_OUT, FADE_IN, GAMEMODE_GAME); } break; } case GAMEMODE_GAME: break; case GAMEMODE_END: break; default: break; } }
// プロトタイプ宣言 //***************************************************************************** //***************************************************************************** // グローバル変数 //***************************************************************************** int g_nGameMode; int g_nMenuSelect_GM; // 選択したメニュー bool g_bIsPlay; // プレー bool g_bIsStop; // 停止 bool g_bIsPause; // ポーズ bool g_bIsSceneInit; // シーンの初期化 PLAYBAR* g_pPlaybar_GM = GetPlaybar(); // 時間軸のデータゲット GIMMICK* g_pGimmick_GM = GetGimmickData(); // ギミックのデータゲット ITEM_NUMBER* g_pItemNum_GM = GetItemNum(); // アイテム個数のデータゲット //============================================================================= // 初期化処理 //============================================================================= HRESULT InitGameManager(void) { switch (SCENE_MODE) { case SCENE_01: // 从文件中读取 LoadData(SCENE_01); InitDataWall(); InitDataGimmick(); InitDataPlayer(); InitDataPlayerbar();