📄 skydialog.cpp
字号:
/****************************************************************************************/
/* SkyDialog.cpp */
/* */
/* Author: Jim Mischel */
/* Description: Sky settings */
/* */
/* The contents of this file are subject to the Genesis3D Public License */
/* Version 1.01 (the "License"); you may not use this file except in */
/* compliance with the License. You may obtain a copy of the License at */
/* http://www.genesis3d.com */
/* */
/* Software distributed under the License is distributed on an "AS IS" */
/* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See */
/* the License for the specific language governing rights and limitations */
/* under the License. */
/* */
/* The Original Code is Genesis3D, released March 25, 1999. */
/*Genesis3D Version 1.1 released November 15, 1999 */
/* Copyright (C) 1999 WildTangent, Inc. All Rights Reserved */
/* */
/* Modified by Tom Morris for GenEdit-Classic ver. 0.55, Jan. 10, 2001 */
/****************************************************************************************/
#include "stdafx.h"
#include "Globals.h"
#include "GenEdit.h"
#include "SkyDialog.h"
#include "wadfile.h"
//#include "GenEditdoc.h"
#include "ram.h"
#include "util.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSkyDialog dialog
CSkyDialog::CSkyDialog(CWnd *pParent /*=NULL*/)
: CDialog(CSkyDialog::IDD, (CWnd*)pParent)
{
//{{AFX_DATA_INIT(CSkyDialog)
m_RotationAxis = -1;
m_RotationSpeed = 0.0f;
m_TextureScale = 1.0f;
//}}AFX_DATA_INIT
// m_pGenEditDoc = pDoc;
// m_pParentCtrl = pParent;
// CDialog::Create (IDD, (CWnd*)pParent);
}
CSkyDialog::~CSkyDialog ()
{
}
void CSkyDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSkyDialog)
DDX_Control(pDX, IDC_NULLCOMBO, m_NullCombo);
DDX_Control(pDX, IDC_CLEAR_ALL_BTN, m_clearAllBtn);
DDX_Control(pDX, IDC_ALL_SAMEBTN, m_allsameBtn);
DDX_Control(pDX, IDC_CBALLSAME, m_SkyAlltheSameCombo);
DDX_Control(pDX, IDC_EDITSPEED, m_EditSpeed);
DDX_Control(pDX, IDC_SKYTOP, m_SkyTop);
DDX_Control(pDX, IDC_SKYRIGHT, m_SkyRight);
DDX_Control(pDX, IDC_SKYLEFT, m_SkyLeft);
DDX_Control(pDX, IDC_SKYFRONT, m_SkyFront);
DDX_Control(pDX, IDC_SKYBOTTOM, m_SkyBottom);
DDX_Control(pDX, IDC_SKYBACK, m_SkyBack);
DDX_Control(pDX, IDC_CBSKYTOP, m_SkyTopCombo);
DDX_Control(pDX, IDC_CBSKYRIGHT, m_SkyRightCombo);
DDX_Control(pDX, IDC_CBSKYLEFT, m_SkyLeftCombo);
DDX_Control(pDX, IDC_CBSKYFRONT, m_SkyFrontCombo);
DDX_Control(pDX, IDC_CBSKYBOTTOM, m_SkyBottomCombo);
DDX_Control(pDX, IDC_CBSKYBACK, m_SkyBackCombo);
DDX_Radio(pDX, IDC_AXISX, m_RotationAxis);
DDX_Text(pDX, IDC_EDITSPEED, m_RotationSpeed);
DDV_MinMaxFloat(pDX, m_RotationSpeed, 0.f, 3600.f);
DDX_Text(pDX, IDC_EDITSCALE, m_TextureScale);
DDV_MinMaxFloat(pDX, m_TextureScale, 0.f, 255.f);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSkyDialog, CDialog)
//{{AFX_MSG_MAP(CSkyDialog)
ON_BN_CLICKED(IDC_SKYBACK, OnSkyback)
ON_BN_CLICKED(IDC_SKYBOTTOM, OnSkybottom)
ON_BN_CLICKED(IDC_SKYFRONT, OnSkyfront)
ON_BN_CLICKED(IDC_SKYLEFT, OnSkyleft)
ON_BN_CLICKED(IDC_SKYRIGHT, OnSkyright)
ON_BN_CLICKED(IDC_SKYTOP, OnSkytop)
ON_CBN_SELCHANGE(IDC_CBSKYLEFT, OnSelchangeCbskyleft)
ON_CBN_SELCHANGE(IDC_CBSKYRIGHT, OnSelchangeCbskyright)
ON_CBN_SELCHANGE(IDC_CBSKYTOP, OnSelchangeCbskytop)
ON_CBN_SELCHANGE(IDC_CBSKYBOTTOM, OnSelchangeCbskybottom)
ON_CBN_SELCHANGE(IDC_CBSKYFRONT, OnSelchangeCbskyfront)
ON_CBN_SELCHANGE(IDC_CBSKYBACK, OnSelchangeCbskyback)
ON_EN_KILLFOCUS(IDC_EDITSPEED, OnKillfocusEditspeed)
ON_BN_CLICKED(IDC_AXISX, OnAxisButton)
ON_EN_KILLFOCUS(IDC_EDITSCALE, OnKillfocusEditscale)
ON_CBN_SELCHANGE(IDC_CBALLSAME, OnSelchangeCBallsame)
ON_BN_CLICKED(IDC_CLEAR_ALL_BTN, OnClearAllBtn)
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_AXISY, OnAxisButton)
ON_BN_CLICKED(IDC_AXISZ, OnAxisButton)
ON_WM_MOUSEMOVE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSkyDialog message handlers
BOOL CSkyDialog::OnInitDialog()
{
// RECT rect;
// RECT rect2;
m_pGenEditDoc = CGlobals::GetActiveDocument();
CDialog::OnInitDialog();
/* m_pParentCtrl->GetClientRect (&rect);
m_pParentCtrl->GetItemRect( 0, &rect2 );
rect.top = rect2.bottom + FTC_BORDER_SIZE_TOP;
rect.left = rect.left + FTC_BORDER_SIZE_LEFT;
rect.right = rect.right - FTC_BORDER_SIZE_RIGHT ;
rect.bottom = rect.bottom - FTC_BORDER_SIZE_BOTTOM ;
SetWindowPos( NULL, rect.left,
rect.top, rect.right, rect.bottom, SWP_NOZORDER );
*/
Update (m_pGenEditDoc);
m_NullCombo.SetCurSel(-1); // a dummy combo
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
// ======================================================================================
void CSkyDialog::UpdateSkyFaceInfo (CButton &FaceButton, CComboBox &FaceCombo, int FaceIndex)
{
CWadFile *pWad;
FaceCombo.ResetContent ();
pWad = Level_GetWadFile (m_pGenEditDoc->pLevel);
for (int index = 0; index < pWad->mBitmapCount; ++index)
{
CString Name = pWad->mBitmaps[index].Name;
FaceCombo.AddString (Name);
}
SetSkyFaceUI (FaceButton, FaceCombo, FaceIndex);
}
void CSkyDialog::Update (CGenEditDoc *pDoc)
{
m_pGenEditDoc = pDoc;
geVec3d Axis;
// SkyFaceTexture *SkyInfo =
Level_GetSkyInfo (m_pGenEditDoc->pLevel, &Axis, &m_RotationSpeed, &m_TextureScale);
if (Axis.X != 0.0f)
{
m_RotationAxis = 0;
CButton *xaxis = (CButton*)GetDlgItem(IDC_AXISX);
xaxis->SetCheck(1);
}
else if (Axis.Y != 0.0f)
{
m_RotationAxis = 1;
CButton *yaxis = (CButton*)GetDlgItem(IDC_AXISY);
yaxis->SetCheck(1);
}
else
{
m_RotationAxis = 2;
CButton *zaxis = (CButton*)GetDlgItem(IDC_AXISZ);
zaxis->SetCheck(1);
}
UpdateSkyFaceInfo (m_SkyLeft, m_SkyLeftCombo, SkyFace_Left);
UpdateSkyFaceInfo (m_SkyRight, m_SkyRightCombo, SkyFace_Right);
UpdateSkyFaceInfo (m_SkyTop, m_SkyTopCombo, SkyFace_Top);
UpdateSkyFaceInfo (m_SkyBottom, m_SkyBottomCombo, SkyFace_Bottom);
UpdateSkyFaceInfo (m_SkyFront, m_SkyFrontCombo, SkyFace_Front);
UpdateSkyFaceInfo (m_SkyBack, m_SkyBackCombo, SkyFace_Back);
// NOTE: G3DC added SkyFace_Null item to SkyFace enum type in Level.h
UpdateSkyFaceInfo (m_allsameBtn, m_SkyAlltheSameCombo, SkyFace_Null);
UpdateSkyFaceInfo (m_allsameBtn, m_NullCombo, SkyFace_Null);
m_SkyAlltheSameCombo.EnableWindow(TRUE);
if (m_SkyLeftCombo.GetCurSel() != -1)
{
m_SkyLeftCombo.EnableWindow();
m_SkyLeft.SetCheck(1);
}
if (m_SkyRightCombo.GetCurSel() != -1)
{
m_SkyRightCombo.EnableWindow();
m_SkyRight.SetCheck(1);
}
if (m_SkyTopCombo.GetCurSel() != -1)
{
m_SkyTopCombo.EnableWindow();
m_SkyTop.SetCheck(1);
}
if (m_SkyBottomCombo.GetCurSel() != -1)
{
m_SkyBottomCombo.EnableWindow();
m_SkyBottom.SetCheck(1);
}
if (m_SkyFrontCombo.GetCurSel() != -1)
{
m_SkyFrontCombo.EnableWindow();
m_SkyFront.SetCheck(1);
}
if (m_SkyBackCombo.GetCurSel() != -1)
{
m_SkyBackCombo.EnableWindow();
m_SkyBack.SetCheck(1);
}
UpdateData (TRUE);
}
int CSkyDialog::FaceNameInCombo (char const *TextureName, CComboBox &FaceCombo)
{
CString tempTextureName = TextureName; // post 0.57
if (tempTextureName == _T("")) // post 0.57 for more reliable checking
{
return CB_ERR;
}
return FaceCombo.FindStringExact (0, TextureName);
}
void CSkyDialog::SetSkyFaceUI (CButton &FaceButton, CComboBox &FaceCombo, int FaceIndex)
{
if (m_pGenEditDoc != NULL)
{
int Index;
SkyFaceTexture *SkyFaces;
geVec3d Axis;
geFloat Speed, Scale;
SkyFaces = Level_GetSkyInfo (m_pGenEditDoc->pLevel, &Axis, &Speed, &Scale);
// If the texture name is in the combo, then select that item.
// Otherwise select -1
Index = FaceNameInCombo (SkyFaces[FaceIndex].TextureName, FaceCombo);
FaceCombo.SetCurSel (Index);
FaceButton.SetCheck ((SkyFaces[FaceIndex].Apply) ? 1 : 0);
FaceCombo.EnableWindow (SkyFaces[FaceIndex].Apply);
}
}
void CSkyDialog::UpdateSkyFaceUI (CButton &FaceButton, CComboBox &FaceCombo, int FaceIndex)
{
BOOL Checked;
Checked = (FaceButton.GetCheck() == 1);
FaceCombo.EnableWindow (Checked);
if (m_pGenEditDoc != NULL)
{
SkyFaceTexture *SkyFaces;
geVec3d Axis;
geFloat Speed, Scale;
SkyFaces = Level_GetSkyInfo (m_pGenEditDoc->pLevel, &Axis, &Speed, &Scale);
SkyFaces[FaceIndex].Apply = Checked;
}
}
void CSkyDialog::ResetSkySurface(CComboBox &FaceCombo, int FaceIndex)
{
FaceCombo.SetCurSel(-1);
UpdateFaceTextureName (m_NullCombo, FaceIndex, false);
FaceCombo.SetCurSel(-1);
m_SkyAlltheSameCombo.SetCurSel(-1);
}
void CSkyDialog::OnSkyback()
{
if (m_SkyBack.GetCheck() == 0)
{
ResetSkySurface(m_SkyBackCombo, SkyFace_Back);
}
UpdateSkyFaceUI (m_SkyBack, m_SkyBackCombo, SkyFace_Back);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -