//----------------------------------------------------------------------------------------------- // // EditParameterDialog.cpp // * 환경 값 편집 다이얼로그 // //----------------------------------------------------------------------------------------------- #include "stdafx.h" #ifdef _EDIT_ENVIRONMENT_ #include "StdAfx.h" #include #include #include "KTypes.h" #include "Resource.h" #include "EditParameterDialog.h" #include "SGameSky.h" #include "SGameWorld.h" #include "SGameSystem.h" extern SGameSystem * g_pCurrentGameSystem; namespace { const char* aDesc[ CEditParameterDialog::CB_MAX ] = { "start", "mid", "end", "fog", "cloud", "light_dff", "light_spc", "light_amb" }; } //------------------------------------------------------------------------------------------------------------------------------------------------------- WinBitmap::SCreatePR::SCreatePR() { w = h =0 ; bitCount = 32; r = g = b = 255; } WinBitmap::SCreatePR::SCreatePR(int w_, int h_, BYTE bitCount_, BYTE r_, BYTE g_, BYTE b_) { w = w_; h = h_; r = r_; g = g_; b = b_; bitCount = bitCount_; } int WinBitmap::create() { m_pRaster = NULL; m_pPalette = NULL; return 1; } int WinBitmap::loadMemory(BYTE* pMemBuf, int iSizeMemoryBuf) { if(pMemBuf == NULL) return 0; m_sBmpFileHeader = *(LPBITMAPFILEHEADER)pMemBuf; iSizeMemoryBuf -= m_sBmpFileHeader.bfOffBits; m_sBmpInfo = *(LPBITMAPINFO)(pMemBuf + sizeof(BITMAPFILEHEADER)); // BITMAPINFO 과 BITMAPINFOHEADER 구조체의 포인터를 초기화 m_sBmpInfoHeader = *(LPBITMAPINFOHEADER)(pMemBuf + sizeof(BITMAPFILEHEADER)); m_pRaster = (BYTE*)(pMemBuf + m_sBmpFileHeader.bfOffBits); // 비트맵의 컬러테이블의 포인터를 계산 m_bLoadOK = FALSE; return 1; } int WinBitmap::loadFile(const char* pName) { if(pName == NULL) return 0; FILE* pFile = fopen(pName, "r"); // open file if(pFile == NULL) return -1; int nPos = fseek(pFile, 0, SEEK_END); // move file pointer if(nPos) { fclose(pFile); return -2; } nPos = ftell(pFile); // get size fseek(pFile, 0, SEEK_SET); // move to begin file pointer m_pBuffer = new BYTE[nPos]; // nPos -> buffer Size fread(m_pBuffer, sizeof(BYTE) * nPos, 1, pFile); // read file fclose(pFile); // close file loadMemory(m_pBuffer, nPos); // load memory return 1; } int WinBitmap::load(const TCHAR* pName) { if(!pName) return 0; UINT dwStyle = LR_LOADFROMFILE; HANDLE hde = ::LoadImage(NULL, pName, IMAGE_BITMAP, 0, 0, dwStyle); if(hde) { m_bLoadOK = TRUE; return 1; } m_bLoadOK = FALSE; return 0; } int WinBitmap::destroy() { if(m_pBuffer) { delete [] m_pBuffer; m_pBuffer = NULL; } m_bLoadOK = FALSE; return 1; } bool WinBitmap::makeEmptyBitmap(SCreatePR* pPR) { if(pPR == NULL) return false; int nSize = (pPR->w * (pPR->bitCount / 8)) * pPR->h; m_sBmpFileHeader.bfType = 19778; m_sBmpFileHeader.bfSize = 0; m_sBmpFileHeader.bfReserved1 = 0; m_sBmpFileHeader.bfReserved2 = 0; m_sBmpFileHeader.bfOffBits = 54; m_sBmpInfoHeader.biSize = 40; m_sBmpInfoHeader.biWidth = pPR->w; m_sBmpInfoHeader.biHeight = pPR->h; m_sBmpInfoHeader.biPlanes = 1; m_sBmpInfoHeader.biBitCount = pPR->bitCount; m_sBmpInfoHeader.biCompression = 0; m_sBmpInfoHeader.biSizeImage = nSize; m_sBmpInfoHeader.biXPelsPerMeter = 0; m_sBmpInfoHeader.biYPelsPerMeter = 0; m_sBmpInfoHeader.biClrUsed = 0; m_sBmpInfoHeader.biClrImportant = 0; m_sBmpInfo.bmiHeader.biSize = 40; m_sBmpInfo.bmiHeader.biWidth = pPR->w; m_sBmpInfo.bmiHeader.biHeight = pPR->w; m_sBmpInfo.bmiHeader.biPlanes = 1; m_sBmpInfo.bmiHeader.biBitCount = pPR->bitCount; m_sBmpInfo.bmiHeader.biCompression = 0; m_sBmpInfo.bmiHeader.biSizeImage = nSize; m_sBmpInfo.bmiHeader.biXPelsPerMeter = 0; m_sBmpInfo.bmiHeader.biYPelsPerMeter = 0; m_sBmpInfo.bmiHeader.biClrUsed = 0; m_sBmpInfo.bmiHeader.biClrImportant = 0; m_pBuffer = new BYTE[nSize]; m_pRaster = m_pBuffer; if(changeColor(pPR->r, pPR->g, pPR->b) == false) return false; return true; } int WinBitmap::draw(HDC hdc, HWND hWnd, int x, int y, int w, int h, UINT uType) { if(hWnd<0) return 0; // Copy the bits from the in-memory device context to the on- // screen device context to do the painting. Use the computed center // point for the target offset. if(uType == STRECH) { StretchDIBits(hdc, x, y, w, h, 0, 0, m_sBmpInfoHeader.biWidth,m_sBmpInfoHeader.biHeight, (VOID*)m_pRaster, &m_sBmpInfo, DIB_RGB_COLORS, SRCCOPY); } else if(uType == COPY) { StretchDIBits(hdc, x, y, w, h, 0, 0, m_sBmpInfoHeader.biWidth,m_sBmpInfoHeader.biHeight, (VOID*)m_pRaster, &m_sBmpInfo, DIB_RGB_COLORS, SRCCOPY); } return 1; } bool WinBitmap::changeColor(BYTE r, BYTE g, BYTE b) { int nBitCount = m_sBmpInfoHeader.biBitCount / 8; int x,y; for(y=0; y id || MAX_CONTROL <= id ) return ; char str[128]; GetWindowText( hIDControl[ id ].hWnd_edit, str, 128 ); int nCost = atoi(str); if( nCost < 0 ) { nCost = 0; sprintf(str, "%d", nCost); SetWindowText( hIDControl[ id ].hWnd_edit, str ); } if( nCost > 255 ) { nCost = 255; sprintf(str, "%d", nCost); SetWindowText( hIDControl[ id ].hWnd_edit, str ); } color[ R_COLORID + id ] = nCost; SendMessage( hIDControl[ id ].hWnd_progress, TBM_SETPOS, 1, color[ R_COLORID + id ] ); colorBox.changeColor(color[ R_COLORID ], color[ G_COLORID ], color[ B_COLORID ]); RECT rt; SetRect(&rt, rtColor.left, rtColor.top, rtColor.left + rtColor.right, rtColor.top + rtColor.bottom); ::InvalidateRect(hParent, &rt, TRUE); } void SColorBar::UpdateColorProgress(int id) { if( R_CONTROL > id || MAX_CONTROL <= id ) return ; if( hCheck.bCheck == TRUE ) { LRESULT nPos = SendMessage( hIDControl[ id ].hWnd_progress, TBM_GETPOS, 0, 0 ); char str[64]; sprintf(str, "%d", nPos); for(int x=R_COLORID; x> 16; int g = (0x0000FF00 & Color) >> 8; int r = (0x000000FF & Color); char str[256]; sprintf(str, "%d", r); SetWindowText( hIDControl[ 0 ].hWnd_edit, str ); UpdateColorEdit( 0 ); sprintf(str, "%d", g); SetWindowText( hIDControl[ 1 ].hWnd_edit, str ); UpdateColorEdit( 1 ); sprintf(str, "%d", b); SetWindowText( hIDControl[ 2 ].hWnd_edit, str ); UpdateColorEdit( 2 ); return TRUE; } } } break; } return FALSE; } //------------------------------------------------------------------------------------------------------------------------------------------------------- CEditParameterDialog& GetEditParameterDialog() { static CEditParameterDialog g_EditParameterDialog; return g_EditParameterDialog; } CEditParameterDialog::CEditParameterDialog(void) { m_bInitData = false; m_bApply = false; } CEditParameterDialog::~CEditParameterDialog(void) { Destroy(); m_bInitData = false; } void CEditParameterDialog::Create(HWND hWnd) { Init( hWnd ); if( 1 != LoadData() ) { int k=0; } m_bInitData = true; ApplyDataTool( APPLY_BOTH ); } void CEditParameterDialog::Init(HWND hWnd) { m_hWndDialog = hWnd; int wh = 60; int py = 52; int px = 57; int gap = 10; int count1 = 6; WinBitmap::SCreatePR pr(wh, wh, 32, 0, 0, 0); int aControlID[ 16 ][ 7 ] = { { EDIT_R, EDIT_G, EDIT_B, SLIDER_R, SLIDER_G, SLIDER_B , CHECK_ALL_0 }, // sky start { EDIT_R2, EDIT_G2, EDIT_B2, SLIDER_R2, SLIDER_G2, SLIDER_B2, CHECK_ALL_1 }, // sky mid { EDIT_R3, EDIT_G3, EDIT_B3, SLIDER_R3, SLIDER_G3, SLIDER_B3, CHECK_ALL_2 }, // sky end { EDIT_R4, EDIT_G4, EDIT_B4, SLIDER_R4, SLIDER_G4, SLIDER_B4, CHECK_ALL_3 }, // fog { EDIT_R5, EDIT_G5, EDIT_B5, SLIDER_R5, SLIDER_G5, SLIDER_B5, CHECK_ALL_4 }, // cloud { EDIT_R6, EDIT_G6, EDIT_B6, SLIDER_R6, SLIDER_G6, SLIDER_B6, CHECK_ALL_10 }, // light diffuse { EDIT_R7, EDIT_G7, EDIT_B7, SLIDER_R7, SLIDER_G7, SLIDER_B7, CHECK_ALL_12 }, // light sepcular { EDIT_R8, EDIT_G8, EDIT_B8, SLIDER_R8, SLIDER_G8, SLIDER_B8, CHECK_ALL_14 }, // light ambient { EDIT_ER , EDIT_EG , EDIT_EB , SLIDER_ER , SLIDER_EG , SLIDER_EB, CHECK_ALL_5 }, // sky start { EDIT_ER2, EDIT_EG2, EDIT_EB2, SLIDER_ER2, SLIDER_EG2, SLIDER_EB2, CHECK_ALL_6 }, // sky mid { EDIT_ER3, EDIT_EG3, EDIT_EB3, SLIDER_ER3, SLIDER_EG3, SLIDER_EB3, CHECK_ALL_7 }, // sky end { EDIT_ER4, EDIT_EG4, EDIT_EB4, SLIDER_ER4, SLIDER_EG4, SLIDER_EB4, CHECK_ALL_8 }, // fog { EDIT_ER5, EDIT_EG5, EDIT_EB5, SLIDER_ER5, SLIDER_EG5, SLIDER_EB5, CHECK_ALL_9 }, // cloud { EDIT_ER6, EDIT_EG6, EDIT_EB6, SLIDER_ER6, SLIDER_EG6, SLIDER_EB6, CHECK_ALL_11 }, // light { EDIT_ER7, EDIT_EG7, EDIT_EB7, SLIDER_ER7, SLIDER_EG7, SLIDER_EB7, CHECK_ALL_13 }, // light diffuse { EDIT_ER8, EDIT_EG8, EDIT_EB8, SLIDER_ER8, SLIDER_EG8, SLIDER_EB8, CHECK_ALL_15 }, // light sepcular }; int aPos[ 8 ] = { 52, 122, 192, 278, 317 + 65, 417 + 115, 592 + 15, 667 + 15 }; int nType = DATA_ORIGIN; for(int x=0; x < 16; x++) { if( x == 8 ) { nType = DATA_EDITING; py = 52; px = 457; } SColorBar* pCB = new SColorBar( hWnd, &aControlID[ x ][ 0 ], &aControlID[ x ][ 3 ], aControlID[ x ][ 6 ], &pr ); SetRect( &pCB->rtColor, px, aPos[ x % 8 ], wh, wh ); m_aParam[ nType ].vcColorCtrl.push_back( pCB ); } int aSliderEditID[ 10 ][ 2 ] = { { EDIT_FOG_START, SLIDER_FOG_START, }, { EDIT_FOG_END, SLIDER_FOG_END }, // fog origin { EDIT_DRY, SLIDER_DRY, }, { EDIT_WET, SLIDER_WET }, // sound origin { EDIT_SKYMID, SLIDER_SKYMID }, // sky mid height percent { EDIT_FOG_START_E, SLIDER_FOG_START_E, }, { EDIT_FOG_END_E, SLIDER_FOG_END_E }, // fog editind { EDIT_DRY_E, SLIDER_DRY_E, }, { EDIT_WET_E, SLIDER_WET_E }, // sound editind { EDIT_SKYMID_E, SLIDER_SKYMID_E }, // sky mid height percent }; nType = DATA_ORIGIN; for(int x=0; x < 10; x++) { if( x == 5 ) nType = DATA_EDITING; HWNDIDS* pHW = new HWNDIDS( aSliderEditID[ x ][ 0 ], GetDlgItem( hWnd, aSliderEditID[ x ][ 0 ] ), aSliderEditID[ x ][ 1 ], GetDlgItem( hWnd, aSliderEditID[ x ][ 1 ] ) ); if ( x == 0 || x == 1 || x == 5 || x == 6 ) initCost( pHW, 0, 9000 ); else if( x == 4 || x == 9 ) initCost( pHW, 0, 1000 ); else initCost( pHW, 0, 255 ); m_aParam[ nType ].vSilderEdit.push_back( pHW ); } int aFogCtrl[2][2] = { { CHECK_FOG_START, SE_START_FOG }, { CHECK_FOG_END, SE_END_FOG } }; for(int x=0; x < 2; x++) { HWND hWndCtrl = GetDlgItem(hWnd, aFogCtrl[x][0] ); if( hWndCtrl ) { SendMessage( hWndCtrl, BM_SETCHECK, BST_CHECKED, 0 ); ShowFogModel( true, aFogCtrl[x][1] ); } } SGameWorld* pGameWorld = dynamicCast(g_pCurrentGameSystem->GetGame()); if( pGameWorld == NULL ) return ; pGameWorld->ShowFogModel( true ); } void CEditParameterDialog::initCost(HWNDIDS* pIDSet, int min, int max) { if( pIDSet == NULL ) return ; SendMessage( pIDSet->hWnd_progress, TBM_SETRANGE, false, MAKELPARAM(min, max) ); SendMessage( pIDSet->hWnd_progress, TBM_SETPOS, NULL, 0 ); SendMessage( pIDSet->hWnd_edit, WM_SETTEXT, 0, (LPARAM)L"0" ); } void CEditParameterDialog::Destroy() { for(int y=0; y(g_pCurrentGameSystem->GetGame()); if( pGameWorld == NULL ) return ; pGameWorld->ShowFogModel( false ); } void CEditParameterDialog::Paint(HWND hWnd) { if( hWnd == NULL ) return ; PAINTSTRUCT ps; HDC hdc = ::BeginPaint(hWnd, &ps); if( hdc == NULL ) return; for(int y=0; yPaint(hdc); } } ::EndPaint(hWnd, &ps); } void CEditParameterDialog::UpdateEdit(HWNDIDS* pIDSet) { if( pIDSet == NULL ) return ; char str[128]; GetWindowText( pIDSet->hWnd_edit, str, 128 ); int nCost = atoi(str); if( pIDSet->id_edit != EDIT_FOG_START && pIDSet->id_edit != EDIT_FOG_END && pIDSet->id_edit != EDIT_DRY && pIDSet->id_edit != EDIT_WET && pIDSet->id_edit != EDIT_SKYMID && pIDSet->id_edit != EDIT_FOG_START_E && pIDSet->id_edit != EDIT_FOG_END_E && pIDSet->id_edit != EDIT_DRY_E && pIDSet->id_edit != EDIT_WET_E && pIDSet->id_edit != EDIT_SKYMID_E ) { if( nCost > 255 ) { nCost = 255; sprintf(str, "%d", nCost); SetWindowText( pIDSet->hWnd_edit, str ); } } if( nCost < 0 ) { nCost = 0; sprintf(str, "%d", nCost); SetWindowText( pIDSet->hWnd_edit, str ); } SendMessage(pIDSet->hWnd_progress, TBM_SETPOS, 1, nCost ); pIDSet->cost = nCost; if( pIDSet->id_edit == EDIT_SKYMID || pIDSet->id_edit == EDIT_SKYMID_E ) { int nCtrlID = EDIT_SKYMID_RESULT; if( pIDSet->id_progress == SLIDER_SKYMID_E ) nCtrlID = EDIT_SKYMID_RESULT_E; HWND hW = GetDlgItem(m_hWndDialog, nCtrlID); if( hW ) { float fPercent = (float)nCost / 1000.0f; sprintf(str, "%.3f", fPercent); SetWindowText(hW, str); } } } void CEditParameterDialog::UpdateProgress(HWNDIDS* pIDSet) { if( pIDSet == NULL ) return ; LRESULT nPos = SendMessage( pIDSet->hWnd_progress, TBM_GETPOS, 0, 0 ); char str[64]; sprintf(str, "%d", nPos); SendMessage( pIDSet->hWnd_edit, WM_SETTEXT, 0, (LPARAM)str ); pIDSet->cost = nPos; if( pIDSet->id_progress == SLIDER_SKYMID || pIDSet->id_progress == SLIDER_SKYMID_E ) { int nCtrlID = EDIT_SKYMID_RESULT; if( pIDSet->id_progress == SLIDER_SKYMID_E ) nCtrlID = EDIT_SKYMID_RESULT_E; HWND hW = GetDlgItem(m_hWndDialog, nCtrlID); if( hW ) { float fPercent = (float)nPos / 1000.0f; char str[256]; sprintf(str, "%.3f", fPercent); SetWindowText(hW, str); } } } void CEditParameterDialog::GetRGB(SColorBar* pColorBar, char* pBuffer) { if( pColorBar == NULL || pBuffer == NULL ) return ; char sep[] = ("\t"); char* tokn = strtok(pBuffer, sep); if(tokn == NULL) return ; pColorBar->color[SColorBar::R_COLORID] = atoi(tokn); tokn = strtok(NULL, sep); if(tokn == NULL) return ; pColorBar->color[SColorBar::G_COLORID] = atoi(tokn); tokn = strtok(NULL, sep); if(tokn == NULL) return ; pColorBar->color[SColorBar::B_COLORID] = atoi(tokn); } void CEditParameterDialog::GetFogInfo(HWNDIDS* pStart, HWNDIDS* pEnd, char* pBuffer) { if( pStart == NULL || pEnd == NULL || pBuffer == NULL ) return ; char sep[] = ("\t"); char* tokn = strtok(pBuffer, sep); if(tokn == NULL) return ; pStart->cost = atoi(tokn); tokn = strtok(NULL, sep); if(tokn == NULL) return ; pEnd->cost = atoi(tokn); } void CEditParameterDialog::GetSound(HWNDIDS* pDry, HWNDIDS* pWet, char* pBuffer) { if( pDry == NULL || pWet == NULL || pBuffer == NULL ) return ; char sep[] = ("\t"); char* tokn = strtok(pBuffer, sep); if(tokn == NULL) return ; pDry->cost = atoi(tokn); tokn = strtok(NULL, sep); if(tokn == NULL) return ; pWet->cost = atoi(tokn); } void CEditParameterDialog::GetPercent(HWNDIDS* pCtrl, char* pBuffer) { if( pCtrl == NULL || pBuffer == NULL ) return ; char sep[] = ("\t"); char* tokn = strtok(pBuffer, sep); if(tokn == NULL) return ; float fCost = atof(tokn); pCtrl->cost = int(fCost * 1000.0f); } int CEditParameterDialog::LoadData() { FILE* ptr_file = fopen("environment_parameter.txt", "rt"); if(NULL == ptr_file) return 0; int nType = 0; int nCount1 = 0; int nCount2 = 0; char buffer[256] = {0}; bool bLoop = TRUE; char sep[] = ("\t"); while(bLoop) { fgets(buffer, 256, ptr_file); char* tokn = strtok(buffer, sep); if(tokn == NULL) break; if (tokn[0] == ('/') && tokn[1] == ('/')) continue ; else if(tokn[0] == EOF) break ; else if(strncmp(tokn, "**end**", strlen("**end**")) == 0) { break; } else if(tokn[0] == ('*') && tokn[1] == ('*')) continue ; else if(strncmp(tokn, "Origin Data", strlen("Origin Data")) == 0) { nType = DATA_ORIGIN; } else if(strncmp(tokn, "Editing Data", strlen("Editing Data")) == 0) { nType = DATA_EDITING; } else if(strncmp(tokn, "fog : Start End", strlen("fog : Start End")) == 0) { fgets(buffer, 256, ptr_file); GetSound( m_aParam[ nType ].vSilderEdit[ SE_START_FOG ], m_aParam[ nType ].vSilderEdit[ SE_END_FOG ], buffer ); } else if(strncmp(tokn, "sound : Dry Wet", strlen("sound : Dry Wet")) == 0) { fgets(buffer, 256, ptr_file); GetSound( m_aParam[ nType ].vSilderEdit[ SE_DRY_SOUND_VLOUME ], m_aParam[ nType ].vSilderEdit[ SE_WET_SOUND_VLOUME ], buffer ); } else if(strncmp(tokn, "Sky Mid Height Percent", strlen("Sky Mid Height Percent")) == 0) { fgets(buffer, 256, ptr_file); GetPercent( m_aParam[ nType ].vSilderEdit[ SE_SKY_MID ], buffer ); } bool bParsingColor = false; for( int x=0; xcolor[ SColorBar::R_COLORID ], p->color[ SColorBar::G_COLORID ], p->color[ SColorBar::B_COLORID ] ); } fprintf(ptr_file, "//----------------------------------------------------------\n"); fprintf(ptr_file, "fog : Start End\n"); fprintf(ptr_file, "%d\t%d\n\n", m_aParam[ DATA_ORIGIN ].vSilderEdit[ SE_START_FOG ]->cost, m_aParam[ DATA_ORIGIN ].vSilderEdit[ SE_END_FOG ]->cost ); fprintf(ptr_file, "//----------------------------------------------------------\n"); fprintf(ptr_file, "sound : Dry Wet\n"); fprintf(ptr_file, "%d\t%d\n\n", m_aParam[ DATA_ORIGIN ].vSilderEdit[ SE_DRY_SOUND_VLOUME ]->cost, m_aParam[ DATA_ORIGIN ].vSilderEdit[ SE_WET_SOUND_VLOUME ]->cost ); fprintf(ptr_file, "\n\n\n"); fprintf(ptr_file, "//----------------------------------------------------------\n"); fprintf(ptr_file, "Sky Mid Height Percent\n"); float fPercent = (float)m_aParam[ DATA_ORIGIN ].vSilderEdit[ SE_SKY_MID ]->cost / 1000.0f; fprintf(ptr_file, "%.3f\n\n", fPercent); fprintf(ptr_file, "//----------------------------------------------------------\n"); fprintf(ptr_file, "Editing Data\n"); fprintf(ptr_file, "Sky Color : RGB\n"); for(x=0; x < CB_MAX; x++) { SColorBar* p = m_aParam[ DATA_EDITING ].vcColorCtrl[ x ]; fprintf(ptr_file, "%s\n", aDesc[x]); fprintf(ptr_file, "%d\t%d\t%d\n\n", p->color[ SColorBar::R_COLORID ], p->color[ SColorBar::G_COLORID ], p->color[ SColorBar::B_COLORID ] ); } fprintf(ptr_file, "//----------------------------------------------------------\n"); fprintf(ptr_file, "fog : Start End\n"); fprintf(ptr_file, "%d\t%d\n\n", m_aParam[ DATA_EDITING ].vSilderEdit[ SE_START_FOG ]->cost, m_aParam[ DATA_EDITING ].vSilderEdit[ SE_END_FOG ]->cost ); fprintf(ptr_file, "//----------------------------------------------------------\n"); fprintf(ptr_file, "sound : Dry Wet\n"); fprintf(ptr_file, "%d\t%d\n\n", m_aParam[ DATA_EDITING ].vSilderEdit[ SE_DRY_SOUND_VLOUME ]->cost, m_aParam[ DATA_EDITING ].vSilderEdit[ SE_WET_SOUND_VLOUME ]->cost ); fprintf(ptr_file, "//----------------------------------------------------------\n"); fprintf(ptr_file, "Sky Mid Height Percent\n"); fPercent = (float)m_aParam[ DATA_EDITING ].vSilderEdit[ SE_SKY_MID ]->cost / 1000.0f; fprintf(ptr_file, "%.3f\n\n", fPercent); fprintf(ptr_file, "**end**\n"); fclose(ptr_file); return 1; } void CEditParameterDialog::ApplyDataTool(int nType) { if ( nType == APPLY_ORIGIN ) { ApplyDataToolCore( APPLY_ORIGIN ); } else if( nType == APPLY_EDITING ) { ApplyDataToolCore( APPLY_EDITING ); } else if( nType == APPLY_BOTH ) { ApplyDataToolCore( APPLY_ORIGIN ); ApplyDataToolCore( APPLY_EDITING ); } } void CEditParameterDialog::ApplyDataToolCore(int nType) { if( nType < DATA_ORIGIN || nType >= DATA_MAX ) return ; int x=0; for(; x < CB_MAX; x++) { SColorBar* p = m_aParam[ nType ].vcColorCtrl[ x ]; int id = SColorBar::R_COLORID; char str[256]; sprintf(str, "%d", p->color[ id ]); SetWindowText( p->hIDControl[ id ].hWnd_edit, str ); p->UpdateColorEdit( id ); id = SColorBar::G_COLORID; sprintf(str, "%d", p->color[ id ]); SetWindowText( p->hIDControl[ id ].hWnd_edit, str ); p->UpdateColorEdit( id ); id = SColorBar::B_COLORID; sprintf(str, "%d", p->color[ id ]); SetWindowText( p->hIDControl[ id ].hWnd_edit, str ); p->UpdateColorEdit( id ); } for(x=0; x < SE_MAX; x++) { HWNDIDS* p = m_aParam[ nType ].vSilderEdit[ x ]; char str[256]; sprintf(str, "%d", p->cost); SetWindowText( p->hWnd_edit, str ); UpdateEdit( p ); } } void CEditParameterDialog::GetOriginDataEditing() { for(int x=0; xcolor[ SColorBar::R_COLORID ] = p->color[ SColorBar::R_COLORID ]; p2->color[ SColorBar::G_COLORID ] = p->color[ SColorBar::G_COLORID ]; p2->color[ SColorBar::B_COLORID ] = p->color[ SColorBar::B_COLORID ]; } for(int x=0; xcost = p->cost; } ApplyDataToolCore( DATA_EDITING ); HWND hW = GetDlgItem(m_hWndDialog, EDIT_SKYMID_RESULT); if( hW ) { char str[256]; GetWindowText(hW, str, 256); float fPercent = atof(str); HWNDIDS* p = m_aParam[ DATA_EDITING ].vSilderEdit[ SE_SKY_MID ]; int nPos = (int)( fPercent * 1000.0f ); SendMessage( p->hWnd_progress, TBM_SETPOS, 1, nPos ); UpdateProgress( p ); } } BOOL CEditParameterDialog::ColorBarMessageProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { for(int y=0; yColorBarMessageProc(hDlg, message, wParam, lParam) == TRUE ) return TRUE; } } return FALSE; } BOOL CEditParameterDialog::MessageProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_COMMAND: { switch(HIWORD(wParam)) { case EN_CHANGE: { if( m_bInitData == false ) break; WORD id = LOWORD(wParam); for(int y=0; yhIDControl[ z ].id_edit ) { UpdateEdit( &p->hIDControl[ z ] ); return TRUE; } } } } for(int y=0; yid_edit ) { UpdateEdit( p ); return TRUE; } } } } break; } } break; case WM_HSCROLL: { if( m_bInitData == false ) break; HWND hTWnd = (HWND)lParam; for(int y=0; yhWnd_progress ) { UpdateProgress( p ); return TRUE; } } } } break; } return FALSE; } void CEditParameterDialog::SetParam(HINSTANCE hInst, HWND hWnd) { m_hInst = hInst; m_hWnd = hWnd; } void CEditParameterDialog::Show() { m_hEnvironmentEdit = CreateDialog(m_hInst, MAKEINTRESOURCE(IDD_DIALOG_ENVIRONMENT), m_hWnd, EditParameterDialogProc); ShowWindow(m_hEnvironmentEdit, SW_SHOW); } void CEditParameterDialog::End() { Destroy(); DestroyWindow(m_hEnvironmentEdit); m_hEnvironmentEdit = NULL; SGameWorld* pGameWorld = dynamicCast(g_pCurrentGameSystem->GetGame()); if( pGameWorld == NULL ) return ; pGameWorld->SetApplyEnvironmentCost(false); } void CEditParameterDialog::GetGameEnvironmentParameter() { SGameWorld* pGameWorld = dynamicCast(g_pCurrentGameSystem->GetGame()); if( pGameWorld == NULL ) return ; SGameWorld::Environment_Info* pEInfo = pGameWorld->GetEditEnvironment(); if( pEInfo == NULL ) return ; K3DColor color[ CB_MAX ]; color[ CB_SKY_START ] = pGameWorld->GetSkyColorStart(); color[ CB_SKY_MID ] = pGameWorld->GetSkyColorMid(); color[ CB_SKY_END ] = pGameWorld->GetSkyColorEnd(); color[ CB_FOG ] = pGameWorld->GetFogColor(); color[ CB_CLOUD ] = pGameWorld->GetCloudColor(); pGameWorld->CopyLightInfoTempLight(); color[ CB_LIGHT_DFF ] = pGameWorld->GetLightDiffuse(); color[ CB_LIGHT_SPC ] = pGameWorld->GetLightSpecular(); color[ CB_LIGHT_AMB ] = pGameWorld->GetLightAmbient(); for(int x=0; x < CB_MAX; x++) { SColorBar* p = m_aParam[ DATA_ORIGIN ].vcColorCtrl[ x ]; p->color[ SColorBar::R_COLORID ] = color[ x ].r * 255.0f; p->color[ SColorBar::G_COLORID ] = color[ x ].g * 255.0f; p->color[ SColorBar::B_COLORID ] = color[ x ].b * 255.0f; } float fFogStart = pGameWorld->GetFogStart(); float fFogEnd = pGameWorld->GetFogEnd(); float fDry = pGameWorld->GetDryVolume(); float fWet = pGameWorld->GetWetVolume(); float fPercent = pGameWorld->GetSkyMidHeightPercent(); m_aParam[ DATA_ORIGIN ].vSilderEdit[ SE_START_FOG ]->cost = (int)fFogStart; m_aParam[ DATA_ORIGIN ].vSilderEdit[ SE_END_FOG ]->cost = (int)fFogEnd; m_aParam[ DATA_ORIGIN ].vSilderEdit[ SE_DRY_SOUND_VLOUME ]->cost = (int)fDry; m_aParam[ DATA_ORIGIN ].vSilderEdit[ SE_WET_SOUND_VLOUME ]->cost = (int)fWet; ApplyDataToolCore( APPLY_ORIGIN ); HWND hW = GetDlgItem(m_hWndDialog, EDIT_SKYMID_RESULT); if( hW ) { char str[256]; sprintf(str, "%.3f", fPercent); SetWindowText(hW, str); HWNDIDS* p = m_aParam[ APPLY_ORIGIN ].vSilderEdit[ SE_SKY_MID ]; int nPos = (int)( fPercent * 1000.0f ); SendMessage( p->hWnd_progress, TBM_SETPOS, 1, nPos ); UpdateProgress( p ); } } void CEditParameterDialog::CopyGameEnvironmentParameter() { SGameWorld* pGameWorld = dynamicCast(g_pCurrentGameSystem->GetGame()); if( pGameWorld == NULL ) return ; pGameWorld->CopyEnvironmentInfo(); } void CEditParameterDialog::SetGameEnvironmentParameter(int nType) { if( nType < DATA_ORIGIN || nType >= DATA_MAX ) return ; SGameWorld* pGameWorld = dynamicCast(g_pCurrentGameSystem->GetGame()); if( pGameWorld == NULL ) return ; SGameWorld::Environment_Info* pEInfo = pGameWorld->GetEditEnvironment(); if( pEInfo == NULL ) return ; KColor color[ CB_MAX ]; // 1.0 : 255 = rate : x // rate = 1.0f * x / 255 for(int x=0; x < CB_MAX; x++) { SColorBar* p = m_aParam[ nType ].vcColorCtrl[ x ]; color[ x ].r = p->color[ SColorBar::R_COLORID ]; color[ x ].g = p->color[ SColorBar::G_COLORID ]; color[ x ].b = p->color[ SColorBar::B_COLORID ]; } pEInfo->SetSkyColor ( K3DColor( color[ CB_SKY_START ] ), K3DColor( color[ CB_SKY_MID ] ), K3DColor( color[ CB_SKY_END ] ) ); pEInfo->SetFogColor ( color[ CB_FOG ] ); pEInfo->SetCloudColor( color[ CB_CLOUD ] ); pGameWorld->SetLightDiffuse ( color[ CB_LIGHT_DFF ] ); pGameWorld->SetLightSpecular( color[ CB_LIGHT_SPC ] ); pGameWorld->SetLightAmbient ( color[ CB_LIGHT_AMB ] ); float fFogStart = (float)m_aParam[ nType ].vSilderEdit[ SE_START_FOG ]->cost; float fFogEnd = (float)m_aParam[ nType ].vSilderEdit[ SE_END_FOG ]->cost; float fDry = (float)m_aParam[ nType ].vSilderEdit[ SE_DRY_SOUND_VLOUME ]->cost; float fWet = (float)m_aParam[ nType ].vSilderEdit[ SE_WET_SOUND_VLOUME ]->cost; pEInfo->SetLinearFogStartEnd( fFogStart, fFogEnd ); pEInfo->SetDryVolume( fDry ); pEInfo->SetWetVolume( fWet ); int nCtrlID = EDIT_SKYMID_RESULT; if( nType == DATA_EDITING ) nCtrlID = EDIT_SKYMID_RESULT_E; HWND hW = GetDlgItem(m_hWndDialog, nCtrlID); if( hW ) { char str[256]; GetWindowText(hW, str, 256); float fPercent = atof(str); pGameWorld->SetSkyMidHeightPercent( fPercent ); } pGameWorld->SetApplyEnvironmentCost(true); } void CEditParameterDialog::ShowFogModel(bool bShow, int nFogType) { SGameWorld* pGameWorld = dynamicCast(g_pCurrentGameSystem->GetGame()); if( pGameWorld == NULL ) return ; if( nFogType == SE_START_FOG ) { pGameWorld->ShowStartFogModel( bShow ); } else if( nFogType == SE_END_FOG ) { pGameWorld->ShowEndFogModel( bShow ); } } bool CEditParameterDialog::GetApplyFlag() { return m_bApply; } void CEditParameterDialog::SetApplyFlag(bool b) { m_bApply = b; SGameWorld* pGameWorld = dynamicCast(g_pCurrentGameSystem->GetGame()); if( pGameWorld == NULL ) return ; pGameWorld->SetApplyEnvironmentCost( m_bApply ); HWND hWndApply = GetDlgItem(m_hWndDialog, BTN_APPLY_EDIT ); if( hWndApply ) { if( m_bApply ) SetWindowText( hWndApply, "Apply" ); else SetWindowText( hWndApply, "None" ); } } //------------------------------------------------------------------------------------------------------------------------------------------------------- INT_PTR CALLBACK EditParameterDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam); if( GetEditParameterDialog().GetLoadedSataFlag() && GetEditParameterDialog().GetApplyFlag() ) { bool bUpdateRealTime = false; if( TRUE == GetEditParameterDialog().ColorBarMessageProc(hDlg, message, wParam, lParam) ) bUpdateRealTime = true; if( TRUE == GetEditParameterDialog().MessageProc(hDlg, message, wParam, lParam) ) bUpdateRealTime = true; if( bUpdateRealTime ) { GetEditParameterDialog().SetGameEnvironmentParameter( CEditParameterDialog::DATA_EDITING ); } } switch (message) { case WM_INITDIALOG: GetEditParameterDialog().Create(hDlg); ::InvalidateRect(hDlg, NULL, TRUE); return (INT_PTR)TRUE; case WM_COMMAND: { int id = LOWORD(wParam); if (id == IDOK || id == IDCANCEL) break; switch(id) { case BTN_CLOSE: { ShowWindow( GetEditParameterDialog().GetEnvironmentEditHandle(), SW_HIDE); GetEditParameterDialog().End(); return (INT_PTR)TRUE; } // case BTN_APPLY_ORIGIN: // { // GetEditParameterDialog().SetGameEnvironmentParameter( CEditParameterDialog::DATA_ORIGIN ); // } break; case BTN_GET_ORIGIN: { GetEditParameterDialog().GetOriginDataEditing(); } break; case BTN_APPLY_EDIT: { GetEditParameterDialog().SetApplyFlag( !GetEditParameterDialog().GetApplyFlag() ); // GetEditParameterDialog().SetGameEnvironmentParameter( CEditParameterDialog::DATA_EDITING ); } break; case BTN_SAVE: { GetEditParameterDialog().SaveData(); } break; case BTN_GET_GAME_PARAMETER: { GetEditParameterDialog().GetGameEnvironmentParameter(); GetEditParameterDialog().SetGameEnvironmentParameter( CEditParameterDialog::DATA_ORIGIN ); } break; case BTN_COPY_GAME_PARAM: { GetEditParameterDialog().CopyGameEnvironmentParameter(); } break; case CHECK_FOG_START: case CHECK_FOG_END: { int nFogType = -1; if ( id == CHECK_FOG_START ) nFogType = CEditParameterDialog::SE_START_FOG; else if( id == CHECK_FOG_END ) nFogType = CEditParameterDialog::SE_END_FOG; if( nFogType > -1 ) { LRESULT nRe = SendMessage( (HWND)lParam, BM_GETCHECK, 0, 0); if( nRe == BST_UNCHECKED ) GetEditParameterDialog().ShowFogModel( false, nFogType ); else if( nRe == BST_CHECKED ) GetEditParameterDialog().ShowFogModel( true, nFogType ); GetEditParameterDialog().SetGameEnvironmentParameter( CEditParameterDialog::DATA_EDITING ); } } break; } } break; case WM_PAINT: { GetEditParameterDialog().Paint(hDlg); } break; case WM_VSCROLL: { } break; case WM_LBUTTONDOWN: { int k=0; } break; } return (DefWindowProc(hDlg, message, wParam, lParam)); } #endif _EDIT_ENVIRONMENT_