241 lines
6.5 KiB
C++
241 lines
6.5 KiB
C++
// SkyDialog.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "SkyDialog.h"
|
|
#include "CryEditDoc.h"
|
|
#include "PropertiesDialog.h"
|
|
#include "GenerationParam.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CSkyDialog dialog
|
|
|
|
|
|
CSkyDialog::CSkyDialog(CWnd* pParent /*=NULL*/)
|
|
: CToolbarDialog(CSkyDialog::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CSkyDialog)
|
|
// NOTE: the ClassWizard will add member initialization here
|
|
//}}AFX_DATA_INIT
|
|
|
|
m_PD = PDNorth;
|
|
}
|
|
|
|
|
|
void CSkyDialog::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CSkyDialog)
|
|
// NOTE: the ClassWizard will add DDX and DDV calls here
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CSkyDialog, CToolbarDialog)
|
|
//{{AFX_MSG_MAP(CSkyDialog)
|
|
ON_COMMAND(ID_SKY_NORTH, OnSkyNorth)
|
|
ON_COMMAND(ID_SKY_SOUTH, OnSkySouth)
|
|
ON_COMMAND(ID_SKY_WEST, OnSkyWest)
|
|
ON_COMMAND(ID_SKY_EAST, OnSkyEast)
|
|
ON_WM_PAINT()
|
|
ON_COMMAND(ID_SKY_CLOUDS, OnSkyClouds)
|
|
ON_WM_DESTROY()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CSkyDialog message handlers
|
|
|
|
BOOL CSkyDialog::OnInitDialog()
|
|
{
|
|
////////////////////////////////////////////////////////////////////////
|
|
// Create and setup the toolbar and other controls
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
RECT rcClient;
|
|
TBBUTTONINFO tbbiInfo;
|
|
|
|
CLogFile::WriteLine("Loading sky dialog...");
|
|
|
|
// We call this function of the base class here because our direct
|
|
// base class' OnInitDialog() needs to be called after we created the tool bar
|
|
CDialog::OnInitDialog();
|
|
|
|
// Create the toolbar
|
|
if (!m_cDlgToolBar.CreateEx(this, TBSTYLE_FLAT | TBSTYLE_WRAPABLE, WS_CHILD |
|
|
WS_VISIBLE | CBRS_TOP | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
|
|
!m_cDlgToolBar.LoadToolBar(IDR_SKY))
|
|
{
|
|
ASSERT(0);
|
|
return -1; // fail to create
|
|
}
|
|
|
|
// Resize the toolbar
|
|
GetClientRect(&rcClient);
|
|
m_cDlgToolBar.SetWindowPos(NULL, 0, 0, rcClient.right, 70, SWP_NOZORDER);
|
|
|
|
// TODO: Remove this if you don't want tool tips or a resizeable toolbar
|
|
m_cDlgToolBar.SetBarStyle(m_cDlgToolBar.GetBarStyle() |
|
|
CBRS_TOOLTIPS | CBRS_FLYBY);
|
|
|
|
// Direction buttons are checkbuttons
|
|
m_cDlgToolBar.SetButtonStyle(4, TBBS_CHECKGROUP);
|
|
m_cDlgToolBar.SetButtonStyle(5, TBBS_CHECKGROUP);
|
|
m_cDlgToolBar.SetButtonStyle(6, TBBS_CHECKGROUP);
|
|
m_cDlgToolBar.SetButtonStyle(7, TBBS_CHECKGROUP);
|
|
|
|
// Disable unimplemented features
|
|
tbbiInfo.cbSize = sizeof(TBBUTTONINFO);
|
|
tbbiInfo.dwMask = TBIF_STATE;
|
|
tbbiInfo.fsState = NULL;
|
|
m_cDlgToolBar.GetToolBarCtrl().SetButtonInfo(ID_SKY_WEATHER, &tbbiInfo);
|
|
m_cDlgToolBar.GetToolBarCtrl().SetButtonInfo(ID_SKY_NORTH, &tbbiInfo);
|
|
m_cDlgToolBar.GetToolBarCtrl().SetButtonInfo(ID_SKY_EAST, &tbbiInfo);
|
|
m_cDlgToolBar.GetToolBarCtrl().SetButtonInfo(ID_SKY_SOUTH, &tbbiInfo);
|
|
m_cDlgToolBar.GetToolBarCtrl().SetButtonInfo(ID_SKY_WEST, &tbbiInfo);
|
|
|
|
// Check the default buttons
|
|
tbbiInfo.cbSize = sizeof(TBBUTTONINFO);
|
|
tbbiInfo.dwMask = TBIF_STATE;
|
|
tbbiInfo.fsState = TBSTATE_CHECKED | TBSTATE_ENABLED;
|
|
m_cDlgToolBar.GetToolBarCtrl().SetButtonInfo(ID_SKY_NORTH, &tbbiInfo);
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////
|
|
CRect rc;
|
|
GetDlgItem(IDC_PROPERTIES)->GetWindowRect( rc );
|
|
GetDlgItem(IDC_PROPERTIES)->ShowWindow( SW_HIDE );
|
|
ScreenToClient( rc );
|
|
m_propWnd.Create( WS_CHILD|WS_VISIBLE,rc,this );
|
|
|
|
XmlNodeRef &templ = GetIEditor()->GetDocument()->GetFogTemplate();
|
|
if (templ)
|
|
{
|
|
XmlNodeRef rootNode = GetIEditor()->GetDocument()->GetEnvironmentTemplate();
|
|
|
|
m_propWnd.CreateItems( rootNode );
|
|
m_propWnd.ExpandAll();
|
|
}
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
// The base class is responsible for moving the controls and placing the toolbar. This
|
|
// does not call CDialog::OnInitDialog()
|
|
VERIFY(CToolbarDialog::OnInitDialog());
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
void CSkyDialog::OnPaint()
|
|
{
|
|
////////////////////////////////////////////////////////////////////////
|
|
// Draw the cloud and sky preview
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
CPaintDC dc(this); // device context for painting
|
|
RECT rcDest;
|
|
|
|
SetRect(&rcDest, 19, 54, 256, 256);
|
|
|
|
// Paint the clouds
|
|
GetIEditor()->GetDocument()->m_cClouds.DrawClouds(&dc, &rcDest);
|
|
|
|
// Do not call CToolbarDialog::OnPaint() for painting messages
|
|
}
|
|
|
|
void CSkyDialog::OnSkyClouds()
|
|
{
|
|
////////////////////////////////////////////////////////////////////////
|
|
// Generate new clouds
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
SNoiseParams sParams;
|
|
CGenerationParam cDialog;
|
|
|
|
if (GetIEditor()->GetDocument()->m_cClouds.GetLastParam()->bValid)
|
|
{
|
|
// Use last parameters
|
|
cDialog.LoadParam(GetIEditor()->GetDocument()->m_cClouds.GetLastParam());
|
|
}
|
|
else
|
|
{
|
|
// Set default parameters for the dialog
|
|
cDialog.m_sldCover = 50;
|
|
cDialog.m_sldFade = (int) (0.8f * 10);
|
|
cDialog.m_sldFrequency = (int) (3.0f * 10);
|
|
cDialog.m_sldFrequencyStep = (int) (2.0f * 10);
|
|
cDialog.m_sldPasses = 8;
|
|
cDialog.m_sldRandomBase = 1;
|
|
cDialog.m_sldSharpness = (int) (0.999f * 1000);
|
|
cDialog.m_sldBlur = 0;
|
|
}
|
|
|
|
// Show the generation parameter dialog
|
|
if (cDialog.DoModal() == IDCANCEL)
|
|
return;
|
|
|
|
CLogFile::WriteLine("Generating cloud layer...");
|
|
|
|
// Fill the parameter structure for the cloud generation
|
|
cDialog.FillParam(&sParams);
|
|
sParams.iWidth = 512;
|
|
sParams.iHeight = 512;
|
|
sParams.bBlueSky = true;
|
|
|
|
BeginWaitCursor();
|
|
|
|
// Call the generator function
|
|
GetIEditor()->GetDocument()->m_cClouds.GenerateClouds(&sParams, GetDlgItem(IDC_GEN_STATUS));
|
|
|
|
// Update the window
|
|
RedrawWindow();
|
|
|
|
// Remove the status indicator
|
|
GetDlgItem(IDC_GEN_STATUS)->SetWindowText("");
|
|
|
|
// We modified the document
|
|
GetIEditor()->GetDocument()->SetModifiedFlag();
|
|
|
|
EndWaitCursor();
|
|
|
|
if (m_propWnd.m_hWnd)
|
|
m_propWnd.Invalidate();
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CSkyDialog direction buttons
|
|
|
|
void CSkyDialog::OnSkyNorth()
|
|
{
|
|
m_PD = PDNorth;
|
|
}
|
|
|
|
void CSkyDialog::OnSkySouth()
|
|
{
|
|
m_PD = PDSouth;
|
|
}
|
|
|
|
void CSkyDialog::OnSkyWest()
|
|
{
|
|
m_PD = PDWest;
|
|
}
|
|
|
|
void CSkyDialog::OnSkyEast()
|
|
{
|
|
m_PD = PDEast;
|
|
}
|
|
|
|
void CSkyDialog::OnDestroy()
|
|
{
|
|
CToolbarDialog::OnDestroy();
|
|
}
|