⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 skydialog.cpp

📁 3D游戏场景编辑器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/****************************************************************************************/
/*  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 + -