/* Copyright (c) 2002-2012 Croteam Ltd. This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ // DlgTEOperationSettings.cpp : implementation file // #include "stdafx.h" #include "WorldEditor.h" #include "DlgTEOperationSettings.h" #ifdef _DEBUG #undef new #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CDlgTEOperationSettings dialog CDlgTEOperationSettings::CDlgTEOperationSettings(CWnd* pParent /*=NULL*/) : CDialog(CDlgTEOperationSettings::IDD, pParent) { //{{AFX_DATA_INIT(CDlgTEOperationSettings) m_fClampAltitude = 0.0f; m_fNoiseAltitude = 0.0f; m_fPaintPower = 0.0f; m_fPosterizeStep = 0.0f; m_fSmoothPower = 0.0f; m_fFilterPower = 0.0f; m_strContinousNoiseTexture = _T(""); m_strDistributionNoiseTexture = _T(""); //}}AFX_DATA_INIT } void CDlgTEOperationSettings::DoDataExchange(CDataExchange* pDX) { // if dialog is recieving data if(pDX->m_bSaveAndValidate == FALSE) { m_strDistributionNoiseTexture=theApp.m_fnDistributionNoiseTexture.FileName(); m_strContinousNoiseTexture=theApp.m_fnContinousNoiseTexture.FileName(); CTerrain *ptrTerrain=GetTerrain(); if(ptrTerrain!=NULL) { GetDlgItem(IDC_EQUALIZE_VALUE)->EnableWindow( TRUE); m_fClampAltitude=FLOAT(theApp.m_uwEditAltitude)/65535*ptrTerrain->tr_vTerrainSize(2); } else { GetDlgItem(IDC_EQUALIZE_VALUE)->EnableWindow( FALSE); m_fClampAltitude=0; } m_fPaintPower=theApp.m_fPaintPower*100.0f; m_fSmoothPower=theApp.m_fSmoothPower*100.0f; m_fFilterPower=theApp.m_fFilterPower*100.0f; m_fPosterizeStep=theApp.m_fPosterizeStep; m_fNoiseAltitude=theApp.m_fNoiseAltitude; } CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CDlgTEOperationSettings) DDX_Control(pDX, IDC_GENERATION_ALGORITHM, m_ctrlGenerationMethod); DDX_Control(pDX, IDC_FILTER_COMBO, m_ctrlFilter); DDX_Text(pDX, IDC_EQUALIZE_VALUE, m_fClampAltitude); DDV_MinMaxFloat(pDX, m_fClampAltitude, 0.f, 65535.f); DDX_Text(pDX, IDC_NOISE_STRENGTH, m_fNoiseAltitude); DDV_MinMaxFloat(pDX, m_fNoiseAltitude, 0.f, 65535.f); DDX_Text(pDX, IDC_PAINT_POWER, m_fPaintPower); DDV_MinMaxFloat(pDX, m_fPaintPower, 0.f, 10000.f); DDX_Text(pDX, IDC_POSTERIZE_STEP, m_fPosterizeStep); DDV_MinMaxFloat(pDX, m_fPosterizeStep, 0.f, 65535.f); DDX_Text(pDX, IDC_SMOOTH_POWER, m_fSmoothPower); DDV_MinMaxFloat(pDX, m_fSmoothPower, 0.f, 10000.f); DDX_Text(pDX, IDC_FILTER_POWER, m_fFilterPower); DDX_Text(pDX, IDC_CONTINOUS_NOISE_T, m_strContinousNoiseTexture); DDX_Text(pDX, IDC_DISTRIBUTION_NOISE_T, m_strDistributionNoiseTexture); //}}AFX_DATA_MAP // if dialog is giving data if(pDX->m_bSaveAndValidate != FALSE) { CTerrain *ptrTerrain=GetTerrain(); if(ptrTerrain!=NULL) { theApp.m_uwEditAltitude=m_fClampAltitude/ptrTerrain->tr_vTerrainSize(2)*65535; } theApp.m_fPaintPower=m_fPaintPower/100.0f; theApp.m_fSmoothPower=m_fSmoothPower/100.0f; INDEX iSelectedItem=iSelectedItem=m_ctrlFilter.GetCurSel(); theApp.m_iFilter=m_ctrlFilter.GetItemData(iSelectedItem); theApp.m_fFilterPower=m_fFilterPower/100.0f; theApp.m_fPosterizeStep=m_fPosterizeStep; theApp.m_fNoiseAltitude=m_fNoiseAltitude; theApp.m_iTerrainGenerationMethod=m_ctrlGenerationMethod.GetCurSel(); } } BEGIN_MESSAGE_MAP(CDlgTEOperationSettings, CDialog) //{{AFX_MSG_MAP(CDlgTEOperationSettings) ON_BN_CLICKED(IDC_VIEW_NOISE_TEXTURE, OnViewNoiseTexture) ON_BN_CLICKED(IDC_BROWSE_CONTINOUS_NOISE, OnBrowseContinousNoise) ON_BN_CLICKED(IDC_BROWSE_DISTRIBUTION_NOISE, OnBrowseDistributionNoise) ON_BN_CLICKED(IDC_VIEW_DISTRIBUTION_NOISE_TEXTURE, OnViewDistributionNoiseTexture) ON_BN_CLICKED(IDC_GENERATION_SETTINGS, OnGenerationSettings) ON_CBN_DROPDOWN(IDC_GENERATION_ALGORITHM, OnDropdownGenerationAlgorithm) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CDlgTEOperationSettings message handlers CTString GetFilterName(INDEX iFilter) { if(iFilter==FLT_SHARPEN) return "Sharpen"; if(iFilter==FLT_FINEBLUR) return "Fine blur"; if(iFilter==FLT_EMBOSS) return "Emboss"; if(iFilter==FLT_EDGEDETECT) return "Edge detect"; return "Unknown"; } BOOL CDlgTEOperationSettings::OnInitDialog() { CDialog::OnInitDialog(); if( IsWindow( m_ctrlFilter.m_hWnd)) { INDEX iItem; iItem=m_ctrlFilter.AddString(CString(GetFilterName(FLT_SHARPEN))); m_ctrlFilter.SetItemData(iItem,FLT_SHARPEN); if(theApp.m_iFilter==FLT_SHARPEN) m_ctrlFilter.SetCurSel(iItem); iItem=m_ctrlFilter.AddString(CString(GetFilterName(FLT_FINEBLUR))); m_ctrlFilter.SetItemData(iItem,FLT_FINEBLUR); if(theApp.m_iFilter==FLT_FINEBLUR) m_ctrlFilter.SetCurSel(iItem); iItem=m_ctrlFilter.AddString(CString(GetFilterName(FLT_EMBOSS))); m_ctrlFilter.SetItemData(iItem,FLT_EMBOSS); if(theApp.m_iFilter==FLT_EMBOSS) m_ctrlFilter.SetCurSel(iItem); iItem=m_ctrlFilter.AddString(CString(GetFilterName(FLT_EDGEDETECT))); m_ctrlFilter.SetItemData(iItem,FLT_EDGEDETECT); if(theApp.m_iFilter==FLT_EDGEDETECT) m_ctrlFilter.SetCurSel(iItem); m_ctrlGenerationMethod.AddString(L"Subdivide and displace"); m_ctrlGenerationMethod.AddString(L"Fractal Brownian motion (FBM)"); m_ctrlGenerationMethod.SetCurSel(theApp.m_iTerrainGenerationMethod); } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CDlgTEOperationSettings::OnViewNoiseTexture() { if(!SetupContinousNoiseTexture()) return; POINT pt; GetCursorPos(&pt); CTString strText1=_ptdContinousRandomNoise->GetName(); CTString strText2=_ptdContinousRandomNoise->GetDescription(); CWndDisplayTexture *pDisplay=new CWndDisplayTexture; pDisplay->Initialize(pt.x, pt.y, _ptdContinousRandomNoise, strText1, strText2); FreeContinousNoiseTexture(); } void CDlgTEOperationSettings::OnViewDistributionNoiseTexture() { if(!SetupDistributionNoiseTexture()) return; POINT pt; GetCursorPos(&pt); CTString strText1=_ptdDistributionRandomNoise->GetName(); CTString strText2=_ptdDistributionRandomNoise->GetDescription(); CWndDisplayTexture *pDisplay=new CWndDisplayTexture; pDisplay->Initialize(pt.x, pt.y, _ptdDistributionRandomNoise, strText1, strText2); FreeDistributionNoiseTexture(); } void CDlgTEOperationSettings::OnBrowseContinousNoise() { CTFileName fnNoise=_EngineGUI.FileRequester( "Noise texture", FILTER_TEX FILTER_ALL FILTER_END, "Noise texture directory", "Textures\\"); if( fnNoise=="") return; if(!SetupContinousNoiseTexture()) return; theApp.m_fnContinousNoiseTexture=fnNoise; FreeContinousNoiseTexture(); UpdateData(FALSE); } void CDlgTEOperationSettings::OnBrowseDistributionNoise() { CTFileName fnNoise=_EngineGUI.FileRequester( "Noise texture", FILTER_TEX FILTER_ALL FILTER_END, "Noise texture directory", "Textures\\"); if( fnNoise=="") return; if(!SetupDistributionNoiseTexture()) return; theApp.m_fnDistributionNoiseTexture=fnNoise; FreeDistributionNoiseTexture(); UpdateData(FALSE); } void CDlgTEOperationSettings::OnGenerationSettings() { INDEX iItem=m_ctrlGenerationMethod.GetCurSel(); switch(iItem) { case 0: { CDlgEditFloat dlg(this); dlg.m_fEditFloat=theApp.m_iRNDSubdivideAndDisplaceItterations; dlg.m_strVarName = "Random itterations"; dlg.m_strTitle = "Subdivide and displace"; if(dlg.DoModal()!=IDOK) { return; } theApp.m_iRNDSubdivideAndDisplaceItterations=dlg.m_fEditFloat; break; } case 1: { CDlgGenerateFBM dlg(this); dlg.DoModal(); break; } } } void CDlgTEOperationSettings::OnDropdownGenerationAlgorithm() { m_ctrlGenerationMethod.SetDroppedWidth( 256); }