Serious-Engine/Sources/WorldEditor/DlgRenderingPreferences.cpp
2016-03-11 18:20:51 -06:00

388 lines
14 KiB
C++

/* 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. */
// DlgRenderingPreferences.cpp : implementation file
//
#include "stdafx.h"
#include "DlgRenderingPreferences.h"
#ifdef _DEBUG
#undef new
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDlgRenderingPreferences dialog
CDlgRenderingPreferences::CDlgRenderingPreferences( INDEX iBuffer, CWnd* pParent /*=NULL*/)
: CDialog(CDlgRenderingPreferences::IDD, pParent)
{
m_iBuffer = iBuffer;
//{{AFX_DATA_INIT(CDlgRenderingPreferences)
m_bBoundingBox = FALSE;
m_bHidenLines = FALSE;
m_bShadows = FALSE;
m_bWireFrame = FALSE;
m_fRenderingRange = 0.0f;
m_bAutoRenderingRange = FALSE;
m_bRenderEditorModels = FALSE;
m_bUseTextureForBcg = FALSE;
m_bRenderFieldBrushes = FALSE;
m_bRenderFog = FALSE;
m_bRenderHaze = FALSE;
m_bRenderMirrors = FALSE;
m_strBcgTexture = _T("");
m_fFarClipPlane = 0.0f;
m_bApplyFarClipInIsometricProjection = FALSE;
//}}AFX_DATA_INIT
m_VertexColors.SetPickerType( CColoredButton::PT_MFC);
m_EdgesColors.SetPickerType( CColoredButton::PT_MFC);
m_PolygonColors.SetPickerType( CColoredButton::PT_MFC);
m_PaperColor.SetPickerType( CColoredButton::PT_MFC);
m_SelectionColor.SetPickerType( CColoredButton::PT_MFC);
m_GridColor.SetPickerType( CColoredButton::PT_MFC);
}
void CDlgRenderingPreferences::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
CModelRenderPrefs &pmrpPrefs = theApp.m_vpViewPrefs[ m_iBuffer].m_mrpModelRenderPrefs;
CWorldRenderPrefs &pwrpPrefs = theApp.m_vpViewPrefs[ m_iBuffer].m_wrpWorldRenderPrefs;
// if dialog is recieving data
if( (pDX->m_bSaveAndValidate == FALSE) && IsWindow( m_hWnd) &&
IsWindow( m_VertexFillType.m_hWnd) &&
IsWindow( m_EdgesFillType.m_hWnd) &&
IsWindow( m_PolygonFillType.m_hWnd) &&
IsWindow( m_TextureFillType.m_hWnd) )
{
// world rendering preferences
m_VertexColors.SetColor( pwrpPrefs.GetVerticesInkColor());
m_EdgesColors.SetColor( pwrpPrefs.GetEdgesInkColor());
m_PolygonColors.SetColor( pwrpPrefs.GetPolygonsInkColor());
m_PaperColor.SetColor( theApp.m_vpViewPrefs[ m_iBuffer].m_PaperColor);
m_SelectionColor.SetColor( theApp.m_vpViewPrefs[ m_iBuffer].m_SelectionColor);
m_GridColor.SetColor( theApp.m_vpViewPrefs[ m_iBuffer].m_GridColor);
m_fFarClipPlane=pwrpPrefs.wrp_fFarClipPlane;
m_bApplyFarClipInIsometricProjection=pwrpPrefs.wrp_bApplyFarClipPlaneInIsometricProjection;
m_strBcgTexture = CTFileName(CTString( theApp.m_vpViewPrefs[ m_iBuffer].m_achrBcgPicture)).FileName();
// get render editor models flag
m_bRenderEditorModels = pwrpPrefs.IsEditorModelsOn();
// get render field brushes flag
m_bRenderFieldBrushes = pwrpPrefs.IsFieldBrushesOn();
// get use texture for background flag
m_bUseTextureForBcg = pwrpPrefs.IsBackgroundTextureOn();
m_bRenderMirrors = pwrpPrefs.IsMirrorsOn();
m_bRenderFog = pwrpPrefs.IsFogOn();
m_bRenderHaze = pwrpPrefs.IsHazeOn();
// get auto rendering range flag
m_bAutoRenderingRange = theApp.m_vpViewPrefs[ m_iBuffer].m_bAutoRenderingRange;
// get rendering range
m_fRenderingRange = theApp.m_vpViewPrefs[ m_iBuffer].m_fRenderingRange;
// enable/disable edit render range control depending on auto range flag
UpdateEditRangeControl();
// fill values for vertice's combo box
m_VertexFillType.ResetContent();
m_VertexFillType.AddString( L"No vertices");
m_VertexFillType.AddString( L"Vertices ink");
m_VertexFillType.AddString( L"Polygon color");
m_VertexFillType.AddString( L"Sector color");
// fill values for edges's combo box
m_EdgesFillType.ResetContent();
m_EdgesFillType.AddString( L"No edges");
m_EdgesFillType.AddString( L"Edges ink");
m_EdgesFillType.AddString( L"Polygon color");
m_EdgesFillType.AddString( L"Sector color");
// fill values for polygons's combo box
m_PolygonFillType.ResetContent();
m_PolygonFillType.AddString( L"No polygons");
m_PolygonFillType.AddString( L"Polygons ink");
m_PolygonFillType.AddString( L"Polygon color");
m_PolygonFillType.AddString( L"Sector color");
m_PolygonFillType.AddString( L"Texture");
// fill values for model's texture combo
m_TextureFillType.ResetContent();
m_TextureFillType.AddString( L"No fill");
m_TextureFillType.AddString( L"White color");
m_TextureFillType.AddString( L"Surface colors");
m_TextureFillType.AddString( L"On colors");
m_TextureFillType.AddString( L"Off colors");
m_TextureFillType.AddString( L"Texture");
// fill values for flare FX combo
m_comboFlareFX.ResetContent();
m_comboFlareFX.AddString( L"None");
m_comboFlareFX.AddString( L"Single flare");
m_comboFlareFX.AddString( L"Reflections");
m_comboFlareFX.AddString( L"Reflections and glare");
INDEX iFillType;
// set current fill type to vertices combo box
iFillType = pwrpPrefs.GetVerticesFillType();
m_VertexFillType.SetCurSel( iFillType);
// set current fill type to edges combo box
iFillType = pwrpPrefs.GetEdgesFillType();
m_EdgesFillType.SetCurSel( iFillType);
// set current fill type to polygons combo box
iFillType = pwrpPrefs.GetPolygonsFillType();
m_PolygonFillType.SetCurSel( iFillType);
// set currently selected modeler's texture rendering type
ULONG rtRenderType = pmrpPrefs.GetRenderType();
iFillType = 0;
if( (rtRenderType & RT_NO_POLYGON_FILL) != 0) iFillType = 0;
else if( (rtRenderType & RT_WHITE_TEXTURE) != 0) iFillType = 1;
else if( (rtRenderType & RT_SURFACE_COLORS) != 0) iFillType = 2;
else if( (rtRenderType & RT_ON_COLORS) != 0) iFillType = 3;
else if( (rtRenderType & RT_OFF_COLORS) != 0) iFillType = 4;
else if( (rtRenderType & RT_TEXTURE) != 0) iFillType = 5;
m_TextureFillType.SetCurSel( iFillType);
enum CWorldRenderPrefs::LensFlaresType lftFlareFX = pwrpPrefs.GetLensFlares();
m_comboFlareFX.SetCurSel( (INDEX) lftFlareFX);
// set model rendering flags
m_bBoundingBox = pmrpPrefs.BBoxAllVisible();
m_bHidenLines = pmrpPrefs.HiddenLines();
m_bShadows = pmrpPrefs.GetShadowQuality() == 0;
m_bWireFrame = pmrpPrefs.WireOn();
}
//{{AFX_DATA_MAP(CDlgRenderingPreferences)
DDX_Control(pDX, IDC_FLARE_FX, m_comboFlareFX);
DDX_Control(pDX, IDC_SELECTION_COLOR, m_SelectionColor);
DDX_Control(pDX, IDC_GRID_COLOR, m_GridColor);
DDX_Control(pDX, IDC_PAPER_COLOR, m_PaperColor);
DDX_Control(pDX, IDC_TEXTURE_FILL_TYPE, m_TextureFillType);
DDX_Control(pDX, IDC_EDGES_FILL_TYPE, m_EdgesFillType);
DDX_Control(pDX, IDC_POLYGON_FILL_TYPE, m_PolygonFillType);
DDX_Control(pDX, IDC_VERTEX_FILL_TYPE, m_VertexFillType);
DDX_Control(pDX, IDC_VERTEX_COLORS, m_VertexColors);
DDX_Control(pDX, IDC_POLYGON_COLORS, m_PolygonColors);
DDX_Control(pDX, IDC_EDGES_COLORS, m_EdgesColors);
DDX_Check(pDX, IDC_BBOX, m_bBoundingBox);
DDX_Check(pDX, IDC_HIDEN_LINES, m_bHidenLines);
DDX_Check(pDX, IDC_SHADOWS, m_bShadows);
DDX_Check(pDX, IDC_WIRE_FRAME, m_bWireFrame);
DDX_Text(pDX, IDC_RENDERING_RANGE, m_fRenderingRange);
DDV_MinMaxFloat(pDX, m_fRenderingRange, 1.f, 10000.f);
DDX_Check(pDX, IDC_AUTO_RENDERING_RANGE, m_bAutoRenderingRange);
DDX_Check(pDX, IDC_RENDER_EDITOR_MODELS, m_bRenderEditorModels);
DDX_Check(pDX, IDC_USE_TEXTURE_FOR_BCG, m_bUseTextureForBcg);
DDX_Check(pDX, IDC_RENDER_FIELDS, m_bRenderFieldBrushes);
DDX_Check(pDX, IDC_RENDER_FOG, m_bRenderFog);
DDX_Check(pDX, IDC_RENDER_HAZE, m_bRenderHaze);
DDX_Check(pDX, IDC_RENDER_MIRRORS, m_bRenderMirrors);
DDX_Text(pDX, IDC_BCG_PICTURE_T, m_strBcgTexture);
DDX_Text(pDX, IDC_FAR_CLIP_PLANE, m_fFarClipPlane);
DDV_MinMaxFloat(pDX, m_fFarClipPlane, -1.f, 1.e+007f);
DDX_Check(pDX, IDC_APPLY_CLIP_FOR_ISOMETRIC, m_bApplyFarClipInIsometricProjection);
//}}AFX_DATA_MAP
// if dialog is giving data
if( pDX->m_bSaveAndValidate != FALSE)
{
// set auto rendering range flag
theApp.m_vpViewPrefs[ m_iBuffer].m_bAutoRenderingRange = m_bAutoRenderingRange;
// set rendering range
theApp.m_vpViewPrefs[ m_iBuffer].m_fRenderingRange = m_fRenderingRange;
// set drawing of editor models on or off
pwrpPrefs.SetEditorModelsOn( m_bRenderEditorModels);
// set render field brushes flag
pwrpPrefs.SetFieldBrushesOn( m_bRenderFieldBrushes);
// set use texture for background flag
pwrpPrefs.SetBackgroundTextureOn( m_bUseTextureForBcg);
pwrpPrefs.SetMirrorsOn( m_bRenderMirrors);
pwrpPrefs.SetFogOn( m_bRenderFog);
pwrpPrefs.SetHazeOn( m_bRenderHaze);
// enable/disable edit render range control depending on auto range flag
UpdateEditRangeControl();
// set colors
pwrpPrefs.SetVerticesInkColor( m_VertexColors.GetColor());
pwrpPrefs.SetEdgesInkColor( m_EdgesColors.GetColor());
pwrpPrefs.SetPolygonsInkColor( m_PolygonColors.GetColor());
theApp.m_vpViewPrefs[ m_iBuffer].m_PaperColor = m_PaperColor.GetColor();
theApp.m_vpViewPrefs[ m_iBuffer].m_GridColor = m_GridColor.GetColor();
theApp.m_vpViewPrefs[ m_iBuffer].m_SelectionColor = m_SelectionColor.GetColor();
pwrpPrefs.wrp_fFarClipPlane=m_fFarClipPlane;
pwrpPrefs.wrp_bApplyFarClipPlaneInIsometricProjection=m_bApplyFarClipInIsometricProjection;
enum CWorldRenderPrefs::FillType ftFillType;
// get current fill type from vertices combo box
ftFillType = (enum CWorldRenderPrefs::FillType) m_VertexFillType.GetCurSel();
pwrpPrefs.SetVerticesFillType( ftFillType);
// get current fill type from edges combo box
ftFillType = (enum CWorldRenderPrefs::FillType) m_EdgesFillType.GetCurSel();
pwrpPrefs.SetEdgesFillType( ftFillType);
// get current fill type from polygons combo box
ftFillType = (enum CWorldRenderPrefs::FillType) m_PolygonFillType.GetCurSel();
pwrpPrefs.SetPolygonsFillType( ftFillType);
enum CWorldRenderPrefs::LensFlaresType lftFlares;
// get type for rendering flares
lftFlares = (enum CWorldRenderPrefs::LensFlaresType) m_comboFlareFX.GetCurSel();
pwrpPrefs.SetLensFlaresType( lftFlares);
// get current model's texturizing type from model's texture combo box
ULONG ulMdlFillType;
ulMdlFillType = m_TextureFillType.GetCurSel();
switch( ulMdlFillType)
{
case 0: {
pmrpPrefs.SetRenderType( RT_NO_POLYGON_FILL);
break;
}
case 1: {
pmrpPrefs.SetRenderType( RT_WHITE_TEXTURE);
break;
}
case 2: {
pmrpPrefs.SetRenderType( RT_SURFACE_COLORS);
break;
}
case 3: {
pmrpPrefs.SetRenderType( RT_ON_COLORS);
break;
}
case 4: {
pmrpPrefs.SetRenderType( RT_OFF_COLORS);
break;
}
case 5: {
pmrpPrefs.SetRenderType( RT_TEXTURE);
break;
}
default: {
ASSERTALWAYS( "Invalid selection found in model's texture combo box");
}
}
// get rest of model's rendering preferences
pmrpPrefs.SetWire( m_bWireFrame);
pmrpPrefs.SetHiddenLines( m_bHidenLines);
pmrpPrefs.BBoxAllShow( m_bBoundingBox);
if( m_bShadows) {
pmrpPrefs.SetShadowQuality( 0);
} else {
pmrpPrefs.SetShadowQuality( 255);
}
}
}
BEGIN_MESSAGE_MAP(CDlgRenderingPreferences, CDialog)
//{{AFX_MSG_MAP(CDlgRenderingPreferences)
ON_BN_CLICKED(ID_LOAD_PREFERENCES, OnLoadPreferences)
ON_BN_CLICKED(ID_SAVE_PREFERENCES, OnSavePreferences)
ON_BN_CLICKED(IDC_AUTO_RENDERING_RANGE, OnAutoRenderingRange)
ON_BN_CLICKED(IDC_BROWSE_BCG_PICTURE, OnBrowseBcgPicture)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlgRenderingPreferences message handlers
BOOL CDlgRenderingPreferences::OnInitDialog()
{
CDialog::OnInitDialog();
CModelRenderPrefs &pmrpPrefs = theApp.m_vpViewPrefs[ m_iBuffer].m_mrpModelRenderPrefs;
CWorldRenderPrefs &pwrpPrefs = theApp.m_vpViewPrefs[ m_iBuffer].m_wrpWorldRenderPrefs;
// we will set window's name so we know on which buffer we are working on
char chrWndTitle[ 64];
// create new name
if( m_iBuffer!=10)
{
sprintf( chrWndTitle, "Change rendering preferences of buffer %d.", m_iBuffer+1);
}
else
{
sprintf( chrWndTitle, "Change rendering preferences");
}
// set it as window new title
SetWindowText( CString(chrWndTitle));
// set dialog data
UpdateData( FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CDlgRenderingPreferences::OnLoadPreferences()
{
// load world and model's rendering preferences
theApp.LoadRenderingPreferences();
// set dialog data
UpdateData( FALSE);
}
void CDlgRenderingPreferences::OnSavePreferences()
{
// get data from dialog
UpdateData( TRUE);
// load world and model's rendering preferences
theApp.SaveRenderingPreferences();
}
void CDlgRenderingPreferences::UpdateEditRangeControl()
{
// get edit rendering range control
CWnd *pWnd = GetDlgItem( IDC_RENDERING_RANGE);
// must exists
ASSERT( pWnd != NULL);
// if rendering range flag is on
if( m_bAutoRenderingRange)
{
// disable edit rendering range control
pWnd->EnableWindow( FALSE);
}
else
{
// otherwise enable it
pWnd->EnableWindow( TRUE);
}
}
void CDlgRenderingPreferences::OnAutoRenderingRange()
{
m_bAutoRenderingRange = !m_bAutoRenderingRange;
// set dialog data
UpdateData( TRUE);
// enable/disable edit range control
UpdateEditRangeControl();
}
void CDlgRenderingPreferences::OnBrowseBcgPicture()
{
CTFileName fnBcgPicture = _EngineGUI.FileRequester( "Select background texture",
"Texture (*.tex)\0*.tex\0" FILTER_TEX FILTER_END, "Background textures", "");
if( fnBcgPicture == "") return;
sprintf( theApp.m_vpViewPrefs[ m_iBuffer].m_achrBcgPicture, "%s", fnBcgPicture);
m_strBcgTexture = fnBcgPicture.FileName();
UpdateData( FALSE);
}