dlgtoolsparticles.cpp

来自「混乱竞技场的全套代码,客户端资源可以网上搜」· C++ 代码 · 共 933 行 · 第 1/2 页

CPP
933
字号
// DlgToolsParticles.cpp : implementation file
//

#include "stdafx.h"
#include "gstools.h"
#include "DlgToolsParticles.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDlgToolsParticles dialog


CDlgToolsParticles::CDlgToolsParticles(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgToolsParticles::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDlgToolsParticles)
	m_isAttrative = FALSE;
	m_isColliding = FALSE;
	m_str_texture = _T("");
	m_nTextureIndex = 0;
	m_gravity_end = 0.0f;
	m_gravity_start = 0.0f;
	m_gravity_var = 0.0f;
	m_size_end = 0.0f;
	m_size_start = 0.0f;
	m_size_var = 0.0f;
	m_alpha_end = 0.0f;
	m_alpha_start = 0.0f;
	m_alpha_var = 0.0f;
	m_color_red_end = 0.0f;
	m_color_green_end = 0.0f;
	m_color_blue_end = 0.0f;
	m_color_red_start = 0.0f;
	m_color_green_start = 0.0f;
	m_color_blue_start = 0.0f;
	m_color_red_var = 0.0f;
	m_color_green_var = 0.0f;
	m_color_blue_var = 0.0f;
	m_frequence = 0;
	m_angle = 0.0f;
	m_life = 0.0f;
	m_speed = 0.0f;
	m_life_var = 0.0f;
	m_speed_var = 0.0f;
	m_isGathering = FALSE;
	m_nAction = 0;
	m_preview_speed = 2000;
	m_preview_length = 300;
	m_hasAlpha = FALSE;
	//}}AFX_DATA_INIT
}

CDlgToolsParticles::~CDlgToolsParticles()
{
	if(g_pToolsCtl)
		g_pToolsCtl->SetTools(NULL);


}

void CDlgToolsParticles::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgToolsParticles)
	DDX_Control(pDX, ID_SLIDER_PREVIEW_SPEED, m_slider_preview_speed);
	DDX_Control(pDX, ID_SLIDER_PREVIEW_LENGTH, m_slider_preview_length);
	DDX_Control(pDX, ID_SLIDER_4, m_slider_speed);
	DDX_Control(pDX, ID_SLIDER_3, m_slider_life);
	DDX_Control(pDX, ID_SLIDER_2, m_slider_angle);
	DDX_Control(pDX, ID_SLIDER_1, m_slider_frequence);
	DDX_Control(pDX, ID_SLIDER_START_6, m_slider_color_blue_start);
	DDX_Control(pDX, ID_SLIDER_START_5, m_slider_color_green_start);
	DDX_Control(pDX, ID_SLIDER_START_4, m_slider_color_red_start);
	DDX_Control(pDX, ID_SLIDER_END_6, m_slider_color_blue_end);
	DDX_Control(pDX, ID_SLIDER_END_5, m_slider_color_green_end);
	DDX_Control(pDX, ID_SLIDER_END_4, m_slider_color_red_end);
	DDX_Control(pDX, ID_SLIDER_START_3, m_slider_alpha_start);
	DDX_Control(pDX, ID_SLIDER_END_3, m_slider_alpha_end);
	DDX_Control(pDX, ID_SLIDER_START_2, m_slider_size_start);
	DDX_Control(pDX, ID_SLIDER_START_1, m_slider_gravity_start);
	DDX_Control(pDX, ID_SLIDER_END_2, m_slider_size_end);
	DDX_Control(pDX, ID_SLIDER_END_1, m_slider_gravity_end);
	DDX_Check(pDX, IDC_CHECK_Attractive, m_isAttrative);
	DDX_Check(pDX, IDC_CHECK_Colliding, m_isColliding);
	DDX_Text(pDX, IDC_EDIT_TEXTURE, m_str_texture);
	DDX_CBIndex(pDX, IDC_COMBO_TEXTURE, m_nTextureIndex);
	DDX_Text(pDX, ID_EDIT_END_1, m_gravity_end);
	DDX_Text(pDX, ID_EDIT_START_1, m_gravity_start);
	DDX_Text(pDX, ID_EDIT_VAR_1, m_gravity_var);
	DDX_Text(pDX, ID_EDIT_END_2, m_size_end);
	DDX_Text(pDX, ID_EDIT_START_2, m_size_start);
	DDX_Text(pDX, ID_EDIT_VAR_2, m_size_var);
	DDX_Text(pDX, ID_EDIT_END_3, m_alpha_end);
	DDX_Text(pDX, ID_EDIT_START_3, m_alpha_start);
	DDX_Text(pDX, ID_EDIT_VAR_3, m_alpha_var);
	DDX_Text(pDX, ID_EDIT_END_4, m_color_red_end);
	DDX_Text(pDX, ID_EDIT_END_5, m_color_green_end);
	DDX_Text(pDX, ID_EDIT_END_6, m_color_blue_end);
	DDX_Text(pDX, ID_EDIT_START_4, m_color_red_start);
	DDX_Text(pDX, ID_EDIT_START_5, m_color_green_start);
	DDX_Text(pDX, ID_EDIT_START_6, m_color_blue_start);
	DDX_Text(pDX, ID_EDIT_VAR_4, m_color_red_var);
	DDX_Text(pDX, ID_EDIT_VAR_5, m_color_green_var);
	DDX_Text(pDX, ID_EDIT_VAR_6, m_color_blue_var);
	DDX_Text(pDX, ID_EDIT_1, m_frequence);
	DDX_Text(pDX, ID_EDIT_2, m_angle);
	DDX_Text(pDX, ID_EDIT_3, m_life);
	DDX_Text(pDX, ID_EDIT_4, m_speed);
	DDX_Text(pDX, ID_EDIT_V_3, m_life_var);
	DDX_Text(pDX, ID_EDIT_V_4, m_speed_var);
	DDX_Check(pDX, IDC_CHECK_Gathering, m_isGathering);
	DDX_CBIndex(pDX, IDC_COMBO_ACTION, m_nAction);
	DDX_Slider(pDX, ID_SLIDER_PREVIEW_SPEED, m_preview_speed);
	DDX_Slider(pDX, ID_SLIDER_PREVIEW_LENGTH, m_preview_length);
	DDX_Check(pDX, IDC_CHECK_TEXTURE_ALPHA, m_hasAlpha);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDlgToolsParticles, CDialog)
	//{{AFX_MSG_MAP(CDlgToolsParticles)
	ON_EN_CHANGE(ID_EDIT_1, OnChangeFrequence)
	ON_EN_CHANGE(ID_EDIT_2, OnChangeAngle)
	ON_EN_CHANGE(ID_EDIT_3, OnChangeLifeStart)
	ON_EN_CHANGE(ID_EDIT_V_3, OnChangeLifeVar)
	ON_EN_CHANGE(ID_EDIT_4, OnChangeSpeed)
	ON_EN_CHANGE(ID_EDIT_V_4, OnChangeSpeedVar)
	ON_EN_CHANGE(ID_EDIT_START_1, OnChangeGravity)
	ON_EN_CHANGE(ID_EDIT_VAR_1, OnChangeGravityVar)
	ON_EN_CHANGE(ID_EDIT_END_1, OnChangeGravityEnd)
	ON_EN_CHANGE(ID_EDIT_START_2, OnChangeSizeStart)
	ON_EN_CHANGE(ID_EDIT_VAR_2, OnChangeSizeVar)
	ON_EN_CHANGE(ID_EDIT_END_2, OnChangeSizeEnd)
	ON_EN_CHANGE(ID_EDIT_START_3, OnChangeAlphaStart)
	ON_EN_CHANGE(ID_EDIT_VAR_3, OnChangeAlphaVar)
	ON_EN_CHANGE(ID_EDIT_END_3, OnChangeAlphaEnd)
	ON_EN_CHANGE(ID_EDIT_START_4, OnChangeColorRedStart)
	ON_EN_CHANGE(ID_EDIT_VAR_4, OnChangeColorRedVar)
	ON_EN_CHANGE(ID_EDIT_END_4, OnChangeColorRedEnd)
	ON_EN_CHANGE(ID_EDIT_START_5, OnChangeColorGreenStart)
	ON_EN_CHANGE(ID_EDIT_VAR_5, OnChangeColorGreenVar)
	ON_EN_CHANGE(ID_EDIT_END_5, OnChangeColorGreenEnd)
	ON_EN_CHANGE(ID_EDIT_START_6, OnChangeColorBlueStart)
	ON_EN_CHANGE(ID_EDIT_VAR_6, OnChangeColorBlueVar)
	ON_EN_CHANGE(ID_EDIT_END_6, OnChangeColorEnd)
	ON_NOTIFY(NM_CUSTOMDRAW, ID_SLIDER_1, OnCustomdrawFrequence)
	ON_NOTIFY(NM_CUSTOMDRAW, ID_SLIDER_2, OnCustomdrawAngle)
	ON_NOTIFY(NM_CUSTOMDRAW, ID_SLIDER_3, OnCustomdrawSliderLife)
	ON_NOTIFY(NM_CUSTOMDRAW, ID_SLIDER_4, OnCustomdrawSliderSpeed)
	ON_NOTIFY(NM_CUSTOMDRAW, ID_SLIDER_START_1, OnCustomdrawSliderGravityStart)
	ON_NOTIFY(NM_CUSTOMDRAW, ID_SLIDER_END_1, OnCustomdrawSliderGravityEnd)
	ON_NOTIFY(NM_CUSTOMDRAW, ID_SLIDER_START_2, OnCustomdrawSliderSizeStart)
	ON_NOTIFY(NM_CUSTOMDRAW, ID_SLIDER_END_2, OnCustomdrawSliderSizeEnd)
	ON_NOTIFY(NM_CUSTOMDRAW, ID_SLIDER_START_4, OnCustomdrawSliderColorRedStart)
	ON_NOTIFY(NM_CUSTOMDRAW, ID_SLIDER_START_3, OnCustomdrawSliderAlphaStart)
	ON_NOTIFY(NM_CUSTOMDRAW, ID_SLIDER_END_3, OnCustomdrawSliderAlphaEnd)
	ON_NOTIFY(NM_CUSTOMDRAW, ID_SLIDER_END_4, OnCustomdrawSliderColorRedEnd)
	ON_NOTIFY(NM_CUSTOMDRAW, ID_SLIDER_START_5, OnCustomdrawSliderColorGreenStart)
	ON_NOTIFY(NM_CUSTOMDRAW, ID_SLIDER_END_5, OnCustomdrawSliderColorGreenEnd)
	ON_NOTIFY(NM_CUSTOMDRAW, ID_SLIDER_START_6, OnCustomdrawSliderColorBlueStart)
	ON_NOTIFY(NM_CUSTOMDRAW, ID_SLIDER_END_6, OnCustomdrawSliderColorBlueEnd)
	ON_BN_CLICKED(IDC_CHECK_Attractive, OnCHECKAttractive)
	ON_BN_CLICKED(IDC_CHECK_Colliding, OnCHECKColliding)
	ON_BN_CLICKED(ID_BTN_SAVE, OnBtnSave)
	ON_BN_CLICKED(ID_BTN_SAVE_AS, OnBtnSaveAs)
	ON_BN_CLICKED(ID_BTN_IMPORT, OnBtnImport)
	ON_BN_CLICKED(IDC_BUTTON_TEXTURE, OnButtonTexture)
	ON_CBN_SELCHANGE(IDC_COMBO_TEXTURE, OnSelchangeComboTexture)
	ON_BN_CLICKED(IDC_CHECK_Gathering, OnCHECKGathering)
	ON_CBN_SELENDOK(IDC_COMBO_ACTION, OnSelendokComboAction)
	ON_NOTIFY(NM_CUSTOMDRAW, ID_SLIDER_PREVIEW_LENGTH, OnCustomdrawSliderPreviewLength)
	ON_NOTIFY(NM_CUSTOMDRAW, ID_SLIDER_PREVIEW_SPEED, OnCustomdrawSliderPreviewSpeed)
	ON_BN_CLICKED(IDC_CHECK_TEXTURE_ALPHA, OnCheckTextureAlpha)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgToolsParticles message handlers





BOOL CDlgToolsParticles::Create(CGsParticleEmitter& particles)
{
	m_ptr_particles = &particles;

	if(NULL==g_pToolsCtl)
		return FALSE;
	if (!CDialog::Create(CDlgToolsParticles::IDD, g_pToolsCtl))
	{
		TRACE0("Warning: creation of CStartupDlg dialog failed\n");
		return FALSE;
	}
	
	ShowWindow(SW_HIDE);
	UpdateWindow();

	g_pToolsCtl->SetTools(this);


	return TRUE;
}

void CDlgToolsParticles::Init()
{
	m_slider_alpha_end.SetRange(0, 255);
	m_slider_alpha_start.SetRange(0, 255);
	m_slider_color_red_end.SetRange(0, 255);
	m_slider_color_red_start.SetRange(0, 255);
	m_slider_color_green_end.SetRange(0, 255);
	m_slider_color_green_start.SetRange(0, 255);
	m_slider_color_blue_end.SetRange(0, 255);
	m_slider_color_blue_start.SetRange(0, 255);
	m_slider_gravity_end.SetRange(0, 2000);
	m_slider_gravity_start.SetRange(0, 2000);
	m_slider_size_end.SetRange(0, 1000);
	m_slider_size_start.SetRange(0, 1000);
	
	m_slider_life.SetRange(0, 1000);
	m_slider_frequence.SetRange(0, 500);
	m_slider_speed.SetRange(0, 20000);
	m_slider_angle.SetRange(0, 360);

	m_slider_preview_length.SetRange(100, 2000);
	m_slider_preview_speed.SetRange(100, 5000);

	m_alpha_end		= m_ptr_particles->GetAlphaEnd();
	m_alpha_start	= m_ptr_particles->GetAlphaStart();
	m_alpha_var		= m_ptr_particles->GetAlphaVar();

	m_isAttrative	= m_ptr_particles->IsAttractive();
	m_isColliding	= m_ptr_particles->IsColliding();
	m_isGathering	= m_ptr_particles->IsGathering();

	D3DCOLORVALUE cr;
	cr		= m_ptr_particles->GetColorEnd();
	m_color_red_end		= cr.r;
	m_color_green_end	= cr.g;
	m_color_blue_end	= cr.b;
	
	cr		= m_ptr_particles->GetColorStart();
	m_color_red_start		= cr.r;
	m_color_green_start	= cr.g;
	m_color_blue_start	= cr.b;

	cr		= m_ptr_particles->GetColorVar();
	m_color_red_var		= cr.r;
	m_color_green_var	= cr.g;
	m_color_blue_var	= cr.b;


	m_gravity_end	= m_ptr_particles->GetGravityEnd();
	m_gravity_start	= m_ptr_particles->GetGravityStart();
	m_gravity_var	= m_ptr_particles->GetGravityVar();

	m_life			= m_ptr_particles->GetLife();
	m_life_var		= m_ptr_particles->GetLifeVar();

	m_frequence		= m_ptr_particles->GetParticlesPerSec();

	m_size_end		= m_ptr_particles->GetSizeEnd();
	m_size_start	= m_ptr_particles->GetSizeStart();
	m_size_var		= m_ptr_particles->GetSizeVar();

	m_speed			= m_ptr_particles->GetSpeed();
	m_speed_var		= m_ptr_particles->GetSpeedVar();

	m_angle			= m_ptr_particles->GetTheta();

	m_str_texture	= m_ptr_particles->GetANI(m_nTextureIndex);
	m_hasAlpha		= m_ptr_particles->IsANIHasAlpha(m_nTextureIndex);

	UpdateData(FALSE);
	UpdateSeting();
}


VOID CDlgToolsParticles::UpdateSeting()
{
	m_slider_alpha_end.SetPos(m_alpha_end*255);
	m_slider_alpha_start.SetPos(m_alpha_start*255);
	m_slider_color_red_end.SetPos(m_color_red_end*255);
	m_slider_color_red_start.SetPos(m_color_red_start*255);
	m_slider_color_green_end.SetPos(m_color_green_end*255);
	m_slider_color_green_start.SetPos(m_color_green_start*255);
	m_slider_color_blue_end.SetPos(m_color_blue_end*255);
	m_slider_color_blue_start.SetPos(m_color_blue_start*255);
	m_slider_gravity_end.SetPos(m_gravity_end*100+1000);
	m_slider_gravity_start.SetPos(m_gravity_start*100+1000);
	m_slider_size_end.SetPos(m_size_end*100);
	m_slider_size_start.SetPos(m_size_start*100);
	
	m_slider_life.SetPos(m_life*100);
	m_slider_frequence.SetPos(m_frequence);
	m_slider_speed.SetPos(m_speed*10);
	m_slider_angle.SetPos(m_angle);

}


VOID CDlgToolsParticles::UpdateParticles()
{
	UpdateData();
	m_ptr_particles->SetAlphaEnd(m_alpha_end);
	m_ptr_particles->SetAlphaStart(m_alpha_start);
	m_ptr_particles->SetAlphaVar(m_alpha_var);

	m_ptr_particles->SetAttractive(m_isAttrative);
	m_ptr_particles->SetColliding(m_isColliding);
	m_ptr_particles->SetGathering(m_isGathering);

	D3DCOLORVALUE cr;
	cr.r	= m_color_red_end;
	cr.g	= m_color_green_end;
	cr.b	= m_color_blue_end;
	m_ptr_particles->SetColorEnd(cr);
	cr.r	= m_color_red_start;
	cr.g	= m_color_green_start;
	cr.b	= m_color_blue_start;
	m_ptr_particles->SetColorStart(cr);
	cr.r	= m_color_red_var;
	cr.g	= m_color_green_var;
	cr.b	= m_color_blue_var;
	m_ptr_particles->SetColorVar(cr);

	m_ptr_particles->SetGravityEnd(m_gravity_end);
	m_ptr_particles->SetGravityStart(m_gravity_start);
	m_ptr_particles->SetGravityVar(m_gravity_var);

	m_ptr_particles->SetLife(m_life);
	m_ptr_particles->SetLifeVar(m_life_var);

	m_ptr_particles->SetParticlesPerSec(m_frequence);

	m_ptr_particles->SetSizeEnd(m_size_end);
	m_ptr_particles->SetSizeStart(m_size_start);
	m_ptr_particles->SetSizeVar(m_size_var);

	m_ptr_particles->SetSpeed(m_speed);
	m_ptr_particles->SetSpeedVar(m_speed_var);

	m_ptr_particles->SetTheta(m_angle);
}

BOOL CDlgToolsParticles::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	
	Init();

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CDlgToolsParticles::OnChangeFrequence() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	UpdateParticles();
	UpdateSeting();
}

void CDlgToolsParticles::OnChangeAngle() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	UpdateParticles();
	UpdateSeting();
	
}

void CDlgToolsParticles::OnChangeLifeStart() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	UpdateParticles();
	UpdateSeting();
	
}

void CDlgToolsParticles::OnChangeLifeVar() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	UpdateParticles();
	UpdateSeting();
	
}

void CDlgToolsParticles::OnChangeSpeed() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	UpdateParticles();
	UpdateSeting();
	
}

void CDlgToolsParticles::OnChangeSpeedVar() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	UpdateParticles();
	UpdateSeting();
	
}

void CDlgToolsParticles::OnChangeGravity() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	UpdateParticles();
	UpdateSeting();
	
}

void CDlgToolsParticles::OnChangeGravityVar() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	UpdateParticles();
	UpdateSeting();
	
}

void CDlgToolsParticles::OnChangeGravityEnd() 
{

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?