// EffectPage.cpp : implementation file // #include "stdafx.h" #include "resource.h" #include "EffectPage.h" #include "MainFrm.h" #include "EffectEditorDoc.h" #include "EffectEditorView.h" #include "Z3DMath.h" #ifdef _DEBUG #undef THIS_FILE static char BASED_CODE THIS_FILE[] = __FILE__; #endif IMPLEMENT_DYNCREATE(CParticlePage, CPropertyPage) IMPLEMENT_DYNCREATE(CBillboardPage, CPropertyPage) IMPLEMENT_DYNCREATE(CCylinderPage, CPropertyPage) IMPLEMENT_DYNCREATE(CPlanePage, CPropertyPage) ///////////////////////////////////////////////////////////////////////////// // CParticlePage property page CParticlePage::CParticlePage() : CPropertyPage(CParticlePage::IDD) { //{{AFX_DATA_INIT(CParticlePage) m_strTexture = _T(""); m_dwStartFrame = 1; m_dwEndFrame = 30; m_fRotation = 0.0f; m_fTexSpeed = 1.0f; m_fLifetime = 25.0f; m_fLifetimeSeed = 0.0f; m_fPowerSeed = 0.0f; m_fRadius = 0.0f; m_fVolX = 0.0f; m_fVolY = 0.0f; m_fVolZ = 0.0f; m_fInnerRadius = 0.0f; m_bContinuous = FALSE; //}}AFX_DATA_INIT } CParticlePage::~CParticlePage() { } void CParticlePage::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CParticlePage) DDX_Control(pDX, IDC_CBSRC, m_cbSrc); DDX_Control(pDX, IDC_CBDEST, m_cbDest); DDX_Control(pDX, IDC_CBADDRESSV, m_cbAddressV); DDX_Control(pDX, IDC_CBADDRESSU, m_cbAddressU); DDX_Control(pDX, IDC_WIDTH, m_edtWidth); DDX_Control(pDX, IDC_SCEALPHA, m_edtSceAlpha); DDX_Control(pDX, IDC_POWER, m_edtPower); DDX_Control(pDX, IDC_HEIGHT, m_edtHeight); DDX_Control(pDX, IDC_EFORCEZ, m_edtEForceZ); DDX_Control(pDX, IDC_EFORCEY, m_edtEForceY); DDX_Control(pDX, IDC_EFORCEX, m_edtEForceX); DDX_Control(pDX, IDC_DIRZ, m_edtDirZ); DDX_Control(pDX, IDC_DIRY, m_edtDirY); DDX_Control(pDX, IDC_DIRX, m_edtDirX); DDX_Control(pDX, IDC_COLR, m_edtColR); DDX_Control(pDX, IDC_COLG, m_edtColG); DDX_Control(pDX, IDC_COLB, m_edtColB); DDX_Control(pDX, IDC_CENZ, m_edtCenZ); DDX_Control(pDX, IDC_CENY, m_edtCenY); DDX_Control(pDX, IDC_CENX, m_edtCenX); DDX_Control(pDX, IDC_AXISZ, m_edtAxisZ); DDX_Control(pDX, IDC_AXISY, m_edtAxisY); DDX_Control(pDX, IDC_AXISX, m_edtAxisX); DDX_Control(pDX, IDC_ANGLE, m_edtAngle); DDX_Control(pDX, IDC_AMOUNT, m_edtAmount); DDX_Control(pDX, IDC_ALPHA, m_edtAlpha); DDX_Text(pDX, IDC_TEXTURE, m_strTexture); DDX_Text(pDX, IDC_STARTFRAME, m_dwStartFrame); DDX_Text(pDX, IDC_ENDFRAME, m_dwEndFrame); DDX_Text(pDX, IDC_ROTATION, m_fRotation); DDX_Text(pDX, IDC_TEXSPEED, m_fTexSpeed); DDX_Text(pDX, IDC_LIFETIME, m_fLifetime); DDX_Text(pDX, IDC_LIFETIMESEED, m_fLifetimeSeed); DDX_Text(pDX, IDC_POWERSEED, m_fPowerSeed); DDX_Text(pDX, IDC_RADIUS, m_fRadius); DDX_Text(pDX, IDC_VOLX, m_fVolX); DDX_Text(pDX, IDC_VOLY, m_fVolY); DDX_Text(pDX, IDC_VOLZ, m_fVolZ); DDX_Text(pDX, IDC_INNERRADIUS, m_fInnerRadius); DDX_Check(pDX, IDC_CONTINUOUS, m_bContinuous); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CParticlePage, CPropertyPage) //{{AFX_MSG_MAP(CParticlePage) ON_BN_CLICKED(IDC_CREATE, OnCreate) ON_BN_CLICKED(IDC_DELETE, OnDelete) ON_BN_CLICKED(IDC_BROWSE, OnBrowse) ON_BN_CLICKED(IDC_NOVOLUME, OnNovolume) ON_BN_CLICKED(IDC_CIRCLEVOLUME, OnCirclevolume) ON_BN_CLICKED(IDC_SQUAREVOLUME, OnSquarevolume) ON_BN_CLICKED(IDC_AUTO, OnAuto) ON_BN_CLICKED(IDC_CONTINUOUS, OnContinuous) ON_CBN_SELCHANGE(IDC_CBSRC, OnSelchangeCbsrc) ON_CBN_SELCHANGE(IDC_CBDEST, OnSelchangeCbdest) ON_CBN_SELCHANGE(IDC_CBADDRESSU, OnSelchangeCbaddressu) ON_CBN_SELCHANGE(IDC_CBADDRESSV, OnSelchangeCbaddressv) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CBillboardPage property page CBillboardPage::CBillboardPage() : CPropertyPage(CBillboardPage::IDD) { //{{AFX_DATA_INIT(CBillboardPage) m_strTexture = _T(""); m_dwEndFrame = 30; m_dwStartFrame = 1; m_bAxisAligned = FALSE; //}}AFX_DATA_INIT } CBillboardPage::~CBillboardPage() { } void CBillboardPage::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CBillboardPage) DDX_Control(pDX, IDC_CBSRC, m_cbSrc); DDX_Control(pDX, IDC_CBDEST, m_cbDest); DDX_Control(pDX, IDC_CBADDRESSV, m_cbAddressV); DDX_Control(pDX, IDC_CBADDRESSU, m_cbAddressU); DDX_Control(pDX, IDC_TEXFRAME, m_edtTexFrame); DDX_Control(pDX, IDC_COLR, m_edtColR); DDX_Control(pDX, IDC_COLG, m_edtColG); DDX_Control(pDX, IDC_COLB, m_edtColB); DDX_Control(pDX, IDC_ALPHA, m_edtAlpha); DDX_Control(pDX, IDC_CENZ, m_edtCenZ); DDX_Control(pDX, IDC_CENY, m_edtCenY); DDX_Control(pDX, IDC_CENX, m_edtCenX); DDX_Control(pDX, IDC_AXISZ, m_edtAxisZ); DDX_Control(pDX, IDC_AXISY, m_edtAxisY); DDX_Control(pDX, IDC_AXISX, m_edtAxisX); DDX_Control(pDX, IDC_TILEV, m_edtTileV); DDX_Control(pDX, IDC_TILEU, m_edtTileU); DDX_Control(pDX, IDC_STARTV, m_edtStartV); DDX_Control(pDX, IDC_STARTU, m_edtStartU); DDX_Control(pDX, IDC_WIDTH, m_edtWidth); DDX_Control(pDX, IDC_HEIGHT, m_edtHeight); DDX_Text(pDX, IDC_TEXTURE, m_strTexture); DDX_Text(pDX, IDC_ENDFRAME, m_dwEndFrame); DDX_Text(pDX, IDC_STARTFRAME, m_dwStartFrame); DDX_Check(pDX, IDC_AXISALIGNED, m_bAxisAligned); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CBillboardPage, CPropertyPage) //{{AFX_MSG_MAP(CBillboardPage) ON_BN_CLICKED(IDC_CREATE, OnCreate) ON_BN_CLICKED(IDC_BROWSE, OnBrowse) ON_BN_CLICKED(IDC_DELETE, OnDelete) ON_BN_CLICKED(IDC_TEXSTATIC, OnTexstatic) ON_BN_CLICKED(IDC_TEXANI, OnTexani) ON_BN_CLICKED(IDC_AXISALIGNED, OnAxisaligned) ON_CBN_SELCHANGE(IDC_CBSRC, OnSelchangeCbsrc) ON_CBN_SELCHANGE(IDC_CBDEST, OnSelchangeCbdest) ON_CBN_SELCHANGE(IDC_CBADDRESSU, OnSelchangeCbaddressu) ON_CBN_SELCHANGE(IDC_CBADDRESSV, OnSelchangeCbaddressv) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CCylinderPage property page CCylinderPage::CCylinderPage() : CPropertyPage(CCylinderPage::IDD) { //{{AFX_DATA_INIT(CCylinderPage) m_dwEndFrame = 30; m_dwSidePlane = 3; m_dwStartFrame = 1; m_strTexture = _T(""); //}}AFX_DATA_INIT } CCylinderPage::~CCylinderPage() { } void CCylinderPage::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CCylinderPage) DDX_Control(pDX, IDC_CBADDRESSV, m_cbAddressV); DDX_Control(pDX, IDC_CBSRC, m_cbSrc); DDX_Control(pDX, IDC_CBDEST, m_cbDest); DDX_Control(pDX, IDC_CBADDRESSU, m_cbAddressU); DDX_Control(pDX, IDC_UPPERRADIUS, m_edtUpperRadius); DDX_Control(pDX, IDC_UPPERHEIGHT, m_edtUpperHeight); DDX_Control(pDX, IDC_TILEV, m_edtTileV); DDX_Control(pDX, IDC_TILEU, m_edtTileU); DDX_Control(pDX, IDC_TEXFRAME, m_edtTexFrame); DDX_Control(pDX, IDC_STARTV, m_edtStartV); DDX_Control(pDX, IDC_STARTU, m_edtStartU); DDX_Control(pDX, IDC_LOWERRADIUS, m_edtLowerRadius); DDX_Control(pDX, IDC_LOWERHEIGHT, m_edtLowerHeight); DDX_Control(pDX, IDC_COLR, m_edtColR); DDX_Control(pDX, IDC_COLG, m_edtColG); DDX_Control(pDX, IDC_COLB, m_edtColB); DDX_Control(pDX, IDC_CENZ, m_edtCenZ); DDX_Control(pDX, IDC_CENY, m_edtCenY); DDX_Control(pDX, IDC_CENX, m_edtCenX); DDX_Control(pDX, IDC_AXISZ, m_edtAxisZ); DDX_Control(pDX, IDC_AXISY, m_edtAxisY); DDX_Control(pDX, IDC_AXISX, m_edtAxisX); DDX_Control(pDX, IDC_ALPHA, m_edtAlpha); DDX_Text(pDX, IDC_ENDFRAME, m_dwEndFrame); DDX_Text(pDX, IDC_SIDEPLANE, m_dwSidePlane); DDX_Text(pDX, IDC_STARTFRAME, m_dwStartFrame); DDX_Text(pDX, IDC_TEXTURE, m_strTexture); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CCylinderPage, CPropertyPage) //{{AFX_MSG_MAP(CCylinderPage) ON_BN_CLICKED(IDC_CREATE, OnCreate) ON_BN_CLICKED(IDC_DELETE, OnDelete) ON_BN_CLICKED(IDC_BROWSE, OnBrowse) ON_BN_CLICKED(IDC_TEXSTATIC, OnTexstatic) ON_BN_CLICKED(IDC_TEXANI, OnTexani) ON_CBN_SELCHANGE(IDC_CBSRC, OnSelchangeCbsrc) ON_CBN_SELCHANGE(IDC_CBDEST, OnSelchangeCbdest) ON_CBN_SELCHANGE(IDC_CBADDRESSU, OnSelchangeCbaddressu) ON_CBN_SELCHANGE(IDC_CBADDRESSV, OnSelchangeCbaddressv) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPlanePage property page CPlanePage::CPlanePage() : CPropertyPage(CPlanePage::IDD) { //{{AFX_DATA_INIT(CPlanePage) m_strTexture = _T(""); m_dwEndFrame = 30; m_dwStartFrame = 1; //}}AFX_DATA_INIT } CPlanePage::~CPlanePage() { } void CPlanePage::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPlanePage) DDX_Control(pDX, IDC_CBSRC, m_cbSrc); DDX_Control(pDX, IDC_CBDEST, m_cbDest); DDX_Control(pDX, IDC_CBADDRESSV, m_cbAddressV); DDX_Control(pDX, IDC_CBADDRESSU, m_cbAddressU); DDX_Control(pDX, IDC_WIDTH, m_edtWidth); DDX_Control(pDX, IDC_TILEV, m_edtTileV); DDX_Control(pDX, IDC_TILEU, m_edtTileU); DDX_Control(pDX, IDC_TEXFRAME, m_edtTexFrame); DDX_Control(pDX, IDC_STARTV, m_edtStartV); DDX_Control(pDX, IDC_STARTU, m_edtStartU); DDX_Control(pDX, IDC_HEIGHT, m_edtHeight); DDX_Control(pDX, IDC_COLR, m_edtColR); DDX_Control(pDX, IDC_COLG, m_edtColG); DDX_Control(pDX, IDC_COLB, m_edtColB); DDX_Control(pDX, IDC_CENZ, m_edtCenZ); DDX_Control(pDX, IDC_CENY, m_edtCenY); DDX_Control(pDX, IDC_CENX, m_edtCenX); DDX_Control(pDX, IDC_AXISZ, m_edtAxisZ); DDX_Control(pDX, IDC_AXISY, m_edtAxisY); DDX_Control(pDX, IDC_AXISX, m_edtAxisX); DDX_Control(pDX, IDC_ALPHA, m_edtAlpha); DDX_Text(pDX, IDC_TEXTURE, m_strTexture); DDX_Text(pDX, IDC_ENDFRAME, m_dwEndFrame); DDX_Text(pDX, IDC_STARTFRAME, m_dwStartFrame); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CPlanePage, CPropertyPage) //{{AFX_MSG_MAP(CPlanePage) ON_BN_CLICKED(IDC_CREATE, OnCreate) ON_BN_CLICKED(IDC_BROWSE, OnBrowse) ON_BN_CLICKED(IDC_DELETE, OnDelete) ON_BN_CLICKED(IDC_TEXSTATIC, OnTexstatic) ON_BN_CLICKED(IDC_TEXANI, OnTexani) ON_CBN_SELCHANGE(IDC_CBSRC, OnSelchangeCbsrc) ON_CBN_SELCHANGE(IDC_CBDEST, OnSelchangeCbdest) ON_CBN_SELCHANGE(IDC_CBADDRESSU, OnSelchangeCbaddressu) ON_CBN_SELCHANGE(IDC_CBADDRESSV, OnSelchangeCbaddressv) //}}AFX_MSG_MAP END_MESSAGE_MAP() void CPlanePage::OnCreate() { // TODO: Add your control notification handler code here UpdateData(); CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; if(((CEffectEditorView*)mf->GetActiveView())->m_dwPreFrame > m_dwStartFrame) { m_dwStartFrame = ((CEffectEditorView*)mf->GetActiveView())->m_dwPreFrame; } if(((CEffectEditorView*)mf->GetActiveView())->m_dwPreFrame > m_dwEndFrame) { m_dwEndFrame = ((CEffectEditorView*)mf->GetActiveView())->m_dwPreFrame; } if(((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetMaxFrame() < m_dwStartFrame) { m_dwStartFrame = ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetMaxFrame() + 1; } if(((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetMaxFrame() < m_dwEndFrame) { m_dwEndFrame = ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetMaxFrame() + 1; } CX3DEffectEditPlane *pPlane; pPlane = new CX3DEffectEditPlane; unsigned long dwStartFrame = m_dwStartFrame - 1; unsigned long dwEndFrame = m_dwEndFrame - 1; pPlane->Create(dwStartFrame, dwEndFrame); ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->AddEffect(pPlane); ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect = ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->AddEditObject(pPlane); { quaternion quatAxis; quatAxis.Identity(); // m_fAxisX = m_fAxisX - (((unsigned long)(m_fAxisX / 360)) * 360.0f); // m_fAxisY = m_fAxisY - (((unsigned long)(m_fAxisY / 360)) * 360.0f); // m_fAxisZ = m_fAxisZ - (((unsigned long)(m_fAxisZ / 360)) * 360.0f); quatAxis.Pitch(FLOAT_DEG((float)m_edtAxisX)); quatAxis.Yaw(FLOAT_DEG((float)m_edtAxisY)); quatAxis.Roll(FLOAT_DEG((float)m_edtAxisZ)); pPlane->LoadTexture(m_strTexture.GetBuffer(m_strTexture.GetLength())); SetKey(dwStartFrame, pPlane->m_lstColor, color(m_edtColR, m_edtColG, m_edtColB, m_edtAlpha)); SetKey(dwStartFrame, pPlane->m_lstWidth, (float)m_edtWidth); SetKey(dwStartFrame, pPlane->m_lstHeight, (float)m_edtHeight); SetKey(dwStartFrame, pPlane->m_lstCenter, vector3(m_edtCenX, m_edtCenY, m_edtCenZ)); SetKey(dwStartFrame, pPlane->m_lstAxis, quatAxis); SetKey(dwStartFrame, pPlane->m_lstStartU, (float)m_edtStartU); SetKey(dwStartFrame, pPlane->m_lstStartV, (float)m_edtStartV); SetKey(dwStartFrame, pPlane->m_lstTileU, (float)m_edtTileU); SetKey(dwStartFrame, pPlane->m_lstTileV, (float)m_edtTileV); SetKey(dwStartFrame, pPlane->m_lstTexFrame, (float)m_edtTexFrame); pPlane->CreateBuffer(); pPlane->SetSrcBlending(D3DBLEND_ZERO + m_cbSrc.GetCurSel()); pPlane->SetDestBlending(D3DBLEND_ZERO + m_cbDest.GetCurSel()); pPlane->SetEffectKind(EFFECT_PLANE); SetKeyInfo(); // mf->m_KeyBar.m_lpKeySheet->m_Page1.m_sldKeyFrame.SetTic(((CEffectEditorView*)mf->GetActiveView())->m_dwPreFrame); } } void CPlanePage::OnBrowse() { // TODO: Add your control notification handler code here char strFilter[50] = "DDS ÆÄÀÏ(*.dds)|*.dds||"; CFileDialog dlg(TRUE, "*.dds", "", OFN_HIDEREADONLY | OFN_LONGNAMES, strFilter); if(dlg.DoModal() == IDOK) { m_strTexture = dlg.GetPathName(); CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditPlane *pPlane = (CX3DEffectEditPlane *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(3, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); if(pPlane) pPlane->LoadTexture(m_strTexture); UpdateData(FALSE); } } void CPlanePage::OnDelete() { // TODO: Add your control notification handler code here CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; if(((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect != 0xFFFFFFFF) { ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->DeleteEffect(((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->DeleteEditObject(((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); } ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect = 0xFFFFFFFF; InitValue(); UpdateData(FALSE); } BOOL CPlanePage::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN) { UpdateData(); CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditPlane *pPlane = (CX3DEffectEditPlane *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(3, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); unsigned long dwFrame = mf->m_KeyBar.m_lpKeySheet->m_Page1.m_dwPreFrame - 1; switch(::GetDlgCtrlID(pMsg->hwnd)) { case IDC_TEXTURE: if(pPlane) { pPlane->LoadTexture(m_strTexture); } break; case IDC_CENX: case IDC_CENY: case IDC_CENZ: if(pPlane) { vector3 vecData; if(!strcmp(m_edtCenX, "") || !strcmp(m_edtCenY, "") || !strcmp(m_edtCenZ, "")) { if(pPlane->m_lstCenter.Find(dwFrame, vecData)) { g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_DELKEY, 0, vecData); pPlane->m_lstCenter.Erase(dwFrame); break; } } if(pPlane->m_lstCenter.Find(dwFrame, vecData)) { g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_OLDDATA, 0, vecData); SetKey(dwFrame, pPlane->m_lstCenter, vector3(m_edtCenX, m_edtCenY, m_edtCenZ)); g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_NEWDATA, 0, vector3(m_edtCenX, m_edtCenY, m_edtCenZ)); } else { SetKey(dwFrame, pPlane->m_lstCenter, vector3(m_edtCenX, m_edtCenY, m_edtCenZ)); g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_INSERT, 0, vector3(m_edtCenX, m_edtCenY, m_edtCenZ)); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_AXISX: case IDC_AXISY: case IDC_AXISZ: if(pPlane) { // m_fAxisX = m_fAxisX - (((unsigned long)(m_fAxisX / 360)) * 360.0f); // m_fAxisY = m_fAxisY - (((unsigned long)(m_fAxisY / 360)) * 360.0f); // m_fAxisZ = m_fAxisZ - (((unsigned long)(m_fAxisZ / 360)) * 360.0f); quaternion quatAxis; quatAxis.Identity(); quatAxis.Pitch(FLOAT_DEG((float)m_edtAxisX)); quatAxis.Yaw(FLOAT_DEG((float)m_edtAxisY)); quatAxis.Roll(FLOAT_DEG((float)m_edtAxisZ)); quaternion quatData; if(!strcmp(m_edtAxisX, "") || !strcmp(m_edtAxisY, "") || !strcmp(m_edtAxisZ, "")) { if(pPlane->m_lstAxis.Find(dwFrame, quatData)) { g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_DELKEY, 1, quatData); pPlane->m_lstAxis.Erase(dwFrame); break; } } if(pPlane->m_lstAxis.Find(dwFrame, quatData)) { g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_OLDDATA, 1, quatData); SetKey(dwFrame, pPlane->m_lstAxis, quatAxis); g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_NEWDATA, 1, quatAxis); } else { SetKey(dwFrame, pPlane->m_lstAxis, quatAxis); g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_INSERT, 1, quatAxis); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_ALPHA: case IDC_COLR: case IDC_COLG: case IDC_COLB: if(pPlane) { color lData; if(!strcmp(m_edtColR, "") || !strcmp(m_edtColG, "") || !strcmp(m_edtColB, "") || !strcmp(m_edtAlpha, "")) { if(pPlane->m_lstColor.Find(dwFrame, lData)) { g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_DELKEY, 2, lData); pPlane->m_lstColor.Erase(dwFrame); break; } } if(pPlane->m_lstColor.Find(dwFrame, lData)) { g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_OLDDATA, 2, lData); SetKey(dwFrame, pPlane->m_lstColor, color(m_edtColR, m_edtColG, m_edtColB, m_edtAlpha)); g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_NEWDATA, 2, color(m_edtColR, m_edtColG, m_edtColB, m_edtAlpha)); } else { SetKey(dwFrame, pPlane->m_lstColor, color(m_edtColR, m_edtColG, m_edtColB, m_edtAlpha)); g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_INSERT, 2, color(m_edtColR, m_edtColG, m_edtColB, m_edtAlpha)); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_WIDTH: if(pPlane) { float fData; if(!strcmp(m_edtWidth, "")) { if(pPlane->m_lstWidth.Find(dwFrame, fData)) { g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_DELKEY, 3, fData); pPlane->m_lstWidth.Erase(dwFrame); break; } } if(pPlane->m_lstWidth.Find(dwFrame, fData)) { g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_OLDDATA, 3, fData); SetKey(dwFrame, pPlane->m_lstWidth, (float)m_edtWidth); g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_NEWDATA, 3, (float)m_edtWidth); } else { SetKey(dwFrame, pPlane->m_lstWidth, (float)m_edtWidth); g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_INSERT, 3, (float)m_edtWidth); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_HEIGHT: if(pPlane) { float fData; if(!strcmp(m_edtHeight, "")) { if(pPlane->m_lstHeight.Find(dwFrame, fData)) { g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_DELKEY, 4, fData); pPlane->m_lstHeight.Erase(dwFrame); break; } } if(pPlane->m_lstHeight.Find(dwFrame, fData)) { g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_OLDDATA, 4, fData); SetKey(dwFrame, pPlane->m_lstHeight, (float)m_edtHeight); g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_NEWDATA, 4, (float)m_edtHeight); } else { SetKey(dwFrame, pPlane->m_lstHeight, (float)m_edtHeight); g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_INSERT, 4, (float)m_edtHeight); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_TEXFRAME: if(pPlane) { float fData; if(!strcmp(m_edtTexFrame, "")) { if(pPlane->m_lstTexFrame.Find(dwFrame, fData)) { g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_DELKEY, 9, fData); pPlane->m_lstTexFrame.Erase(dwFrame); break; } } if(pPlane->m_lstTexFrame.Find(dwFrame, fData)) { g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_OLDDATA, 9, fData); SetKey(dwFrame, pPlane->m_lstTexFrame, (float)m_edtTexFrame); g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_NEWDATA, 9, (float)m_edtTexFrame); } else { SetKey(dwFrame, pPlane->m_lstTexFrame, (float)m_edtTexFrame); g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_INSERT, 9, (float)m_edtTexFrame); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_STARTU: if(pPlane) { float fData; if(!strcmp(m_edtStartU, "")) { if(pPlane->m_lstStartU.Find(dwFrame, fData)) { g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_DELKEY, 7, fData); pPlane->m_lstStartU.Erase(dwFrame); break; } } if(pPlane->m_lstStartU.Find(dwFrame, fData)) { g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_OLDDATA, 7, fData); SetKey(dwFrame, pPlane->m_lstStartU, (float)m_edtStartU); g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_NEWDATA, 7, (float)m_edtStartU); } else { SetKey(dwFrame, pPlane->m_lstStartU, (float)m_edtStartU); g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_INSERT, 7, (float)m_edtStartU); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_STARTV: if(pPlane) { float fData; if(!strcmp(m_edtStartV, "")) { if(pPlane->m_lstStartV.Find(dwFrame, fData)) { g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_DELKEY, 8, fData); pPlane->m_lstStartV.Erase(dwFrame); break; } } if(pPlane->m_lstStartV.Find(dwFrame, fData)) { g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_OLDDATA, 8, fData); SetKey(dwFrame, pPlane->m_lstStartV, (float)m_edtStartV); g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_NEWDATA, 8, (float)m_edtStartV); } else { SetKey(dwFrame, pPlane->m_lstStartV, (float)m_edtStartV); g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_INSERT, 8, (float)m_edtStartV); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_TILEU: if(pPlane) { float fData; if(!strcmp(m_edtTileU, "")) { if(pPlane->m_lstTileU.Find(dwFrame, fData)) { g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_DELKEY, 5, fData); pPlane->m_lstTileU.Erase(dwFrame); break; } } if(pPlane->m_lstTileU.Find(dwFrame, fData)) { g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_OLDDATA, 5, fData); SetKey(dwFrame, pPlane->m_lstTileU, (float)m_edtTileU); g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_NEWDATA, 5, (float)m_edtTileU); } else { SetKey(dwFrame, pPlane->m_lstTileU, (float)m_edtTileU); g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_INSERT, 5, (float)m_edtTileU); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_TILEV: if(pPlane) { float fData; if(!strcmp(m_edtTileV, "")) { if(pPlane->m_lstTileV.Find(dwFrame, fData)) { g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_DELKEY, 6, fData); pPlane->m_lstTileV.Erase(dwFrame); break; } } if(pPlane->m_lstTileV.Find(dwFrame, fData)) { g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_OLDDATA, 6, fData); SetKey(dwFrame, pPlane->m_lstTileV, (float)m_edtTileV); g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_NEWDATA, 6, (float)m_edtTileV); } else { SetKey(dwFrame, pPlane->m_lstTileV, (float)m_edtTileV); g_CommandManager.AddCommand(3, pPlane->GetUID(), dwFrame, COMMAND_INSERT, 6, (float)m_edtTileV); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_STARTFRAME: if(pPlane) { // pPlane->EditFrame(dwFrame, m_dwStartFrame); pPlane->SetStartFrame(m_dwStartFrame); if(pPlane->GetEndFrame() < m_dwStartFrame) { pPlane->SetEndFrame(m_dwStartFrame); m_dwEndFrame = m_dwStartFrame; UpdateData(FALSE); } } break; case IDC_ENDFRAME: if(pPlane) { if(pPlane->GetStartFrame() > m_dwEndFrame) { m_dwEndFrame = pPlane->GetStartFrame(); UpdateData(FALSE); } pPlane->SetEndFrame(m_dwEndFrame); } break; } SetKeyInfo(); } return CPropertyPage::PreTranslateMessage(pMsg); } void CPlanePage::SetKeyInfo() { CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditPlane *pPlane = (CX3DEffectEditPlane *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(3, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); unsigned long dwFrame = mf->m_KeyBar.m_lpKeySheet->m_Page1.m_dwPreFrame - 1; quaternion quatTemp; if(pPlane) { pPlane->Interpolation(dwFrame); m_strTexture = pPlane->GetTextureFileName(); m_edtAlpha = pPlane->GetAlpha(); m_edtColB = pPlane->GetBColor(); m_edtColG = pPlane->GetGColor(); m_edtColR = pPlane->GetRColor(); if(pPlane->m_lstColor.Find(dwFrame)) { m_edtAlpha.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtColB.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtColG.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtColR.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtAlpha.DisableBkColor(); m_edtColB.DisableBkColor(); m_edtColG.DisableBkColor(); m_edtColR.DisableBkColor(); } m_dwEndFrame = pPlane->GetEndFrame() + 1; m_dwStartFrame = pPlane->GetStartFrame() + 1; m_edtCenX = pPlane->GetCenter().x; m_edtCenY = pPlane->GetCenter().y; m_edtCenZ = pPlane->GetCenter().z; if(pPlane->m_lstCenter.Find(dwFrame)) { m_edtCenX.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtCenY.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtCenZ.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtCenX.DisableBkColor(); m_edtCenY.DisableBkColor(); m_edtCenZ.DisableBkColor(); } quatTemp = Eul_FromQuat(pPlane->GetAxis(), EulOrdXZYs); m_edtAxisX = (quatTemp.x * 180.0f) / FLOAT_PHI; m_edtAxisY = (-quatTemp.z * 180.0f) / FLOAT_PHI; m_edtAxisZ = (-quatTemp.y * 180.0f) / FLOAT_PHI; if(pPlane->m_lstAxis.Find(dwFrame)) { m_edtAxisX.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtAxisY.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtAxisZ.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtAxisX.DisableBkColor(); m_edtAxisY.DisableBkColor(); m_edtAxisZ.DisableBkColor(); } m_edtHeight = pPlane->GetHeight(); if(pPlane->m_lstHeight.Find(dwFrame)) { m_edtHeight.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtHeight.DisableBkColor(); } m_edtWidth = pPlane->GetWidth(); if(pPlane->m_lstWidth.Find(dwFrame)) { m_edtWidth.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtWidth.DisableBkColor(); } if(m_bTexStatic) { m_edtStartU = pPlane->GetStartU(); if(pPlane->m_lstStartU.Find(dwFrame)) { m_edtStartU.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtStartU.DisableBkColor(); } m_edtStartV = pPlane->GetStartV(); if(pPlane->m_lstStartV.Find(dwFrame)) { m_edtStartV.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtStartV.DisableBkColor(); } m_edtTileU = pPlane->GetTileU(); if(pPlane->m_lstTileU.Find(dwFrame)) { m_edtTileU.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtTileU.DisableBkColor(); } m_edtTileV = pPlane->GetTileV(); if(pPlane->m_lstTileV.Find(dwFrame)) { m_edtTileV.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtTileV.DisableBkColor(); } } if(m_bTexAni) { m_edtTexFrame = pPlane->GetTexFrame(); if(pPlane->m_lstTexFrame.Find(dwFrame)) { m_edtTexFrame.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtTexFrame.DisableBkColor(); } } m_cbSrc.SetCurSel(pPlane->GetSrcBlending() - D3DBLEND_ZERO); m_cbDest.SetCurSel(pPlane->GetDestBlending() - D3DBLEND_ZERO); UpdateData(FALSE); Invalidate(FALSE); } } void CPlanePage::OnTexstatic() { // TODO: Add your control notification handler code here m_bTexStatic = TRUE; m_bTexAni = FALSE; CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditPlane *pPlane = (CX3DEffectEditPlane *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(3, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); if(pPlane) { pPlane->SetTexAni(m_bTexAni); // pPlane->SetFrame(FLT_MAX); } GetDlgItem(IDC_STARTU)->EnableWindow(m_bTexStatic); GetDlgItem(IDC_STARTV)->EnableWindow(m_bTexStatic); GetDlgItem(IDC_TILEU)->EnableWindow(m_bTexStatic); GetDlgItem(IDC_TILEV)->EnableWindow(m_bTexStatic); GetDlgItem(IDC_TEXFRAME)->EnableWindow(m_bTexAni); m_edtTexFrame.DisableBkColor(); SetKeyInfo(); } void CPlanePage::OnTexani() { // TODO: Add your control notification handler code here m_bTexStatic = FALSE; m_bTexAni = TRUE; CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditPlane *pPlane = (CX3DEffectEditPlane *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(3, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); if(pPlane) { pPlane->SetTexAni(m_bTexAni); // pPlane->SetFrame(FLT_MAX); } GetDlgItem(IDC_STARTU)->EnableWindow(m_bTexStatic); GetDlgItem(IDC_STARTV)->EnableWindow(m_bTexStatic); GetDlgItem(IDC_TILEU)->EnableWindow(m_bTexStatic); GetDlgItem(IDC_TILEV)->EnableWindow(m_bTexStatic); m_edtStartU.DisableBkColor(); m_edtStartV.DisableBkColor(); m_edtTileU.DisableBkColor(); m_edtTileV.DisableBkColor(); GetDlgItem(IDC_TEXFRAME)->EnableWindow(m_bTexAni); SetKeyInfo(); } BOOL CPlanePage::OnInitDialog() { CPropertyPage::OnInitDialog(); // TODO: Add extra initialization here m_cbSrc.AddString("ZERO"); m_cbSrc.AddString("ONE"); m_cbSrc.AddString("SRCCOLOR"); m_cbSrc.AddString("INVSRCCOLOR"); m_cbSrc.AddString("SRCALPHA"); m_cbSrc.AddString("INVSRCALPHA"); m_cbSrc.AddString("DESTALPHA"); m_cbSrc.AddString("INVDESTALPHA"); m_cbSrc.AddString("DESTCOLOR"); m_cbSrc.AddString("INVDESTCOLOR"); m_cbSrc.AddString("SRCALPHASAT"); m_cbSrc.AddString("BOTHSRCALPHA"); m_cbSrc.AddString("BOTHINVSRCALPHA"); m_cbSrc.SetCurSel(4); m_cbDest.AddString("ZERO"); m_cbDest.AddString("ONE"); m_cbDest.AddString("SRCCOLOR"); m_cbDest.AddString("INVSRCCOLOR"); m_cbDest.AddString("SRCALPHA"); m_cbDest.AddString("INVSRCALPHA"); m_cbDest.AddString("DESTALPHA"); m_cbDest.AddString("INVDESTALPHA"); m_cbDest.AddString("DESTCOLOR"); m_cbDest.AddString("INVDESTCOLOR"); m_cbDest.AddString("SRCALPHASAT"); m_cbDest.AddString("BOTHSRCALPHA"); m_cbDest.AddString("BOTHINVSRCALPHA"); m_cbDest.SetCurSel(1); InitValue(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CParticlePage::OnCreate() { // TODO: Add your control notification handler code here UpdateData(); CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; if(((CEffectEditorView*)mf->GetActiveView())->m_dwPreFrame > m_dwStartFrame) { m_dwStartFrame = ((CEffectEditorView*)mf->GetActiveView())->m_dwPreFrame; } if(((CEffectEditorView*)mf->GetActiveView())->m_dwPreFrame > m_dwEndFrame) { m_dwEndFrame = ((CEffectEditorView*)mf->GetActiveView())->m_dwPreFrame; } if(((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetMaxFrame() < m_dwStartFrame) { m_dwStartFrame = ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetMaxFrame() + 1; } if(((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetMaxFrame() < m_dwEndFrame) { m_dwEndFrame = ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetMaxFrame() + 1; } CX3DEffectEditParticle *pParticle; pParticle = new CX3DEffectEditParticle; unsigned long dwStartFrame = m_dwStartFrame - 1; unsigned long dwEndFrame = m_dwEndFrame - 1; pParticle->Create(dwStartFrame, dwEndFrame); ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->AddEffect(pParticle); ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect = ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->AddEditObject(pParticle); { quaternion quatAxis, quatDir; quatAxis.Identity(); // m_fAxisX = m_fAxisX - (((unsigned long)(m_fAxisX / 360)) * 360.0f); // m_fAxisY = m_fAxisY - (((unsigned long)(m_fAxisY / 360)) * 360.0f); // m_fAxisZ = m_fAxisZ - (((unsigned long)(m_fAxisZ / 360)) * 360.0f); quatAxis.Pitch(FLOAT_DEG((float)m_edtAxisX)); quatAxis.Yaw(FLOAT_DEG((float)m_edtAxisY)); quatAxis.Roll(FLOAT_DEG((float)m_edtAxisZ)); quatDir.Identity(); // m_fDirX = m_fDirX - (((unsigned long)(m_fDirX / 360)) * 360.0f); // m_fDirY = m_fDirY - (((unsigned long)(m_fDirY / 360)) * 360.0f); // m_fDirZ = m_fDirZ - (((unsigned long)(m_fDirZ / 360)) * 360.0f); quatDir.Pitch(FLOAT_DEG((float)m_edtDirX)); quatDir.Yaw(FLOAT_DEG((float)m_edtDirY)); quatDir.Roll(FLOAT_DEG((float)m_edtDirZ)); pParticle->LoadTexture(m_strTexture.GetBuffer(m_strTexture.GetLength())); SetKey(dwStartFrame, pParticle->m_lstCenter, vector3(m_edtCenX, m_edtCenY, m_edtCenZ)); SetKey(dwStartFrame, pParticle->m_lstEForce, vector3(m_edtEForceX, m_edtEForceY, m_edtEForceZ)); SetKey(dwStartFrame, pParticle->m_lstAxis, quatAxis); SetKey(dwStartFrame, pParticle->m_lstDirection, quatDir); SetKey(dwStartFrame, pParticle->m_lstPower, (float)m_edtPower); SetKey(dwStartFrame, pParticle->m_lstAngle, FLOAT_DEG((float)m_edtAngle)); SetKey(dwStartFrame, pParticle->m_lstAlpha, (float)((float)m_edtAlpha / 255.0f)); pParticle->SetLifetime(m_fLifetime); pParticle->SetLifetimeSeed(m_fLifetimeSeed); pParticle->SetPowerSeed(m_fPowerSeed); if(m_bNone) pParticle->SetVolumeNone(); if(m_bSquare) pParticle->SetVolumeSquare(m_fVolX, m_fVolY, m_fVolZ); if(m_bCircle) pParticle->SetVolumeCircle(m_fRadius, m_fInnerRadius); // if(m_bScenario) pParticle->SetSpawnScenario(); // if(m_bAuto) pParticle->SetSpawnAuto(m_fAutoTime); if(m_bContinuous) { for(unsigned long i = dwStartFrame; i <= dwEndFrame; i++) { SetKey(i, pParticle->m_lstAmount, (float)m_edtAmount); } } else { SetKey(dwStartFrame, pParticle->m_lstAmount, (float)m_edtAmount); } pParticle->SetRotation(FLOAT_DEG((m_fRotation - (((unsigned long)(m_fRotation / 360)) * 360.0f)))); SetKey(0, pParticle->m_lstWidth, (float)m_edtWidth); SetKey(0, pParticle->m_lstHeight, (float)m_edtHeight); SetKey(0, pParticle->m_lstColor, color(m_edtColR, m_edtColG, m_edtColB, m_edtSceAlpha)); pParticle->SetTexSpeed((16 * m_fTexSpeed) / 100.0f); pParticle->CreateBuffer(); pParticle->SetSrcBlending(D3DBLEND_ZERO + m_cbSrc.GetCurSel()); pParticle->SetDestBlending(D3DBLEND_ZERO + m_cbDest.GetCurSel()); pParticle->SetEffectKind(EFFECT_PARTICLE); // mf->m_KeyBar.m_lpKeySheet->m_Page1.m_sldKeyFrame.SetTic(((CEffectEditorView*)mf->GetActiveView())->m_dwPreFrame); } } void CParticlePage::OnDelete() { // TODO: Add your control notification handler code here CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; if(((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect != 0xFFFFFFFF) { ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->DeleteEffect(((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->DeleteEditObject(((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); } ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect = 0xFFFFFFFF; InitValue(); UpdateData(FALSE); } void CParticlePage::OnBrowse() { // TODO: Add your control notification handler code here char strFilter[50] = "DDS ÆÄÀÏ(*.dds)|*.dds||"; CFileDialog dlg(TRUE, "*.dds", "", OFN_HIDEREADONLY | OFN_LONGNAMES, strFilter); if(dlg.DoModal() == IDOK) { CString strTemp; strTemp = dlg.GetPathName(); char *tm = strrchr(strTemp.LockBuffer(),'\\'); tm++; m_strTexture.Format("%s",tm); CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditParticle *pParticle = (CX3DEffectEditParticle *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(0, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); if(pParticle) pParticle->LoadTexture(m_strTexture); UpdateData(FALSE); } } void CParticlePage::SetKeyInfo() { CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditParticle *pParticle = (CX3DEffectEditParticle *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(0, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); unsigned long dwFrame = mf->m_KeyBar.m_lpKeySheet->m_Page1.m_dwPreFrame - 1; quaternion quatTemp; if(pParticle) { /* m_cAlpha = pBillboard->GetAlpha(); m_cColB = pBillboard->GetBColor(); m_cColG = pBillboard->GetGColor(); m_cColR = pBillboard->GetRColor(); if(pBillboard->m_lstColor.Find(dwFrame)) { ((CEdit *)(GetDlgItem(IDC_ALPHA)))->ModifyStyleEx(0, WS_EX_DLGMODALFRAME); ((CEdit *)(GetDlgItem(IDC_COLR)))->ModifyStyleEx(0, WS_EX_DLGMODALFRAME); ((CEdit *)(GetDlgItem(IDC_COLG)))->ModifyStyleEx(0, WS_EX_DLGMODALFRAME); ((CEdit *)(GetDlgItem(IDC_COLB)))->ModifyStyleEx(0, WS_EX_DLGMODALFRAME); } else { ((CEdit *)(GetDlgItem(IDC_ALPHA)))->ModifyStyleEx(WS_EX_DLGMODALFRAME, 0); ((CEdit *)(GetDlgItem(IDC_COLR)))->ModifyStyleEx(WS_EX_DLGMODALFRAME, 0); ((CEdit *)(GetDlgItem(IDC_COLG)))->ModifyStyleEx(WS_EX_DLGMODALFRAME, 0); ((CEdit *)(GetDlgItem(IDC_COLB)))->ModifyStyleEx(WS_EX_DLGMODALFRAME, 0); }*/ pParticle->Interpolation(dwFrame); m_strTexture = pParticle->GetTextureFileName(); m_dwEndFrame = pParticle->GetEndFrame(); m_dwStartFrame = pParticle->GetStartFrame(); m_edtCenX = pParticle->GetCenter().x; m_edtCenY = pParticle->GetCenter().y; m_edtCenZ = pParticle->GetCenter().z; if(pParticle->m_lstCenter.Find(dwFrame)) { m_edtCenX.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtCenY.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtCenZ.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtCenX.DisableBkColor(); m_edtCenY.DisableBkColor(); m_edtCenZ.DisableBkColor(); } quatTemp = Eul_FromQuat(pParticle->GetAxis(), EulOrdXZYs); m_edtAxisX = (quatTemp.x * 180.0f) / FLOAT_PHI; m_edtAxisY = (-quatTemp.z * 180.0f) / FLOAT_PHI; m_edtAxisZ = (-quatTemp.y * 180.0f) / FLOAT_PHI; if(pParticle->m_lstAxis.Find(dwFrame)) { m_edtAxisX.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtAxisY.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtAxisZ.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtAxisX.DisableBkColor(); m_edtAxisY.DisableBkColor(); m_edtAxisZ.DisableBkColor(); } m_edtEForceX = pParticle->GetEForce().x; m_edtEForceY = pParticle->GetEForce().y; m_edtEForceZ = pParticle->GetEForce().z; if(pParticle->m_lstEForce.Find(dwFrame)) { m_edtEForceX.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtEForceY.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtEForceZ.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtEForceX.DisableBkColor(); m_edtEForceY.DisableBkColor(); m_edtEForceZ.DisableBkColor(); } m_edtAlpha = pParticle->GetMainAlpha(); if(pParticle->m_lstAlpha.Find(dwFrame)) { m_edtAlpha.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtAlpha.DisableBkColor(); } m_edtAmount = pParticle->GetAmount(dwFrame); if(pParticle->m_lstAmount.Find(dwFrame)) { m_edtAmount.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtAmount.DisableBkColor(); } m_fLifetime = pParticle->GetLifetime(); m_edtPower = pParticle->GetPower(); if(pParticle->m_lstPower.Find(dwFrame)) { m_edtPower.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtPower.DisableBkColor(); } m_edtAngle = pParticle->GetAngle(); if(pParticle->m_lstAngle.Find(dwFrame)) { m_edtAngle.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtAngle.DisableBkColor(); } quatTemp = Eul_FromQuat(pParticle->GetDirection(), EulOrdXZYs); m_edtDirX = (quatTemp.x * 180.0f) / FLOAT_PHI; m_edtDirY = (-quatTemp.z * 180.0f) / FLOAT_PHI; m_edtDirZ = (-quatTemp.y * 180.0f) / FLOAT_PHI; if(pParticle->m_lstDirection.Find(dwFrame)) { m_edtDirX.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtDirY.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtDirZ.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtDirX.DisableBkColor(); m_edtDirY.DisableBkColor(); m_edtDirZ.DisableBkColor(); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////// unsigned long dwSceFrame = mf->m_KeyBar.m_lpKeySheet->m_Page2.m_fPrePro - 1; m_edtWidth = pParticle->GetWidth(dwSceFrame); if(pParticle->m_lstWidth.Find(dwSceFrame)) { m_edtWidth.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtWidth.DisableBkColor(); } m_edtHeight = pParticle->GetHeight(dwSceFrame); if(pParticle->m_lstHeight.Find(dwSceFrame)) { m_edtHeight.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtHeight.DisableBkColor(); } m_edtSceAlpha = pParticle->GetAlpha(dwSceFrame); m_edtColB.SetValue(pParticle->GetBColor(dwSceFrame)); m_edtColG.SetValue(pParticle->GetGColor(dwSceFrame)); m_edtColR.SetValue(pParticle->GetRColor(dwSceFrame)); if(pParticle->m_lstColor.Find(dwSceFrame)) { m_edtSceAlpha.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtColB.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtColG.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtColR.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtSceAlpha.DisableBkColor(); m_edtColB.DisableBkColor(); m_edtColG.DisableBkColor(); m_edtColR.DisableBkColor(); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////// m_cbSrc.SetCurSel(pParticle->GetSrcBlending() - D3DBLEND_ZERO); m_cbDest.SetCurSel(pParticle->GetDestBlending() - D3DBLEND_ZERO); UpdateData(FALSE); Invalidate(FALSE); } } BOOL CParticlePage::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN) { UpdateData(); CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditParticle *pParticle = (CX3DEffectEditParticle *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(0, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); unsigned long dwFrame = mf->m_KeyBar.m_lpKeySheet->m_Page1.m_dwPreFrame - 1; switch(::GetDlgCtrlID(pMsg->hwnd)) { case IDC_TEXTURE: if(pParticle) { pParticle->LoadTexture(m_strTexture); } break; case IDC_CENX: case IDC_CENY: case IDC_CENZ: if(pParticle) { vector3 vecData; if(!strcmp(m_edtCenX, "") || !strcmp(m_edtCenY, "") || !strcmp(m_edtCenZ, "")) { if(pParticle->m_lstCenter.Find(dwFrame, vecData)) { g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_DELKEY, 0, vecData); pParticle->m_lstCenter.Erase(dwFrame); break; } } if(pParticle->m_lstCenter.Find(dwFrame, vecData)) { g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_OLDDATA, 0, vecData); SetKey(dwFrame, pParticle->m_lstCenter, vector3(m_edtCenX, m_edtCenY, m_edtCenZ)); g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_NEWDATA, 0, vector3(m_edtCenX, m_edtCenY, m_edtCenZ)); } else { SetKey(dwFrame, pParticle->m_lstCenter, vector3(m_edtCenX, m_edtCenY, m_edtCenZ)); g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_INSERT, 0, vector3(m_edtCenX, m_edtCenY, m_edtCenZ)); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_POWER: if(pParticle) { float fData; if(!strcmp(m_edtPower, "")) { if(pParticle->m_lstPower.Find(dwFrame, fData)) { g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_DELKEY, 5, fData); pParticle->m_lstPower.Erase(dwFrame); break; } } if(pParticle->m_lstPower.Find(dwFrame, fData)) { g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_OLDDATA, 5, fData); SetKey(dwFrame, pParticle->m_lstPower, (float)m_edtPower); g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_NEWDATA, 5, (float)m_edtPower); } else { SetKey(dwFrame, pParticle->m_lstPower, (float)m_edtPower); g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_INSERT, 5, (float)m_edtPower); } } break; case IDC_POWERSEED: if(pParticle) { pParticle->SetPowerSeed(m_fPowerSeed); } break; case IDC_ALPHA: if(pParticle) { float fData; if(!strcmp(m_edtAlpha, "")) { if(pParticle->m_lstAlpha.Find(dwFrame, fData)) { g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_DELKEY, 4, fData); pParticle->m_lstAlpha.Erase(dwFrame); break; } } if(pParticle->m_lstAlpha.Find(dwFrame, fData)) { g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_OLDDATA, 4, fData); SetKey(dwFrame, pParticle->m_lstAlpha, (float)((float)m_edtAlpha / 255.0f)); g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_NEWDATA, 4, (float)((float)m_edtAlpha / 255.0f)); } else { SetKey(dwFrame, pParticle->m_lstAlpha, (float)((float)m_edtAlpha / 255.0f)); g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_INSERT, 4, (float)((float)m_edtAlpha / 255.0f)); } } break; case IDC_ANGLE: if(pParticle) { float fData; if(!strcmp(m_edtAngle, "")) { if(pParticle->m_lstAngle.Find(dwFrame, fData)) { g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_DELKEY, 6, fData); pParticle->m_lstAngle.Erase(dwFrame); break; } } if(pParticle->m_lstAngle.Find(dwFrame, fData)) { g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_OLDDATA, 6, fData); SetKey(dwFrame, pParticle->m_lstAngle, FLOAT_DEG((float)m_edtAngle)); g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_NEWDATA, 6, FLOAT_DEG((float)m_edtAngle)); } else { SetKey(dwFrame, pParticle->m_lstAngle, FLOAT_DEG((float)m_edtAngle)); g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_INSERT, 6, FLOAT_DEG((float)m_edtAngle)); } } break; case IDC_LIFETIME: if(pParticle) { pParticle->SetLifetime(m_fLifetime); } break; case IDC_LIFETIMESEED: if(pParticle) { pParticle->SetLifetimeSeed(m_fLifetimeSeed); } break; case IDC_RADIUS: case IDC_INNERRADIUS: if(pParticle) { pParticle->SetVolumeCircle(m_fRadius, m_fInnerRadius); } break; case IDC_VOLX: case IDC_VOLY: case IDC_VOLZ: if(pParticle) { pParticle->SetVolumeSquare(m_fVolX, m_fVolY, m_fVolZ); } break; /* case IDC_ALPHA: case IDC_COLR: case IDC_COLG: case IDC_COLB: if(pPlane) { pPlane->SetColorKey(pPlane->GetFrame(), pPlane->m_lstColor, color(m_cColR, m_cColG, m_cColB, m_cAlpha)); // pPlane->SetFrame(FLT_MAX); } break; */ case IDC_AXISX: case IDC_AXISY: case IDC_AXISZ: if(pParticle) { // m_fAxisX = m_fAxisX - (((unsigned long)(m_fAxisX / 360)) * 360.0f); // m_fAxisY = m_fAxisY - (((unsigned long)(m_fAxisY / 360)) * 360.0f); // m_fAxisZ = m_fAxisZ - (((unsigned long)(m_fAxisZ / 360)) * 360.0f); quaternion quatAxis; quatAxis.Identity(); quatAxis.Pitch(FLOAT_DEG((float)m_edtAxisX)); quatAxis.Yaw(FLOAT_DEG((float)m_edtAxisY)); quatAxis.Roll(FLOAT_DEG((float)m_edtAxisZ)); quaternion quatData; if(!strcmp(m_edtAxisX, "") || !strcmp(m_edtAxisY, "") || !strcmp(m_edtAxisZ, "")) { if(pParticle->m_lstAxis.Find(dwFrame, quatData)) { g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_DELKEY, 1, quatData); pParticle->m_lstAxis.Erase(dwFrame); break; } } if(pParticle->m_lstAxis.Find(dwFrame, quatData)) { g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_OLDDATA, 1, quatData); SetKey(dwFrame, pParticle->m_lstAxis, quatAxis); g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_NEWDATA, 1, quatAxis); } else { SetKey(dwFrame, pParticle->m_lstAxis, quatAxis); g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_INSERT, 1, quatAxis); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_DIRX: case IDC_DIRY: case IDC_DIRZ: if(pParticle) { // m_fDirX = m_fDirX - (((unsigned long)(m_fDirX / 360)) * 360.0f); // m_fDirY = m_fDirY - (((unsigned long)(m_fDirY / 360)) * 360.0f); // m_fDirZ = m_fDirZ - (((unsigned long)(m_fDirZ / 360)) * 360.0f); quaternion quatDir; quatDir.Identity(); quatDir.Pitch(FLOAT_DEG((float)m_edtDirX)); quatDir.Yaw(FLOAT_DEG((float)m_edtDirY)); quatDir.Roll(FLOAT_DEG((float)m_edtDirZ)); quaternion quatData; if(!strcmp(m_edtDirX, "") || !strcmp(m_edtDirY, "") || !strcmp(m_edtDirZ, "")) { if(pParticle->m_lstDirection.Find(dwFrame, quatData)) { g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_DELKEY, 8, quatData); pParticle->m_lstDirection.Erase(dwFrame); break; } } if(pParticle->m_lstDirection.Find(dwFrame, quatData)) { g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_OLDDATA, 8, quatData); SetKey(dwFrame, pParticle->m_lstDirection, quatDir); g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_NEWDATA, 8, quatDir); } else { SetKey(dwFrame, pParticle->m_lstDirection, quatDir); g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_INSERT, 8, quatDir); } // pParticle->SetFrame(FLT_MAX); } break; case IDC_EFORCEX: case IDC_EFORCEY: case IDC_EFORCEZ: if(pParticle) { vector3 vecData; if(!strcmp(m_edtEForceX, "") || !strcmp(m_edtEForceY, "") || !strcmp(m_edtEForceZ, "")) { if(pParticle->m_lstEForce.Find(dwFrame, vecData)) { g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_DELKEY, 7, vecData); pParticle->m_lstEForce.Erase(dwFrame); break; } } if(pParticle->m_lstEForce.Find(dwFrame, vecData)) { g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_OLDDATA, 7, vecData); SetKey(dwFrame, pParticle->m_lstEForce, vector3(m_edtEForceX, m_edtEForceY, m_edtEForceZ)); g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_NEWDATA, 7, vector3(m_edtEForceX, m_edtEForceY, m_edtEForceZ)); } else { SetKey(dwFrame, pParticle->m_lstEForce, vector3(m_edtEForceX, m_edtEForceY, m_edtEForceZ)); g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_INSERT, 7, vector3(m_edtEForceX, m_edtEForceY, m_edtEForceZ)); } // pParticle->SetFrame(FLT_MAX); } break; case IDC_AMOUNT: if(pParticle) { float fData; if(!strcmp(m_edtAmount, "")) { if(pParticle->m_lstAmount.Find(dwFrame, fData)) { g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_DELKEY, 3, fData); pParticle->m_lstAmount.Erase(dwFrame); break; } } if(pParticle->m_lstAmount.Find(dwFrame, fData)) { g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_OLDDATA, 3, fData); SetKey(dwFrame, pParticle->m_lstAmount, (float)m_edtAmount); g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_NEWDATA, 3, (float)m_edtAmount); } else { SetKey(dwFrame, pParticle->m_lstAmount, (float)m_edtAmount); g_CommandManager.AddCommand(0, pParticle->GetUID(), dwFrame, COMMAND_INSERT, 3, (float)m_edtAmount); } pParticle->CreateBuffer(); // pParticle->SetFrame(FLT_MAX); } break; case IDC_STARTFRAME: if(pParticle) { // pParticle->EditFrame(pParticle->GetStartFrame(), m_dwStartFrame); pParticle->SetStartFrame(m_dwStartFrame); if(pParticle->GetEndFrame() < m_dwStartFrame) { pParticle->SetEndFrame(m_dwStartFrame); m_dwEndFrame = m_dwStartFrame; UpdateData(FALSE); } } break; case IDC_ENDFRAME: if(pParticle) { if(pParticle->GetStartFrame() > m_dwEndFrame) { m_dwEndFrame = pParticle->GetStartFrame(); UpdateData(FALSE); } pParticle->SetEndFrame(m_dwEndFrame); } break; case IDC_ROTATION: if(pParticle) { pParticle->SetRotation(FLOAT_DEG((m_fRotation - (((unsigned long)(m_fRotation / 360)) * 360.0f)))); } break; case IDC_WIDTH: if(pParticle) { unsigned long dwSceFrame = mf->m_KeyBar.m_lpKeySheet->m_Page2.m_fPrePro - 1; float fData; if(!strcmp(m_edtWidth, "")) { if(pParticle->m_lstWidth.Find(dwSceFrame, fData)) { g_CommandManager.AddCommand(0, pParticle->GetUID(), dwSceFrame, COMMAND_DELKEY, 9, fData); pParticle->m_lstWidth.Erase(dwSceFrame); break; } } if(pParticle->m_lstWidth.Find(dwSceFrame, fData)) { g_CommandManager.AddCommand(0, pParticle->GetUID(), dwSceFrame, COMMAND_OLDDATA, 9, fData); SetKey(dwSceFrame, pParticle->m_lstWidth, (float)m_edtWidth); g_CommandManager.AddCommand(0, pParticle->GetUID(), dwSceFrame, COMMAND_NEWDATA, 9, (float)m_edtWidth); } else { SetKey(dwSceFrame, pParticle->m_lstWidth, (float)m_edtWidth); g_CommandManager.AddCommand(0, pParticle->GetUID(), dwSceFrame, COMMAND_INSERT, 9, (float)m_edtWidth); } } break; case IDC_HEIGHT: if(pParticle) { unsigned long dwSceFrame = mf->m_KeyBar.m_lpKeySheet->m_Page2.m_fPrePro - 1; float fData; if(!strcmp(m_edtHeight, "")) { if(pParticle->m_lstHeight.Find(dwSceFrame, fData)) { g_CommandManager.AddCommand(0, pParticle->GetUID(), dwSceFrame, COMMAND_DELKEY, 10, fData); pParticle->m_lstHeight.Erase(dwSceFrame); break; } } if(pParticle->m_lstHeight.Find(dwSceFrame, fData)) { g_CommandManager.AddCommand(0, pParticle->GetUID(), dwSceFrame, COMMAND_OLDDATA, 10, fData); SetKey(dwSceFrame, pParticle->m_lstHeight, (float)m_edtHeight); g_CommandManager.AddCommand(0, pParticle->GetUID(), dwSceFrame, COMMAND_NEWDATA, 10, (float)m_edtHeight); } else { SetKey(dwSceFrame, pParticle->m_lstHeight, (float)m_edtHeight); g_CommandManager.AddCommand(0, pParticle->GetUID(), dwSceFrame, COMMAND_INSERT, 10, (float)m_edtHeight); } } break; case IDC_SCEALPHA: case IDC_COLR: case IDC_COLG: case IDC_COLB: if(pParticle) { unsigned long dwSceFrame = mf->m_KeyBar.m_lpKeySheet->m_Page2.m_fPrePro - 1; color lData; if(!strcmp(m_edtColR, "") || !strcmp(m_edtColG, "") || !strcmp(m_edtColB, "") || !strcmp(m_edtSceAlpha, "")) { if(pParticle->m_lstColor.Find(dwSceFrame, lData)) { g_CommandManager.AddCommand(0, pParticle->GetUID(), dwSceFrame, COMMAND_DELKEY, 2, lData); pParticle->m_lstColor.Erase(dwSceFrame); break; } } if(pParticle->m_lstColor.Find(dwSceFrame, lData)) { g_CommandManager.AddCommand(0, pParticle->GetUID(), dwSceFrame, COMMAND_OLDDATA, 2, lData); SetKey(dwSceFrame, pParticle->m_lstColor, color(m_edtColR, m_edtColG, m_edtColB, m_edtSceAlpha)); g_CommandManager.AddCommand(0, pParticle->GetUID(), dwSceFrame, COMMAND_NEWDATA, 2, color(m_edtColR, m_edtColG, m_edtColB, m_edtSceAlpha)); } else { SetKey(dwSceFrame, pParticle->m_lstColor, color(m_edtColR, m_edtColG, m_edtColB, m_edtSceAlpha)); g_CommandManager.AddCommand(0, pParticle->GetUID(), dwSceFrame, COMMAND_INSERT, 2, color(m_edtColR, m_edtColG, m_edtColB, m_edtSceAlpha)); } } break; case IDC_TEXSPEED: if(pParticle) { pParticle->SetTexSpeed((16 * m_fTexSpeed) / 100.0f); } break; } SetKeyInfo(); } return CPropertyPage::PreTranslateMessage(pMsg); } void CParticlePage::OnNovolume() { // TODO: Add your control notification handler code here m_bNone = TRUE; m_bSquare = FALSE; m_bCircle = FALSE; CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; if(((CEffectEditorView*)mf->GetActiveView())->m_lpEffect == NULL) return; CX3DEffectEditParticle *pParticle = (CX3DEffectEditParticle *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(0, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); if(pParticle) { pParticle->SetVolumeNone(); } GetDlgItem(IDC_VOLX)->EnableWindow(m_bSquare); GetDlgItem(IDC_VOLY)->EnableWindow(m_bSquare); GetDlgItem(IDC_VOLZ)->EnableWindow(m_bSquare); GetDlgItem(IDC_RADIUS)->EnableWindow(m_bCircle); GetDlgItem(IDC_INNERRADIUS)->EnableWindow(m_bCircle); } void CParticlePage::OnSquarevolume() { // TODO: Add your control notification handler code here m_bNone = FALSE; m_bSquare = TRUE; m_bCircle = FALSE; CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditParticle *pParticle = (CX3DEffectEditParticle *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(0, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); if(pParticle) { pParticle->SetVolumeSquare(m_fVolX, m_fVolY, m_fVolZ); } GetDlgItem(IDC_VOLX)->EnableWindow(m_bSquare); GetDlgItem(IDC_VOLY)->EnableWindow(m_bSquare); GetDlgItem(IDC_VOLZ)->EnableWindow(m_bSquare); GetDlgItem(IDC_RADIUS)->EnableWindow(m_bCircle); GetDlgItem(IDC_INNERRADIUS)->EnableWindow(m_bCircle); } void CParticlePage::OnCirclevolume() { // TODO: Add your control notification handler code here m_bNone = FALSE; m_bSquare = FALSE; m_bCircle = TRUE; CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditParticle *pParticle = (CX3DEffectEditParticle *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(0, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); if(pParticle) { pParticle->SetVolumeCircle(m_fRadius, m_fInnerRadius); } GetDlgItem(IDC_VOLX)->EnableWindow(m_bSquare); GetDlgItem(IDC_VOLY)->EnableWindow(m_bSquare); GetDlgItem(IDC_VOLZ)->EnableWindow(m_bSquare); GetDlgItem(IDC_RADIUS)->EnableWindow(m_bCircle); GetDlgItem(IDC_INNERRADIUS)->EnableWindow(m_bCircle); } BOOL CParticlePage::OnInitDialog() { CPropertyPage::OnInitDialog(); // TODO: Add extra initialization here m_cbSrc.AddString("ZERO"); m_cbSrc.AddString("ONE"); m_cbSrc.AddString("SRCCOLOR"); m_cbSrc.AddString("INVSRCCOLOR"); m_cbSrc.AddString("SRCALPHA"); m_cbSrc.AddString("INVSRCALPHA"); m_cbSrc.AddString("DESTALPHA"); m_cbSrc.AddString("INVDESTALPHA"); m_cbSrc.AddString("DESTCOLOR"); m_cbSrc.AddString("INVDESTCOLOR"); m_cbSrc.AddString("SRCALPHASAT"); m_cbSrc.AddString("BOTHSRCALPHA"); m_cbSrc.AddString("BOTHINVSRCALPHA"); m_cbSrc.SetCurSel(4); m_cbDest.AddString("ZERO"); m_cbDest.AddString("ONE"); m_cbDest.AddString("SRCCOLOR"); m_cbDest.AddString("INVSRCCOLOR"); m_cbDest.AddString("SRCALPHA"); m_cbDest.AddString("INVSRCALPHA"); m_cbDest.AddString("DESTALPHA"); m_cbDest.AddString("INVDESTALPHA"); m_cbDest.AddString("DESTCOLOR"); m_cbDest.AddString("INVDESTCOLOR"); m_cbDest.AddString("SRCALPHASAT"); m_cbDest.AddString("BOTHSRCALPHA"); m_cbDest.AddString("BOTHINVSRCALPHA"); m_cbDest.SetCurSel(1); InitValue(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } //DEL void CParticlePage::OnScenario() //DEL { //DEL // TODO: Add your control notification handler code here //DEL m_bScenario = TRUE; //DEL m_bAuto = FALSE; //DEL //DEL CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; //DEL CX3DEffectEditParticle *pParticle = (CX3DEffectEditParticle *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(0, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); //DEL if(pParticle) //DEL { //DEL // pParticle->SetSpawnScenario(); //DEL } //DEL //DEL GetDlgItem(IDC_AUTOTIME)->EnableWindow(m_bAuto); //DEL } void CParticlePage::OnAuto() { // TODO: Add your control notification handler code here m_bScenario = FALSE; m_bAuto = TRUE; CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditParticle *pParticle = (CX3DEffectEditParticle *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(0, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); if(pParticle) { UpdateData(); // pParticle->SetSpawnAuto(m_fAutoTime); } GetDlgItem(IDC_AUTOTIME)->EnableWindow(m_bAuto); } //DEL void CParticlePage::OnSpawnning() //DEL { //DEL // TODO: Add your control notification handler code here //DEL //DEL } void CCylinderPage::OnCreate() { // TODO: Add your control notification handler code here UpdateData(); CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; if(((CEffectEditorView*)mf->GetActiveView())->m_dwPreFrame > m_dwStartFrame) { m_dwStartFrame = ((CEffectEditorView*)mf->GetActiveView())->m_dwPreFrame; } if(((CEffectEditorView*)mf->GetActiveView())->m_dwPreFrame > m_dwEndFrame) { m_dwEndFrame = ((CEffectEditorView*)mf->GetActiveView())->m_dwPreFrame; } if(((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetMaxFrame() < m_dwStartFrame) { m_dwStartFrame = ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetMaxFrame() + 1; } if(((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetMaxFrame() < m_dwEndFrame) { m_dwEndFrame = ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetMaxFrame() + 1; } CX3DEffectEditCylinder *pCylinder; pCylinder = new CX3DEffectEditCylinder; unsigned long dwStartFrame = m_dwStartFrame - 1; unsigned long dwEndFrame = m_dwEndFrame - 1; pCylinder->Create(dwStartFrame, dwEndFrame); ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->AddEffect(pCylinder); ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect = ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->AddEditObject(pCylinder); { quaternion quatAxis; quatAxis.Identity(); // m_fAxisX = m_fAxisX - (((unsigned long)(m_fAxisX / 360)) * 360.0f); // m_fAxisY = m_fAxisY - (((unsigned long)(m_fAxisY / 360)) * 360.0f); // m_fAxisZ = m_fAxisZ - (((unsigned long)(m_fAxisZ / 360)) * 360.0f); quatAxis.Pitch(FLOAT_DEG((float)m_edtAxisX)); quatAxis.Yaw(FLOAT_DEG((float)m_edtAxisY)); quatAxis.Roll(FLOAT_DEG((float)m_edtAxisZ)); pCylinder->LoadTexture(m_strTexture.GetBuffer(m_strTexture.GetLength())); SetKey(dwStartFrame, pCylinder->m_lstColor, color(m_edtColR, m_edtColG, m_edtColB, m_edtAlpha)); SetKey(dwStartFrame, pCylinder->m_lstCenter, vector3(m_edtCenX, m_edtCenY, m_edtCenZ)); SetKey(dwStartFrame, pCylinder->m_lstAxis, quatAxis); SetKey(dwStartFrame, pCylinder->m_lstUpperHeight, (float)m_edtUpperHeight); SetKey(dwStartFrame, pCylinder->m_lstUpperRadius, (float)m_edtUpperRadius); SetKey(dwStartFrame, pCylinder->m_lstLowerHeight, (float)m_edtLowerHeight); SetKey(dwStartFrame, pCylinder->m_lstLowerRadius, (float)m_edtLowerRadius); SetKey(dwStartFrame, pCylinder->m_lstStartU, (float)m_edtStartU); SetKey(dwStartFrame, pCylinder->m_lstStartV, (float)m_edtStartV); SetKey(dwStartFrame, pCylinder->m_lstTileU, (float)m_edtTileU); SetKey(dwStartFrame, pCylinder->m_lstTileV, (float)m_edtTileV); SetKey(dwStartFrame, pCylinder->m_lstTexFrame, (float)m_edtTexFrame); pCylinder->SetSidePlane(m_dwSidePlane); pCylinder->CreateBuffer(); pCylinder->SetSrcBlending(D3DBLEND_ZERO + m_cbSrc.GetCurSel()); pCylinder->SetDestBlending(D3DBLEND_ZERO + m_cbDest.GetCurSel()); pCylinder->SetEffectKind(EFFECT_CYLINDER); // mf->m_KeyBar.m_lpKeySheet->m_Page1.m_sldKeyFrame.SetTic(((CEffectEditorView*)mf->GetActiveView())->m_dwPreFrame); } } void CCylinderPage::OnDelete() { // TODO: Add your control notification handler code here CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; if(((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect != 0xFFFFFFFF) { ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->DeleteEffect(((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->DeleteEditObject(((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); } ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect = 0xFFFFFFFF; InitValue(); UpdateData(FALSE); } void CCylinderPage::OnBrowse() { // TODO: Add your control notification handler code here char strFilter[50] = "DDS ÆÄÀÏ(*.dds)|*.dds||"; CFileDialog dlg(TRUE, "*.dds", "", OFN_HIDEREADONLY | OFN_LONGNAMES, strFilter); if(dlg.DoModal() == IDOK) { m_strTexture = dlg.GetPathName(); CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditCylinder *pCylinder = (CX3DEffectEditCylinder *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(2, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); if(pCylinder) pCylinder->LoadTexture(m_strTexture); UpdateData(FALSE); } } BOOL CCylinderPage::OnInitDialog() { CPropertyPage::OnInitDialog(); // TODO: Add extra initialization here m_cbSrc.AddString("ZERO"); m_cbSrc.AddString("ONE"); m_cbSrc.AddString("SRCCOLOR"); m_cbSrc.AddString("INVSRCCOLOR"); m_cbSrc.AddString("SRCALPHA"); m_cbSrc.AddString("INVSRCALPHA"); m_cbSrc.AddString("DESTALPHA"); m_cbSrc.AddString("INVDESTALPHA"); m_cbSrc.AddString("DESTCOLOR"); m_cbSrc.AddString("INVDESTCOLOR"); m_cbSrc.AddString("SRCALPHASAT"); m_cbSrc.AddString("BOTHSRCALPHA"); m_cbSrc.AddString("BOTHINVSRCALPHA"); m_cbSrc.SetCurSel(4); m_cbDest.AddString("ZERO"); m_cbDest.AddString("ONE"); m_cbDest.AddString("SRCCOLOR"); m_cbDest.AddString("INVSRCCOLOR"); m_cbDest.AddString("SRCALPHA"); m_cbDest.AddString("INVSRCALPHA"); m_cbDest.AddString("DESTALPHA"); m_cbDest.AddString("INVDESTALPHA"); m_cbDest.AddString("DESTCOLOR"); m_cbDest.AddString("INVDESTCOLOR"); m_cbDest.AddString("SRCALPHASAT"); m_cbDest.AddString("BOTHSRCALPHA"); m_cbDest.AddString("BOTHINVSRCALPHA"); m_cbDest.SetCurSel(1); InitValue(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CCylinderPage::SetKeyInfo() { CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditCylinder *pCylinder = (CX3DEffectEditCylinder *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(2, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); unsigned long dwFrame = mf->m_KeyBar.m_lpKeySheet->m_Page1.m_dwPreFrame - 1; quaternion quatTemp; if(pCylinder) { pCylinder->Interpolation(dwFrame); m_strTexture = pCylinder->GetTextureFileName(); m_edtAlpha = pCylinder->GetAlpha(); m_edtColB = pCylinder->GetBColor(); m_edtColG = pCylinder->GetGColor(); m_edtColR = pCylinder->GetRColor(); if(pCylinder->m_lstColor.Find(dwFrame)) { m_edtAlpha.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtColB.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtColG.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtColR.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtAlpha.DisableBkColor(); m_edtColB.DisableBkColor(); m_edtColG.DisableBkColor(); m_edtColR.DisableBkColor(); } m_dwEndFrame = pCylinder->GetEndFrame(); m_dwStartFrame = pCylinder->GetStartFrame(); m_edtCenX = pCylinder->GetCenter().x; m_edtCenY = pCylinder->GetCenter().y; m_edtCenZ = pCylinder->GetCenter().z; if(pCylinder->m_lstCenter.Find(dwFrame)) { m_edtCenX.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtCenY.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtCenZ.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtCenX.DisableBkColor(); m_edtCenY.DisableBkColor(); m_edtCenZ.DisableBkColor(); } quatTemp = Eul_FromQuat(pCylinder->GetAxis(), EulOrdXZYs); m_edtAxisX = (quatTemp.x * 180.0f) / FLOAT_PHI; m_edtAxisY = (-quatTemp.z * 180.0f) / FLOAT_PHI; m_edtAxisZ = (-quatTemp.y * 180.0f) / FLOAT_PHI; if(pCylinder->m_lstAxis.Find(dwFrame)) { m_edtAxisX.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtAxisY.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtAxisZ.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtAxisX.DisableBkColor(); m_edtAxisY.DisableBkColor(); m_edtAxisZ.DisableBkColor(); } m_edtUpperHeight = pCylinder->GetUpperHeight(); if(pCylinder->m_lstUpperHeight.Find(dwFrame)) { m_edtUpperHeight.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtUpperHeight.DisableBkColor(); } m_edtUpperRadius = pCylinder->GetUpperRadius(); if(pCylinder->m_lstUpperRadius.Find(dwFrame)) { m_edtUpperRadius.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtUpperRadius.DisableBkColor(); } m_edtLowerHeight = pCylinder->GetLowerHeight(); if(pCylinder->m_lstLowerHeight.Find(dwFrame)) { m_edtLowerHeight.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtLowerHeight.DisableBkColor(); } m_edtLowerRadius = pCylinder->GetLowerRadius(); if(pCylinder->m_lstLowerRadius.Find(dwFrame)) { m_edtLowerRadius.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtLowerRadius.DisableBkColor(); } if(m_bTexStatic) { m_edtStartU = pCylinder->GetStartU(); if(pCylinder->m_lstStartU.Find(dwFrame)) { m_edtStartU.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtStartU.DisableBkColor(); } m_edtStartV = pCylinder->GetStartV(); if(pCylinder->m_lstStartV.Find(dwFrame)) { m_edtStartV.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtStartV.DisableBkColor(); } m_edtTileU = pCylinder->GetTileU(); if(pCylinder->m_lstTileU.Find(dwFrame)) { m_edtTileU.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtTileU.DisableBkColor(); } m_edtTileV = pCylinder->GetTileV(); if(pCylinder->m_lstTileV.Find(dwFrame)) { m_edtTileV.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtTileV.DisableBkColor(); } } if(m_bTexAni) { m_edtTexFrame = pCylinder->GetTexFrame(); if(pCylinder->m_lstTexFrame.Find(dwFrame)) { m_edtTexFrame.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtTexFrame.DisableBkColor(); } } m_cbSrc.SetCurSel(pCylinder->GetSrcBlending() - D3DBLEND_ZERO); m_cbDest.SetCurSel(pCylinder->GetDestBlending() - D3DBLEND_ZERO); UpdateData(FALSE); Invalidate(FALSE); } } void CCylinderPage::OnTexstatic() { // TODO: Add your control notification handler code here m_bTexStatic = TRUE; m_bTexAni = FALSE; CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditCylinder *pCylinder = (CX3DEffectEditCylinder *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(2, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); if(pCylinder) { pCylinder->SetTexAni(m_bTexAni); // pCylinder->SetFrame(FLT_MAX); } GetDlgItem(IDC_STARTU)->EnableWindow(m_bTexStatic); GetDlgItem(IDC_STARTV)->EnableWindow(m_bTexStatic); GetDlgItem(IDC_TILEU)->EnableWindow(m_bTexStatic); GetDlgItem(IDC_TILEV)->EnableWindow(m_bTexStatic); GetDlgItem(IDC_TEXFRAME)->EnableWindow(m_bTexAni); } void CCylinderPage::OnTexani() { // TODO: Add your control notification handler code here m_bTexStatic = FALSE; m_bTexAni = TRUE; CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditCylinder *pCylinder = (CX3DEffectEditCylinder *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(2, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); if(pCylinder) { pCylinder->SetTexAni(m_bTexAni); // pCylinder->SetFrame(FLT_MAX); } GetDlgItem(IDC_STARTU)->EnableWindow(m_bTexStatic); GetDlgItem(IDC_STARTV)->EnableWindow(m_bTexStatic); GetDlgItem(IDC_TILEU)->EnableWindow(m_bTexStatic); GetDlgItem(IDC_TILEV)->EnableWindow(m_bTexStatic); GetDlgItem(IDC_TEXFRAME)->EnableWindow(m_bTexAni); } BOOL CCylinderPage::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN) { UpdateData(); CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditCylinder *pCylinder = (CX3DEffectEditCylinder *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(2, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); unsigned long dwFrame = mf->m_KeyBar.m_lpKeySheet->m_Page1.m_dwPreFrame - 1; switch(::GetDlgCtrlID(pMsg->hwnd)) { case IDC_TEXTURE: if(pCylinder) { pCylinder->LoadTexture(m_strTexture); } break; case IDC_CENX: case IDC_CENY: case IDC_CENZ: if(pCylinder) { vector3 vecData; if(!strcmp(m_edtCenX, "") || !strcmp(m_edtCenY, "") || !strcmp(m_edtCenZ, "")) { if(pCylinder->m_lstCenter.Find(dwFrame, vecData)) { g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_DELKEY, 0, vecData); pCylinder->m_lstCenter.Erase(dwFrame); break; } } if(pCylinder->m_lstCenter.Find(dwFrame, vecData)) { g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_OLDDATA, 0, vecData); SetKey(dwFrame, pCylinder->m_lstCenter, vector3(m_edtCenX, m_edtCenY, m_edtCenZ)); g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_NEWDATA, 0, vector3(m_edtCenX, m_edtCenY, m_edtCenZ)); } else { SetKey(dwFrame, pCylinder->m_lstCenter, vector3(m_edtCenX, m_edtCenY, m_edtCenZ)); g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_INSERT, 0, vector3(m_edtCenX, m_edtCenY, m_edtCenZ)); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_AXISX: case IDC_AXISY: case IDC_AXISZ: if(pCylinder) { // m_fAxisX = m_fAxisX - (((unsigned long)(m_fAxisX / 360)) * 360.0f); // m_fAxisY = m_fAxisY - (((unsigned long)(m_fAxisY / 360)) * 360.0f); // m_fAxisZ = m_fAxisZ - (((unsigned long)(m_fAxisZ / 360)) * 360.0f); quaternion quatAxis; quatAxis.Identity(); quatAxis.Pitch(FLOAT_DEG((float)m_edtAxisX)); quatAxis.Yaw(FLOAT_DEG((float)m_edtAxisY)); quatAxis.Roll(FLOAT_DEG((float)m_edtAxisZ)); quaternion quatData; if(!strcmp(m_edtAxisX, "") || !strcmp(m_edtAxisY, "") || !strcmp(m_edtAxisZ, "")) { if(pCylinder->m_lstAxis.Find(dwFrame, quatData)) { g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_DELKEY, 1, quatData); pCylinder->m_lstAxis.Erase(dwFrame); break; } } if(pCylinder->m_lstAxis.Find(dwFrame, quatData)) { g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_OLDDATA, 1, quatData); SetKey(dwFrame, pCylinder->m_lstAxis, quatAxis); g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_NEWDATA, 1, quatAxis); } else { SetKey(dwFrame, pCylinder->m_lstAxis, quatAxis); g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_INSERT, 1, quatAxis); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_ALPHA: case IDC_COLR: case IDC_COLG: case IDC_COLB: if(pCylinder) { color lData; if(!strcmp(m_edtColR, "") || !strcmp(m_edtColG, "") || !strcmp(m_edtColB, "") || !strcmp(m_edtAlpha, "")) { if(pCylinder->m_lstColor.Find(dwFrame, lData)) { g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_DELKEY, 2, lData); pCylinder->m_lstColor.Erase(dwFrame); break; } } if(pCylinder->m_lstColor.Find(dwFrame, lData)) { g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_OLDDATA, 2, lData); SetKey(dwFrame, pCylinder->m_lstColor, color(m_edtColR, m_edtColG, m_edtColB, m_edtAlpha)); g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_NEWDATA, 2, color(m_edtColR, m_edtColG, m_edtColB, m_edtAlpha)); } else { SetKey(dwFrame, pCylinder->m_lstColor, color(m_edtColR, m_edtColG, m_edtColB, m_edtAlpha)); g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_INSERT, 2, color(m_edtColR, m_edtColG, m_edtColB, m_edtAlpha)); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_SIDEPLANE: if(pCylinder) { pCylinder->SetSidePlane(m_dwSidePlane); pCylinder->CreateBuffer(); } break; case IDC_UPPERHEIGHT: if(pCylinder) { float fData; if(!strcmp(m_edtUpperHeight, "")) { if(pCylinder->m_lstUpperHeight.Find(dwFrame, fData)) { g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_DELKEY, 3, fData); pCylinder->m_lstUpperHeight.Erase(dwFrame); break; } } if(pCylinder->m_lstUpperHeight.Find(dwFrame, fData)) { g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_OLDDATA, 3, fData); SetKey(dwFrame, pCylinder->m_lstUpperHeight, (float)m_edtUpperHeight); g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_NEWDATA, 3, (float)m_edtUpperHeight); } else { SetKey(dwFrame, pCylinder->m_lstUpperHeight, (float)m_edtUpperHeight); g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_INSERT, 3, (float)m_edtUpperHeight); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_UPPERRADIUS: if(pCylinder) { float fData; if(!strcmp(m_edtUpperRadius, "")) { if(pCylinder->m_lstUpperRadius.Find(dwFrame, fData)) { g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_DELKEY, 5, fData); pCylinder->m_lstUpperRadius.Erase(dwFrame); break; } } if(pCylinder->m_lstUpperRadius.Find(dwFrame, fData)) { g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_OLDDATA, 5, fData); SetKey(dwFrame, pCylinder->m_lstUpperRadius, (float)m_edtUpperRadius); g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_NEWDATA, 5, (float)m_edtUpperRadius); } else { SetKey(dwFrame, pCylinder->m_lstUpperRadius, (float)m_edtUpperRadius); g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_INSERT, 5, (float)m_edtUpperRadius); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_LOWERHEIGHT: if(pCylinder) { float fData; if(!strcmp(m_edtLowerHeight, "")) { if(pCylinder->m_lstLowerHeight.Find(dwFrame, fData)) { g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_DELKEY, 4, fData); pCylinder->m_lstLowerHeight.Erase(dwFrame); break; } } if(pCylinder->m_lstLowerHeight.Find(dwFrame, fData)) { g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_OLDDATA, 4, fData); SetKey(dwFrame, pCylinder->m_lstLowerHeight, (float)m_edtLowerHeight); g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_NEWDATA, 4, (float)m_edtLowerHeight); } else { SetKey(dwFrame, pCylinder->m_lstLowerHeight, (float)m_edtLowerHeight); g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_INSERT, 4, (float)m_edtLowerHeight); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_LOWERRADIUS: if(pCylinder) { float fData; if(!strcmp(m_edtLowerRadius, "")) { if(pCylinder->m_lstLowerRadius.Find(dwFrame, fData)) { g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_DELKEY, 6, fData); pCylinder->m_lstLowerRadius.Erase(dwFrame); break; } } if(pCylinder->m_lstLowerRadius.Find(dwFrame, fData)) { g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_OLDDATA, 6, fData); SetKey(dwFrame, pCylinder->m_lstLowerRadius, (float)m_edtLowerRadius); g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_NEWDATA, 6, (float)m_edtLowerRadius); } else { SetKey(dwFrame, pCylinder->m_lstLowerRadius, (float)m_edtLowerRadius); g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_INSERT, 6, (float)m_edtLowerRadius); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_TEXFRAME: if(pCylinder) { float fData; if(!strcmp(m_edtTexFrame, "")) { if(pCylinder->m_lstTexFrame.Find(dwFrame, fData)) { g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_DELKEY, 11, fData); pCylinder->m_lstTexFrame.Erase(dwFrame); break; } } if(pCylinder->m_lstTexFrame.Find(dwFrame, fData)) { g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_OLDDATA, 11, fData); SetKey(dwFrame, pCylinder->m_lstTexFrame, (float)m_edtTexFrame); g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_NEWDATA, 11, (float)m_edtTexFrame); } else { SetKey(dwFrame, pCylinder->m_lstTexFrame, (float)m_edtTexFrame); g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_INSERT, 11, (float)m_edtTexFrame); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_STARTU: if(pCylinder) { float fData; if(!strcmp(m_edtStartU, "")) { if(pCylinder->m_lstStartU.Find(dwFrame, fData)) { g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_DELKEY, 9, fData); pCylinder->m_lstStartU.Erase(dwFrame); break; } } if(pCylinder->m_lstStartU.Find(dwFrame, fData)) { g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_OLDDATA, 9, fData); SetKey(dwFrame, pCylinder->m_lstStartU, (float)m_edtStartU); g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_NEWDATA, 9, (float)m_edtStartU); } else { SetKey(dwFrame, pCylinder->m_lstStartU, (float)m_edtStartU); g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_INSERT, 9, (float)m_edtStartU); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_STARTV: if(pCylinder) { float fData; if(!strcmp(m_edtStartV, "")) { if(pCylinder->m_lstStartV.Find(dwFrame, fData)) { g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_DELKEY, 10, fData); pCylinder->m_lstStartV.Erase(dwFrame); break; } } if(pCylinder->m_lstStartV.Find(dwFrame, fData)) { g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_OLDDATA, 10, fData); SetKey(dwFrame, pCylinder->m_lstStartV, (float)m_edtStartV); g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_NEWDATA, 10, (float)m_edtStartV); } else { SetKey(dwFrame, pCylinder->m_lstStartV, (float)m_edtStartV); g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_INSERT, 10, (float)m_edtStartV); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_TILEU: if(pCylinder) { float fData; if(!strcmp(m_edtTileU, "")) { if(pCylinder->m_lstTileU.Find(dwFrame, fData)) { g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_DELKEY, 7, fData); pCylinder->m_lstTileU.Erase(dwFrame); break; } } if(pCylinder->m_lstTileU.Find(dwFrame, fData)) { g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_OLDDATA, 7, fData); SetKey(dwFrame, pCylinder->m_lstTileU, (float)m_edtTileU); g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_NEWDATA, 7, (float)m_edtTileU); } else { SetKey(dwFrame, pCylinder->m_lstTileU, (float)m_edtTileU); g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_INSERT, 7, (float)m_edtTileU); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_TILEV: if(pCylinder) { float fData; if(!strcmp(m_edtTileV, "")) { if(pCylinder->m_lstTileV.Find(dwFrame, fData)) { g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_DELKEY, 8, fData); pCylinder->m_lstTileV.Erase(dwFrame); break; } } if(pCylinder->m_lstTileV.Find(dwFrame, fData)) { g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_OLDDATA, 8, fData); SetKey(dwFrame, pCylinder->m_lstTileV, (float)m_edtTileV); g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_NEWDATA, 8, (float)m_edtTileV); } else { SetKey(dwFrame, pCylinder->m_lstTileV, (float)m_edtTileV); g_CommandManager.AddCommand(2, pCylinder->GetUID(), dwFrame, COMMAND_INSERT, 8, (float)m_edtTileV); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_STARTFRAME: if(pCylinder) { // pPlane->EditFrame(dwFrame, m_dwStartFrame); pCylinder->SetStartFrame(m_dwStartFrame); if(pCylinder->GetEndFrame() < m_dwStartFrame) { pCylinder->SetEndFrame(m_dwStartFrame); m_dwEndFrame = m_dwStartFrame; UpdateData(FALSE); } } break; case IDC_ENDFRAME: if(pCylinder) { if(pCylinder->GetStartFrame() > m_dwEndFrame) { m_dwEndFrame = pCylinder->GetStartFrame(); UpdateData(FALSE); } pCylinder->SetEndFrame(m_dwEndFrame); } break; } SetKeyInfo(); } return CPropertyPage::PreTranslateMessage(pMsg); } void CBillboardPage::OnCreate() { // TODO: Add your control notification handler code here UpdateData(); CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; if(((CEffectEditorView*)mf->GetActiveView())->m_dwPreFrame > m_dwStartFrame) { m_dwStartFrame = ((CEffectEditorView*)mf->GetActiveView())->m_dwPreFrame; } if(((CEffectEditorView*)mf->GetActiveView())->m_dwPreFrame > m_dwEndFrame) { m_dwEndFrame = ((CEffectEditorView*)mf->GetActiveView())->m_dwPreFrame; } if(((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetMaxFrame() < m_dwStartFrame) { m_dwStartFrame = ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetMaxFrame() + 1; } if(((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetMaxFrame() < m_dwEndFrame) { m_dwEndFrame = ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetMaxFrame() + 1; } CX3DEffectEditBillboard *pBillboard; pBillboard = new CX3DEffectEditBillboard; unsigned long dwStartFrame = m_dwStartFrame - 1; unsigned long dwEndFrame = m_dwEndFrame - 1; pBillboard->Create(dwStartFrame, dwEndFrame); ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->AddEffect(pBillboard); ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect = ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->AddEditObject(pBillboard); { quaternion quatAxis; quatAxis.Identity(); // m_fAxisX = m_fAxisX - (((unsigned long)(m_fAxisX / 360)) * 360.0f); // m_fAxisY = m_fAxisY - (((unsigned long)(m_fAxisY / 360)) * 360.0f); // m_fAxisZ = m_fAxisZ - (((unsigned long)(m_fAxisZ / 360)) * 360.0f); quatAxis.Pitch(FLOAT_DEG((float)m_edtAxisX)); quatAxis.Yaw(FLOAT_DEG((float)m_edtAxisY)); quatAxis.Roll(FLOAT_DEG((float)m_edtAxisZ)); pBillboard->LoadTexture(m_strTexture.GetBuffer(m_strTexture.GetLength())); SetKey(dwStartFrame, pBillboard->m_lstColor, color(m_edtColR, m_edtColG, m_edtColB, m_edtAlpha)); SetKey(dwStartFrame, pBillboard->m_lstWidth, (float)m_edtWidth); SetKey(dwStartFrame, pBillboard->m_lstHeight, (float)m_edtHeight); SetKey(dwStartFrame, pBillboard->m_lstCenter, vector3(m_edtCenX, m_edtCenY, m_edtCenZ)); SetKey(dwStartFrame, pBillboard->m_lstAxis, quatAxis); SetKey(dwStartFrame, pBillboard->m_lstStartU, (float)m_edtStartU); SetKey(dwStartFrame, pBillboard->m_lstStartV, (float)m_edtStartV); SetKey(dwStartFrame, pBillboard->m_lstTileU, (float)m_edtTileU); SetKey(dwStartFrame, pBillboard->m_lstTileV, (float)m_edtTileV); SetKey(dwStartFrame, pBillboard->m_lstTexFrame, (float)m_edtTexFrame); pBillboard->CreateBuffer(); pBillboard->SetSrcBlending(D3DBLEND_ZERO + m_cbSrc.GetCurSel()); pBillboard->SetDestBlending(D3DBLEND_ZERO + m_cbDest.GetCurSel()); pBillboard->SetEffectKind(EFFECT_BILLBOARD); pBillboard->Interpolation(dwStartFrame); SetKeyInfo(); // mf->m_KeyBar.m_lpKeySheet->m_Page1.m_sldPoint.SetMaker(((CEffectEditorView*)mf->GetActiveView())->m_dwPreFrame); } } void CBillboardPage::OnBrowse() { // TODO: Add your control notification handler code here char strFilter[50] = "DDS ÆÄÀÏ(*.dds)|*.dds||"; CFileDialog dlg(TRUE, "*.dds", "", OFN_HIDEREADONLY | OFN_LONGNAMES, strFilter); if(dlg.DoModal() == IDOK) { m_strTexture = dlg.GetPathName(); CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditBillboard *pBillboard = (CX3DEffectEditBillboard *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(1, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); if(pBillboard) pBillboard->LoadTexture(m_strTexture); UpdateData(FALSE); } } void CBillboardPage::OnDelete() { // TODO: Add your control notification handler code here CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; if(((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect != 0xFFFFFFFF) { ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->DeleteEffect(((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->DeleteEditObject(((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); } ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect = 0xFFFFFFFF; InitValue(); UpdateData(FALSE); } void CBillboardPage::SetKeyInfo() { CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditBillboard *pBillboard = (CX3DEffectEditBillboard *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(1, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); unsigned long dwFrame = mf->m_KeyBar.m_lpKeySheet->m_Page1.m_dwPreFrame - 1; quaternion quatTemp; if(pBillboard) { pBillboard->Interpolation(dwFrame); m_bAxisAligned = pBillboard->GetAxisAligned(); m_strTexture = pBillboard->GetTextureFileName(); m_edtAlpha = pBillboard->GetAlpha(); m_edtColB.SetValue(pBillboard->GetBColor()); m_edtColG.SetValue(pBillboard->GetGColor()); m_edtColR.SetValue(pBillboard->GetRColor()); if(pBillboard->m_lstColor.Find(dwFrame)) { m_edtAlpha.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtColB.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtColG.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtColR.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtAlpha.DisableBkColor(); m_edtColB.DisableBkColor(); m_edtColG.DisableBkColor(); m_edtColR.DisableBkColor(); } m_dwEndFrame = pBillboard->GetEndFrame() + 1; m_dwStartFrame = pBillboard->GetStartFrame() + 1; m_edtCenX.SetValue(pBillboard->GetCenter().x); m_edtCenY.SetValue(pBillboard->GetCenter().y); m_edtCenZ.SetValue(pBillboard->GetCenter().z); if(pBillboard->m_lstCenter.Find(dwFrame)) { m_edtCenX.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtCenY.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtCenZ.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtCenX.DisableBkColor(); m_edtCenY.DisableBkColor(); m_edtCenZ.DisableBkColor(); } quatTemp = Eul_FromQuat(pBillboard->GetAxis(), EulOrdXZYs); m_edtAxisX = (quatTemp.x * 180.0f) / FLOAT_PHI; m_edtAxisY = (-quatTemp.z * 180.0f) / FLOAT_PHI; m_edtAxisZ = (-quatTemp.y * 180.0f) / FLOAT_PHI; // m_fAxisX = (quatTemp.x * 180.0f) / FLOAT_PHI; // m_fAxisY = (quatTemp.y * 180.0f) / FLOAT_PHI; // m_fAxisZ = (quatTemp.z * 180.0f) / FLOAT_PHI; if(pBillboard->m_lstAxis.Find(dwFrame)) { m_edtAxisX.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtAxisY.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtAxisZ.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtAxisX.DisableBkColor(); m_edtAxisY.DisableBkColor(); m_edtAxisZ.DisableBkColor(); } m_edtHeight.SetValue(pBillboard->GetHeight()); if(pBillboard->m_lstHeight.Find(dwFrame)) { m_edtHeight.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtHeight.DisableBkColor(); } m_edtWidth.SetValue(pBillboard->GetWidth()); if(pBillboard->m_lstWidth.Find(dwFrame)) { m_edtWidth.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtWidth.DisableBkColor(); } if(m_bTexStatic) { m_edtStartU.SetValue(pBillboard->GetStartU()); if(pBillboard->m_lstStartU.Find(dwFrame)) { m_edtStartU.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtStartU.DisableBkColor(); } m_edtStartV.SetValue(pBillboard->GetStartV()); if(pBillboard->m_lstStartV.Find(dwFrame)) { m_edtStartV.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtStartV.DisableBkColor(); } m_edtTileU.SetValue(pBillboard->GetTileU()); if(pBillboard->m_lstTileU.Find(dwFrame)) { m_edtTileU.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtTileU.DisableBkColor(); } m_edtTileV.SetValue(pBillboard->GetTileV()); if(pBillboard->m_lstTileV.Find(dwFrame)) { m_edtTileV.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtTileV.DisableBkColor(); } } if(m_bTexAni) { m_edtTexFrame.SetValue((unsigned long)pBillboard->GetTexFrame()); if(pBillboard->m_lstTexFrame.Find(dwFrame)) { m_edtTexFrame.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtTexFrame.DisableBkColor(); } } m_cbSrc.SetCurSel(pBillboard->GetSrcBlending() - D3DBLEND_ZERO); m_cbDest.SetCurSel(pBillboard->GetDestBlending() - D3DBLEND_ZERO); UpdateData(FALSE); Invalidate(FALSE); } } BOOL CBillboardPage::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class /* if(pMsg->message == CB_SETCURSEL) { UpdateData(); CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditBillboard *pBillboard = (CX3DEffectEditBillboard *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(1, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); unsigned long dwFrame = mf->m_KeyBar.m_lpKeySheet->m_Page1.m_dwPreFrame - 1; switch(::GetDlgCtrlID(pMsg->hwnd)) { case IDC_CBSRC: pBillboard->SetSrcBlending(D3DBLEND_ZERO + m_cbSrc.GetCurSel()); break; case IDC_CBDEST: pBillboard->SetDestBlending(D3DBLEND_ZERO + m_cbDest.GetCurSel()); break; } }*/ if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN) { UpdateData(); CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditBillboard *pBillboard = (CX3DEffectEditBillboard *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(1, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); unsigned long dwFrame = mf->m_KeyBar.m_lpKeySheet->m_Page1.m_dwPreFrame - 1; switch(::GetDlgCtrlID(pMsg->hwnd)) { case IDC_TEXTURE: if(pBillboard) { pBillboard->LoadTexture(m_strTexture); } break; case IDC_CENX: case IDC_CENY: case IDC_CENZ: if(pBillboard) { vector3 vecData; if(!strcmp(m_edtCenX, "") || !strcmp(m_edtCenY, "") || !strcmp(m_edtCenZ, "")) { if(pBillboard->m_lstCenter.Find(dwFrame, vecData)) { g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_DELKEY, 0, vecData); pBillboard->m_lstCenter.Erase(dwFrame); break; } } if(pBillboard->m_lstCenter.Find(dwFrame, vecData)) { g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_OLDDATA, 0, vecData); SetKey(dwFrame, pBillboard->m_lstCenter, vector3(m_edtCenX, m_edtCenY, m_edtCenZ)); g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_NEWDATA, 0, vector3(m_edtCenX, m_edtCenY, m_edtCenZ)); } else { SetKey(dwFrame, pBillboard->m_lstCenter, vector3(m_edtCenX, m_edtCenY, m_edtCenZ)); g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_INSERT, 0, vector3(m_edtCenX, m_edtCenY, m_edtCenZ)); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_AXISX: case IDC_AXISY: case IDC_AXISZ: if(pBillboard) { // m_fAxisX = m_fAxisX - (((unsigned long)(m_fAxisX / 360)) * 360.0f); // m_fAxisY = m_fAxisY - (((unsigned long)(m_fAxisY / 360)) * 360.0f); // m_fAxisZ = m_fAxisZ - (((unsigned long)(m_fAxisZ / 360)) * 360.0f); quaternion quatAxis; quatAxis.Identity(); quatAxis.Pitch(FLOAT_DEG((float)m_edtAxisX)); quatAxis.Yaw(FLOAT_DEG((float)m_edtAxisY)); quatAxis.Roll(FLOAT_DEG((float)m_edtAxisZ)); quaternion quatData; if(!strcmp(m_edtAxisX, "") || !strcmp(m_edtAxisY, "") || !strcmp(m_edtAxisZ, "")) { if(pBillboard->m_lstAxis.Find(dwFrame, quatData)) { g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_DELKEY, 1, quatData); pBillboard->m_lstAxis.Erase(dwFrame); break; } } if(pBillboard->m_lstAxis.Find(dwFrame, quatData)) { g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_OLDDATA, 1, quatData); SetKey(dwFrame, pBillboard->m_lstAxis, quatAxis); g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_NEWDATA, 1, quatAxis); } else { SetKey(dwFrame, pBillboard->m_lstAxis, quatAxis); g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_INSERT, 1, quatAxis); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_ALPHA: case IDC_COLR: case IDC_COLG: case IDC_COLB: if(pBillboard) { color lData; if(!strcmp(m_edtColR, "") || !strcmp(m_edtColG, "") || !strcmp(m_edtColB, "") || !strcmp(m_edtAlpha, "")) { if(pBillboard->m_lstColor.Find(dwFrame, lData)) { g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_DELKEY, 2, lData); pBillboard->m_lstColor.Erase(dwFrame); break; } } if(pBillboard->m_lstColor.Find(dwFrame, lData)) { g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_OLDDATA, 2, lData); SetKey(dwFrame, pBillboard->m_lstColor, color(m_edtColR, m_edtColG, m_edtColB, m_edtAlpha)); g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_NEWDATA, 2, color(m_edtColR, m_edtColG, m_edtColB, m_edtAlpha)); } else { SetKey(dwFrame, pBillboard->m_lstColor, color(m_edtColR, m_edtColG, m_edtColB, m_edtAlpha)); g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_INSERT, 2, color(m_edtColR, m_edtColG, m_edtColB, m_edtAlpha)); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_WIDTH: if(pBillboard) { float fData; if(!strcmp(m_edtWidth, "")) { if(pBillboard->m_lstWidth.Find(dwFrame, fData)) { g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_DELKEY, 3, fData); pBillboard->m_lstWidth.Erase(dwFrame); break; } } if(pBillboard->m_lstWidth.Find(dwFrame, fData)) { g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_OLDDATA, 3, fData); SetKey(dwFrame, pBillboard->m_lstWidth, (float)m_edtWidth); g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_NEWDATA, 3, (float)m_edtWidth); } else { SetKey(dwFrame, pBillboard->m_lstWidth, (float)m_edtWidth); g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_INSERT, 3, (float)m_edtWidth); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_HEIGHT: if(pBillboard) { float fData; if(!strcmp(m_edtHeight, "")) { if(pBillboard->m_lstHeight.Find(dwFrame, fData)) { g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_DELKEY, 4, fData); pBillboard->m_lstHeight.Erase(dwFrame); break; } } if(pBillboard->m_lstHeight.Find(dwFrame, fData)) { g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_OLDDATA, 4, fData); SetKey(dwFrame, pBillboard->m_lstHeight, (float)m_edtHeight); g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_NEWDATA, 4, (float)m_edtHeight); } else { SetKey(dwFrame, pBillboard->m_lstHeight, (float)m_edtHeight); g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_INSERT, 4, (float)m_edtHeight); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_TEXFRAME: if(pBillboard) { float fData; if(!strcmp(m_edtTexFrame, "")) { if(pBillboard->m_lstTexFrame.Find(dwFrame, fData)) { g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_DELKEY, 9, fData); pBillboard->m_lstTexFrame.Erase(dwFrame); break; } } if(pBillboard->m_lstTexFrame.Find(dwFrame, fData)) { g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_OLDDATA, 9, fData); SetKey(dwFrame, pBillboard->m_lstTexFrame, (float)m_edtTexFrame); g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_NEWDATA, 9, (float)m_edtTexFrame); } else { SetKey(dwFrame, pBillboard->m_lstTexFrame, (float)m_edtTexFrame); g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_INSERT, 9, (float)m_edtTexFrame); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_STARTU: if(pBillboard) { float fData; if(!strcmp(m_edtStartU, "")) { if(pBillboard->m_lstStartU.Find(dwFrame, fData)) { g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_DELKEY, 7, fData); pBillboard->m_lstStartU.Erase(dwFrame); break; } } if(pBillboard->m_lstStartU.Find(dwFrame, fData)) { g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_OLDDATA, 7, fData); SetKey(dwFrame, pBillboard->m_lstStartU, (float)m_edtStartU); g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_NEWDATA, 7, (float)m_edtStartU); } else { SetKey(dwFrame, pBillboard->m_lstStartU, (float)m_edtStartU); g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_INSERT, 7, (float)m_edtStartU); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_STARTV: if(pBillboard) { float fData; if(!strcmp(m_edtStartV, "")) { if(pBillboard->m_lstStartV.Find(dwFrame, fData)) { g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_DELKEY, 8, fData); pBillboard->m_lstStartV.Erase(dwFrame); break; } } if(pBillboard->m_lstStartV.Find(dwFrame, fData)) { g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_OLDDATA, 8, fData); SetKey(dwFrame, pBillboard->m_lstStartV, (float)m_edtStartV); g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_NEWDATA, 8, (float)m_edtStartV); } else { SetKey(dwFrame, pBillboard->m_lstStartV, (float)m_edtStartV); g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_INSERT, 8, (float)m_edtStartV); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_TILEU: if(pBillboard) { float fData; if(!strcmp(m_edtTileU, "")) { if(pBillboard->m_lstTileU.Find(dwFrame, fData)) { g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_DELKEY, 5, fData); pBillboard->m_lstTileU.Erase(dwFrame); break; } } if(pBillboard->m_lstTileU.Find(dwFrame, fData)) { g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_OLDDATA, 5, fData); SetKey(dwFrame, pBillboard->m_lstTileU, (float)m_edtTileU); g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_NEWDATA, 5, (float)m_edtTileU); } else { SetKey(dwFrame, pBillboard->m_lstTileU, (float)m_edtTileU); g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_INSERT, 5, (float)m_edtTileU); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_TILEV: if(pBillboard) { float fData; if(!strcmp(m_edtTileV, "")) { if(pBillboard->m_lstTileV.Find(dwFrame, fData)) { g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_DELKEY, 6, fData); pBillboard->m_lstTileV.Erase(dwFrame); break; } } if(pBillboard->m_lstTileV.Find(dwFrame, fData)) { g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_OLDDATA, 6, fData); SetKey(dwFrame, pBillboard->m_lstTileV, (float)m_edtTileV); g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_NEWDATA, 6, (float)m_edtTileV); } else { SetKey(dwFrame, pBillboard->m_lstTileV, (float)m_edtTileV); g_CommandManager.AddCommand(1, pBillboard->GetUID(), dwFrame, COMMAND_INSERT, 6, (float)m_edtTileV); } // pPlane->SetFrame(FLT_MAX); } break; case IDC_STARTFRAME: if(pBillboard) { // pPlane->EditFrame(dwFrame, m_dwStartFrame); pBillboard->SetStartFrame(m_dwStartFrame); if(pBillboard->GetEndFrame() < m_dwStartFrame) { pBillboard->SetEndFrame(m_dwStartFrame); m_dwEndFrame = m_dwStartFrame; UpdateData(FALSE); } } break; case IDC_ENDFRAME: if(pBillboard) { if(pBillboard->GetStartFrame() > m_dwEndFrame) { m_dwEndFrame = pBillboard->GetStartFrame(); UpdateData(FALSE); } pBillboard->SetEndFrame(m_dwEndFrame); } break; } SetKeyInfo(); } return CPropertyPage::PreTranslateMessage(pMsg); } void CBillboardPage::OnTexstatic() { // TODO: Add your control notification handler code here m_bTexStatic = TRUE; m_bTexAni = FALSE; CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditBillboard *pBillboard = (CX3DEffectEditBillboard *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(1, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); if(pBillboard) { pBillboard->SetTexAni(m_bTexAni); // pPlane->SetFrame(FLT_MAX); } GetDlgItem(IDC_STARTU)->EnableWindow(m_bTexStatic); GetDlgItem(IDC_STARTV)->EnableWindow(m_bTexStatic); GetDlgItem(IDC_TILEU)->EnableWindow(m_bTexStatic); GetDlgItem(IDC_TILEV)->EnableWindow(m_bTexStatic); GetDlgItem(IDC_TEXFRAME)->EnableWindow(m_bTexAni); m_edtTexFrame.DisableBkColor(); SetKeyInfo(); } void CBillboardPage::OnTexani() { // TODO: Add your control notification handler code here m_bTexStatic = FALSE; m_bTexAni = TRUE; CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditBillboard *pBillboard = (CX3DEffectEditBillboard *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(1, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); if(pBillboard) { pBillboard->SetTexAni(m_bTexAni); // pPlane->SetFrame(FLT_MAX); } GetDlgItem(IDC_STARTU)->EnableWindow(m_bTexStatic); GetDlgItem(IDC_STARTV)->EnableWindow(m_bTexStatic); GetDlgItem(IDC_TILEU)->EnableWindow(m_bTexStatic); GetDlgItem(IDC_TILEV)->EnableWindow(m_bTexStatic); m_edtStartU.DisableBkColor(); m_edtStartV.DisableBkColor(); m_edtTileU.DisableBkColor(); m_edtTileV.DisableBkColor(); GetDlgItem(IDC_TEXFRAME)->EnableWindow(m_bTexAni); SetKeyInfo(); } BOOL CBillboardPage::OnInitDialog() { CPropertyPage::OnInitDialog(); // TODO: Add extra initialization here m_cbSrc.AddString("ZERO"); m_cbSrc.AddString("ONE"); m_cbSrc.AddString("SRCCOLOR"); m_cbSrc.AddString("INVSRCCOLOR"); m_cbSrc.AddString("SRCALPHA"); m_cbSrc.AddString("INVSRCALPHA"); m_cbSrc.AddString("DESTALPHA"); m_cbSrc.AddString("INVDESTALPHA"); m_cbSrc.AddString("DESTCOLOR"); m_cbSrc.AddString("INVDESTCOLOR"); m_cbSrc.AddString("SRCALPHASAT"); m_cbSrc.AddString("BOTHSRCALPHA"); m_cbSrc.AddString("BOTHINVSRCALPHA"); m_cbSrc.SetCurSel(4); m_cbDest.AddString("ZERO"); m_cbDest.AddString("ONE"); m_cbDest.AddString("SRCCOLOR"); m_cbDest.AddString("INVSRCCOLOR"); m_cbDest.AddString("SRCALPHA"); m_cbDest.AddString("INVSRCALPHA"); m_cbDest.AddString("DESTALPHA"); m_cbDest.AddString("INVDESTALPHA"); m_cbDest.AddString("DESTCOLOR"); m_cbDest.AddString("INVDESTCOLOR"); m_cbDest.AddString("SRCALPHASAT"); m_cbDest.AddString("BOTHSRCALPHA"); m_cbDest.AddString("BOTHINVSRCALPHA"); m_cbDest.SetCurSel(1); InitValue(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CBillboardPage::InitValue() { m_strTexture = _T(""); m_dwEndFrame = 30; m_dwStartFrame = 1; ((CButton *)(GetDlgItem(IDC_TEXSTATIC)))->SetCheck(1); OnTexstatic(); m_edtAxisX.SetValue(0.0f); m_edtAxisX.DisableBkColor(); m_edtAxisY.SetValue(0.0f); m_edtAxisY.DisableBkColor(); m_edtAxisZ.SetValue(0.0f); m_edtAxisZ.DisableBkColor(); m_edtCenX.SetValue(0.0f); m_edtCenX.DisableBkColor(); m_edtCenY.SetValue(0.0f); m_edtCenY.DisableBkColor(); m_edtCenZ.SetValue(0.0f); m_edtCenZ.DisableBkColor(); m_edtWidth.SetValue(5.0f); m_edtWidth.DisableBkColor(); m_edtHeight.SetValue(5.0f); m_edtHeight.DisableBkColor(); m_edtStartU.SetValue(0.0f); m_edtStartU.DisableBkColor(); m_edtStartV.SetValue(0.0f); m_edtStartV.DisableBkColor(); m_edtTileU.SetValue(1.0f); m_edtTileU.DisableBkColor(); m_edtTileV.SetValue(1.0f); m_edtTileV.DisableBkColor(); m_edtAlpha.SetValue((unsigned char)255); m_edtAlpha.DisableBkColor(); m_edtColB.SetValue((unsigned char)255); m_edtColB.DisableBkColor(); m_edtColG.SetValue((unsigned char)255); m_edtColG.DisableBkColor(); m_edtColR.SetValue((unsigned char)255); m_edtColR.DisableBkColor(); m_edtTexFrame.SetValue((unsigned long)0); m_edtTexFrame.DisableBkColor(); } void CPlanePage::InitValue() { m_strTexture = _T(""); m_dwEndFrame = 30; m_dwStartFrame = 1; ((CButton *)(GetDlgItem(IDC_TEXSTATIC)))->SetCheck(1); OnTexstatic(); m_edtAxisX.SetValue(0.0f); m_edtAxisX.DisableBkColor(); m_edtAxisY.SetValue(0.0f); m_edtAxisY.DisableBkColor(); m_edtAxisZ.SetValue(0.0f); m_edtAxisZ.DisableBkColor(); m_edtCenX.SetValue(0.0f); m_edtCenX.DisableBkColor(); m_edtCenY.SetValue(0.0f); m_edtCenY.DisableBkColor(); m_edtCenZ.SetValue(0.0f); m_edtCenZ.DisableBkColor(); m_edtWidth.SetValue(5.0f); m_edtWidth.DisableBkColor(); m_edtHeight.SetValue(5.0f); m_edtHeight.DisableBkColor(); m_edtStartU.SetValue(0.0f); m_edtStartU.DisableBkColor(); m_edtStartV.SetValue(0.0f); m_edtStartV.DisableBkColor(); m_edtTileU.SetValue(1.0f); m_edtTileU.DisableBkColor(); m_edtTileV.SetValue(1.0f); m_edtTileV.DisableBkColor(); m_edtAlpha.SetValue((unsigned char)255); m_edtAlpha.DisableBkColor(); m_edtColB.SetValue((unsigned char)255); m_edtColB.DisableBkColor(); m_edtColG.SetValue((unsigned char)255); m_edtColG.DisableBkColor(); m_edtColR.SetValue((unsigned char)255); m_edtColR.DisableBkColor(); m_edtTexFrame.SetValue((unsigned long)0); m_edtTexFrame.DisableBkColor(); } void CBillboardPage::Undo(CCommand *UndoCommand) { CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditBillboard *pBillboard = (CX3DEffectEditBillboard *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetFindEditObject(UndoCommand->GetUID()); if(!pBillboard) return; vector3 vecData; quaternion quatData; color lData; float fData; switch(UndoCommand->GetListKind()) { case 0: UndoCommand->GetData(vecData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pBillboard->m_lstCenter, vecData); } else { pBillboard->m_lstCenter.Erase(UndoCommand->GetFrame()); } break; case 1: UndoCommand->GetData(quatData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pBillboard->m_lstAxis, quatData); } else { pBillboard->m_lstAxis.Erase(UndoCommand->GetFrame()); } break; case 2: UndoCommand->GetData(lData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pBillboard->m_lstColor, lData); } else { pBillboard->m_lstColor.Erase(UndoCommand->GetFrame()); } break; case 3: UndoCommand->GetData(fData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pBillboard->m_lstWidth, fData); } else { pBillboard->m_lstWidth.Erase(UndoCommand->GetFrame()); } break; case 4: UndoCommand->GetData(fData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pBillboard->m_lstHeight, fData); } else { pBillboard->m_lstHeight.Erase(UndoCommand->GetFrame()); } break; case 5: UndoCommand->GetData(fData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pBillboard->m_lstTileU, fData); } else { pBillboard->m_lstTileU.Erase(UndoCommand->GetFrame()); } break; case 6: UndoCommand->GetData(fData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pBillboard->m_lstTileV, fData); } else { pBillboard->m_lstTileV.Erase(UndoCommand->GetFrame()); } break; case 7: UndoCommand->GetData(fData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pBillboard->m_lstStartU, fData); } else { pBillboard->m_lstStartU.Erase(UndoCommand->GetFrame()); } break; case 8: UndoCommand->GetData(fData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pBillboard->m_lstStartV, fData); } else { pBillboard->m_lstStartV.Erase(UndoCommand->GetFrame()); } break; case 9: UndoCommand->GetData(fData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pBillboard->m_lstTexFrame, fData); } else { pBillboard->m_lstTexFrame.Erase(UndoCommand->GetFrame()); } break; } SetKeyInfo(); } void CPlanePage::Undo(CCommand *UndoCommand) { CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditPlane *pPlane = (CX3DEffectEditPlane *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetFindEditObject(UndoCommand->GetUID()); if(!pPlane) return; vector3 vecData; quaternion quatData; color lData; float fData; switch(UndoCommand->GetListKind()) { case 0: UndoCommand->GetData(vecData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pPlane->m_lstCenter, vecData); } else { pPlane->m_lstCenter.Erase(UndoCommand->GetFrame()); } break; case 1: UndoCommand->GetData(quatData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pPlane->m_lstAxis, quatData); } else { pPlane->m_lstAxis.Erase(UndoCommand->GetFrame()); } break; case 2: UndoCommand->GetData(lData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pPlane->m_lstColor, lData); } else { pPlane->m_lstColor.Erase(UndoCommand->GetFrame()); } break; case 3: UndoCommand->GetData(fData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pPlane->m_lstWidth, fData); } else { pPlane->m_lstWidth.Erase(UndoCommand->GetFrame()); } break; case 4: UndoCommand->GetData(fData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pPlane->m_lstHeight, fData); } else { pPlane->m_lstHeight.Erase(UndoCommand->GetFrame()); } break; case 5: UndoCommand->GetData(fData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pPlane->m_lstTileU, fData); } else { pPlane->m_lstTileU.Erase(UndoCommand->GetFrame()); } break; case 6: UndoCommand->GetData(fData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pPlane->m_lstTileV, fData); } else { pPlane->m_lstTileV.Erase(UndoCommand->GetFrame()); } break; case 7: UndoCommand->GetData(fData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pPlane->m_lstStartU, fData); } else { pPlane->m_lstStartU.Erase(UndoCommand->GetFrame()); } break; case 8: UndoCommand->GetData(fData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pPlane->m_lstStartV, fData); } else { pPlane->m_lstStartV.Erase(UndoCommand->GetFrame()); } break; case 9: UndoCommand->GetData(fData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pPlane->m_lstTexFrame, fData); } else { pPlane->m_lstTexFrame.Erase(UndoCommand->GetFrame()); } break; } SetKeyInfo(); } void CCylinderPage::Undo(CCommand *UndoCommand) { CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditCylinder *pCylinder = (CX3DEffectEditCylinder *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetFindEditObject(UndoCommand->GetUID()); if(!pCylinder) return; vector3 vecData; quaternion quatData; color lData; float fData; switch(UndoCommand->GetListKind()) { case 0: UndoCommand->GetData(vecData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pCylinder->m_lstCenter, vecData); } else { pCylinder->m_lstCenter.Erase(UndoCommand->GetFrame()); } break; case 1: UndoCommand->GetData(quatData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pCylinder->m_lstAxis, quatData); } else { pCylinder->m_lstAxis.Erase(UndoCommand->GetFrame()); } break; case 2: UndoCommand->GetData(lData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pCylinder->m_lstColor, lData); } else { pCylinder->m_lstColor.Erase(UndoCommand->GetFrame()); } break; case 3: UndoCommand->GetData(fData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pCylinder->m_lstUpperHeight, fData); } else { pCylinder->m_lstUpperHeight.Erase(UndoCommand->GetFrame()); } break; case 4: UndoCommand->GetData(fData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pCylinder->m_lstLowerHeight, fData); } else { pCylinder->m_lstLowerHeight.Erase(UndoCommand->GetFrame()); } break; case 5: UndoCommand->GetData(fData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pCylinder->m_lstUpperRadius, fData); } else { pCylinder->m_lstUpperRadius.Erase(UndoCommand->GetFrame()); } break; case 6: UndoCommand->GetData(fData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pCylinder->m_lstLowerRadius, fData); } else { pCylinder->m_lstLowerRadius.Erase(UndoCommand->GetFrame()); } break; case 7: UndoCommand->GetData(fData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pCylinder->m_lstTileU, fData); } else { pCylinder->m_lstTileU.Erase(UndoCommand->GetFrame()); } break; case 8: UndoCommand->GetData(fData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pCylinder->m_lstTileV, fData); } else { pCylinder->m_lstTileV.Erase(UndoCommand->GetFrame()); } break; case 9: UndoCommand->GetData(fData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pCylinder->m_lstStartU, fData); } else { pCylinder->m_lstStartU.Erase(UndoCommand->GetFrame()); } break; case 10: UndoCommand->GetData(fData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pCylinder->m_lstStartV, fData); } else { pCylinder->m_lstStartV.Erase(UndoCommand->GetFrame()); } break; case 11: UndoCommand->GetData(fData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pCylinder->m_lstTexFrame, fData); } else { pCylinder->m_lstTexFrame.Erase(UndoCommand->GetFrame()); } break; } SetKeyInfo(); } void CParticlePage::Undo(CCommand *UndoCommand) { CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditParticle *pParticle = (CX3DEffectEditParticle *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetFindEditObject(UndoCommand->GetUID()); if(!pParticle) return; vector3 vecData; quaternion quatData; color lData; float fData; switch(UndoCommand->GetListKind()) { case 0: UndoCommand->GetData(vecData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pParticle->m_lstCenter, vecData); } else { pParticle->m_lstCenter.Erase(UndoCommand->GetFrame()); } break; case 1: UndoCommand->GetData(quatData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pParticle->m_lstAxis, quatData); } else { pParticle->m_lstAxis.Erase(UndoCommand->GetFrame()); } break; case 2: UndoCommand->GetData(lData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pParticle->m_lstColor, lData); } else { pParticle->m_lstColor.Erase(UndoCommand->GetFrame()); } break; case 3: UndoCommand->GetData(fData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pParticle->m_lstAmount, fData); } else { pParticle->m_lstAmount.Erase(UndoCommand->GetFrame()); } break; case 4: UndoCommand->GetData(fData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pParticle->m_lstAlpha, fData); } else { pParticle->m_lstAlpha.Erase(UndoCommand->GetFrame()); } break; case 5: UndoCommand->GetData(fData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pParticle->m_lstPower, fData); } else { pParticle->m_lstPower.Erase(UndoCommand->GetFrame()); } break; case 6: UndoCommand->GetData(fData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pParticle->m_lstAngle, fData); } else { pParticle->m_lstAngle.Erase(UndoCommand->GetFrame()); } break; case 7: UndoCommand->GetData(vecData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pParticle->m_lstEForce, vecData); } else { pParticle->m_lstEForce.Erase(UndoCommand->GetFrame()); } break; case 8: UndoCommand->GetData(quatData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pParticle->m_lstDirection, quatData); } else { pParticle->m_lstDirection.Erase(UndoCommand->GetFrame()); } break; case 9: UndoCommand->GetData(fData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pParticle->m_lstWidth, fData); } else { pParticle->m_lstWidth.Erase(UndoCommand->GetFrame()); } break; case 10: UndoCommand->GetData(fData); if(UndoCommand->GetCommand() == COMMAND_NEWDATA || UndoCommand->GetCommand() == COMMAND_DELKEY) { SetKey(UndoCommand->GetFrame(), pParticle->m_lstHeight, fData); } else { pParticle->m_lstHeight.Erase(UndoCommand->GetFrame()); } break; } SetKeyInfo(); } void CParticlePage::InitValue() { m_strTexture = _T(""); m_dwStartFrame = 1; m_dwEndFrame = 30; m_fRotation = 0.0f; m_fTexSpeed = 1.0f; m_fLifetime = 25.0f; m_fLifetimeSeed = 0.0f; m_fPowerSeed = 0.0f; m_fRadius = 0.0f; m_fVolX = 0.0f; m_fVolY = 0.0f; m_fVolZ = 0.0f; m_fInnerRadius = 0.0f; // m_fAutoTime = 0.0f; ((CButton *)(GetDlgItem(IDC_NOVOLUME)))->SetCheck(1); OnNovolume(); // ((CButton *)(GetDlgItem(IDC_SCENARIO)))->SetCheck(1); // OnScenario(); m_edtAxisX.SetValue(0.0f); m_edtAxisX.DisableBkColor(); m_edtAxisY.SetValue(0.0f); m_edtAxisY.DisableBkColor(); m_edtAxisZ.SetValue(0.0f); m_edtAxisZ.DisableBkColor(); m_edtCenX.SetValue(0.0f); m_edtCenX.DisableBkColor(); m_edtCenY.SetValue(0.0f); m_edtCenY.DisableBkColor(); m_edtCenZ.SetValue(0.0f); m_edtCenZ.DisableBkColor(); m_edtAlpha.SetValue((unsigned char)255); m_edtAlpha.DisableBkColor(); m_edtAmount.SetValue(1.0f); m_edtAmount.DisableBkColor(); m_edtAngle.SetValue(0.0f); m_edtAngle.DisableBkColor(); m_edtDirX.SetValue(0.0f); m_edtDirX.DisableBkColor(); m_edtDirY.SetValue(0.0f); m_edtDirY.DisableBkColor(); m_edtDirZ.SetValue(0.0f); m_edtDirZ.DisableBkColor(); m_edtEForceX.SetValue(0.0f); m_edtEForceX.DisableBkColor(); m_edtEForceY.SetValue(0.0f); m_edtEForceY.DisableBkColor(); m_edtEForceZ.SetValue(0.0f); m_edtEForceZ.DisableBkColor(); m_edtWidth.SetValue(1.0f); m_edtWidth.DisableBkColor(); m_edtHeight.SetValue(1.0f); m_edtHeight.DisableBkColor(); m_edtPower.SetValue(0.0f); m_edtPower.DisableBkColor(); m_edtSceAlpha.SetValue((unsigned char)255); m_edtSceAlpha.DisableBkColor(); m_edtColB.SetValue((unsigned char)255); m_edtColB.DisableBkColor(); m_edtColG.SetValue((unsigned char)255); m_edtColG.DisableBkColor(); m_edtColR.SetValue((unsigned char)255); m_edtColR.DisableBkColor(); } void CCylinderPage::InitValue() { m_dwEndFrame = 30; m_dwSidePlane = 3; m_dwStartFrame = 1; m_strTexture = _T(""); ((CButton *)(GetDlgItem(IDC_TEXSTATIC)))->SetCheck(1); OnTexstatic(); m_edtAxisX.SetValue(0.0f); m_edtAxisX.DisableBkColor(); m_edtAxisY.SetValue(0.0f); m_edtAxisY.DisableBkColor(); m_edtAxisZ.SetValue(0.0f); m_edtAxisZ.DisableBkColor(); m_edtCenX.SetValue(0.0f); m_edtCenX.DisableBkColor(); m_edtCenY.SetValue(0.0f); m_edtCenY.DisableBkColor(); m_edtCenZ.SetValue(0.0f); m_edtCenZ.DisableBkColor(); m_edtUpperHeight.SetValue(2.0f); m_edtUpperHeight.DisableBkColor(); m_edtUpperRadius.SetValue(3.0f); m_edtUpperRadius.DisableBkColor(); m_edtLowerHeight.SetValue(2.0f); m_edtLowerHeight.DisableBkColor(); m_edtLowerRadius.SetValue(3.0f); m_edtLowerRadius.DisableBkColor(); m_edtStartU.SetValue(0.0f); m_edtStartU.DisableBkColor(); m_edtStartV.SetValue(0.0f); m_edtStartV.DisableBkColor(); m_edtTileU.SetValue(1.0f); m_edtTileU.DisableBkColor(); m_edtTileV.SetValue(1.0f); m_edtTileV.DisableBkColor(); m_edtAlpha.SetValue((unsigned char)255); m_edtAlpha.DisableBkColor(); m_edtColB.SetValue((unsigned char)255); m_edtColB.DisableBkColor(); m_edtColG.SetValue((unsigned char)255); m_edtColG.DisableBkColor(); m_edtColR.SetValue((unsigned char)255); m_edtColR.DisableBkColor(); m_edtTexFrame.SetValue((unsigned long)0); m_edtTexFrame.DisableBkColor(); } void CBillboardPage::Redo(CCommand *RedoCommand) { CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditBillboard *pBillboard = (CX3DEffectEditBillboard *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetFindEditObject(RedoCommand->GetUID()); if(!pBillboard) return; vector3 vecData; quaternion quatData; color lData; float fData; switch(RedoCommand->GetListKind()) { case 0: RedoCommand->GetData(vecData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pBillboard->m_lstCenter.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pBillboard->m_lstCenter, vecData); } break; case 1: RedoCommand->GetData(quatData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pBillboard->m_lstAxis.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pBillboard->m_lstAxis, quatData); } break; case 2: RedoCommand->GetData(lData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pBillboard->m_lstColor.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pBillboard->m_lstColor, lData); } break; case 3: RedoCommand->GetData(fData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pBillboard->m_lstWidth.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pBillboard->m_lstWidth, fData); } break; case 4: RedoCommand->GetData(fData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pBillboard->m_lstHeight.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pBillboard->m_lstHeight, fData); } break; case 5: RedoCommand->GetData(fData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pBillboard->m_lstTileU.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pBillboard->m_lstTileU, fData); } break; case 6: RedoCommand->GetData(fData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pBillboard->m_lstTileV.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pBillboard->m_lstTileV, fData); } break; case 7: RedoCommand->GetData(fData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pBillboard->m_lstStartU.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pBillboard->m_lstStartU, fData); } break; case 8: RedoCommand->GetData(fData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pBillboard->m_lstStartV.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pBillboard->m_lstStartV, fData); } break; case 9: RedoCommand->GetData(fData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pBillboard->m_lstTexFrame.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pBillboard->m_lstTexFrame, fData); } break; } SetKeyInfo(); } void CCylinderPage::Redo(CCommand *RedoCommand) { CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditCylinder *pCylinder = (CX3DEffectEditCylinder *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetFindEditObject(RedoCommand->GetUID()); if(!pCylinder) return; vector3 vecData; quaternion quatData; color lData; float fData; switch(RedoCommand->GetListKind()) { case 0: RedoCommand->GetData(vecData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pCylinder->m_lstCenter.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pCylinder->m_lstCenter, vecData); } break; case 1: RedoCommand->GetData(quatData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pCylinder->m_lstAxis.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pCylinder->m_lstAxis, quatData); } break; case 2: RedoCommand->GetData(lData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pCylinder->m_lstColor.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pCylinder->m_lstColor, lData); } break; case 3: RedoCommand->GetData(fData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pCylinder->m_lstUpperHeight.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pCylinder->m_lstUpperHeight, fData); } break; case 4: RedoCommand->GetData(fData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pCylinder->m_lstLowerHeight.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pCylinder->m_lstLowerHeight, fData); } break; case 5: RedoCommand->GetData(fData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pCylinder->m_lstUpperRadius.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pCylinder->m_lstUpperRadius, fData); } break; case 6: RedoCommand->GetData(fData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pCylinder->m_lstLowerRadius.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pCylinder->m_lstLowerRadius, fData); } break; case 7: RedoCommand->GetData(fData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pCylinder->m_lstTileU.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pCylinder->m_lstTileU, fData); } break; case 8: RedoCommand->GetData(fData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pCylinder->m_lstTileV.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pCylinder->m_lstTileV, fData); } break; case 9: RedoCommand->GetData(fData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pCylinder->m_lstStartU.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pCylinder->m_lstStartU, fData); } break; case 10: RedoCommand->GetData(fData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pCylinder->m_lstStartV.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pCylinder->m_lstStartV, fData); } break; case 11: RedoCommand->GetData(fData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pCylinder->m_lstTexFrame.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pCylinder->m_lstTexFrame, fData); } break; } SetKeyInfo(); } void CParticlePage::Redo(CCommand *RedoCommand) { CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditParticle *pParticle = (CX3DEffectEditParticle *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetFindEditObject(RedoCommand->GetUID()); if(!pParticle) return; vector3 vecData; quaternion quatData; color lData; float fData; switch(RedoCommand->GetListKind()) { case 0: RedoCommand->GetData(vecData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pParticle->m_lstCenter.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pParticle->m_lstCenter, vecData); } break; case 1: RedoCommand->GetData(quatData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pParticle->m_lstAxis.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pParticle->m_lstAxis, quatData); } break; case 2: RedoCommand->GetData(lData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pParticle->m_lstColor.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pParticle->m_lstColor, lData); } break; case 3: RedoCommand->GetData(fData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pParticle->m_lstAmount.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pParticle->m_lstAmount, fData); } break; case 4: RedoCommand->GetData(fData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pParticle->m_lstAlpha.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pParticle->m_lstAlpha, fData); } break; case 5: RedoCommand->GetData(fData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pParticle->m_lstPower.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pParticle->m_lstPower, fData); } break; case 6: RedoCommand->GetData(fData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pParticle->m_lstAngle.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pParticle->m_lstAngle, fData); } break; case 7: RedoCommand->GetData(vecData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pParticle->m_lstEForce.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pParticle->m_lstEForce, vecData); } break; case 8: RedoCommand->GetData(quatData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pParticle->m_lstDirection.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pParticle->m_lstDirection, quatData); } break; case 9: RedoCommand->GetData(fData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pParticle->m_lstWidth.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pParticle->m_lstWidth, fData); } break; case 10: RedoCommand->GetData(fData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pParticle->m_lstHeight.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pParticle->m_lstHeight, fData); } break; } SetKeyInfo(); } void CPlanePage::Redo(CCommand *RedoCommand) { CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditPlane *pPlane = (CX3DEffectEditPlane *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetFindEditObject(RedoCommand->GetUID()); if(!pPlane) return; vector3 vecData; quaternion quatData; color lData; float fData; switch(RedoCommand->GetListKind()) { case 0: RedoCommand->GetData(vecData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pPlane->m_lstCenter.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pPlane->m_lstCenter, vecData); } break; case 1: RedoCommand->GetData(quatData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pPlane->m_lstAxis.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pPlane->m_lstAxis, quatData); } break; case 2: RedoCommand->GetData(lData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pPlane->m_lstColor.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pPlane->m_lstColor, lData); } break; case 3: RedoCommand->GetData(fData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pPlane->m_lstWidth.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pPlane->m_lstWidth, fData); } break; case 4: RedoCommand->GetData(fData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pPlane->m_lstHeight.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pPlane->m_lstHeight, fData); } break; case 5: RedoCommand->GetData(fData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pPlane->m_lstTileU.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pPlane->m_lstTileU, fData); } break; case 6: RedoCommand->GetData(fData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pPlane->m_lstTileV.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pPlane->m_lstTileV, fData); } break; case 7: RedoCommand->GetData(fData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pPlane->m_lstStartU.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pPlane->m_lstStartU, fData); } break; case 8: RedoCommand->GetData(fData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pPlane->m_lstStartV.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pPlane->m_lstStartV, fData); } break; case 9: RedoCommand->GetData(fData); if(RedoCommand->GetCommand() == COMMAND_DELKEY) { pPlane->m_lstTexFrame.Erase(RedoCommand->GetFrame()); } else { SetKey(RedoCommand->GetFrame(), pPlane->m_lstTexFrame, fData); } break; } SetKeyInfo(); } void CBillboardPage::OnAxisaligned() { // TODO: Add your control notification handler code here UpdateData(); CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditBillboard *pBillboard = (CX3DEffectEditBillboard *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(1, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); if(!pBillboard) return; pBillboard->SetAxisAligned(m_bAxisAligned); } void CParticlePage::OnContinuous() { // TODO: Add your control notification handler code here UpdateData(); } void CBillboardPage::OnSelchangeCbsrc() { // TODO: Add your control notification handler code here CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditBillboard *pBillboard = (CX3DEffectEditBillboard *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(1, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); if(pBillboard) { pBillboard->SetSrcBlending(D3DBLEND_ZERO + m_cbSrc.GetCurSel()); } } void CBillboardPage::OnSelchangeCbdest() { // TODO: Add your control notification handler code here CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditBillboard *pBillboard = (CX3DEffectEditBillboard *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(1, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); if(pBillboard) { pBillboard->SetDestBlending(D3DBLEND_ZERO + m_cbDest.GetCurSel()); } } void CBillboardPage::OnSelchangeCbaddressu() { // TODO: Add your control notification handler code here } void CBillboardPage::OnSelchangeCbaddressv() { // TODO: Add your control notification handler code here } void CParticlePage::OnSelchangeCbsrc() { // TODO: Add your control notification handler code here CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditParticle *pParticle = (CX3DEffectEditParticle *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(0, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); if(pParticle) { pParticle->SetSrcBlending(D3DBLEND_ZERO + m_cbSrc.GetCurSel()); } } void CParticlePage::OnSelchangeCbdest() { // TODO: Add your control notification handler code here CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditParticle *pParticle = (CX3DEffectEditParticle *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(0, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); if(pParticle) { pParticle->SetDestBlending(D3DBLEND_ZERO + m_cbDest.GetCurSel()); } } void CParticlePage::OnSelchangeCbaddressu() { // TODO: Add your control notification handler code here } void CParticlePage::OnSelchangeCbaddressv() { // TODO: Add your control notification handler code here } void CCylinderPage::OnSelchangeCbsrc() { // TODO: Add your control notification handler code here CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditCylinder *pCylinder = (CX3DEffectEditCylinder *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(2, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); if(pCylinder) { pCylinder->SetSrcBlending(D3DBLEND_ZERO + m_cbSrc.GetCurSel()); } } void CCylinderPage::OnSelchangeCbdest() { // TODO: Add your control notification handler code here CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditCylinder *pCylinder = (CX3DEffectEditCylinder *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(2, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); if(pCylinder) { pCylinder->SetDestBlending(D3DBLEND_ZERO + m_cbDest.GetCurSel()); } } void CCylinderPage::OnSelchangeCbaddressu() { // TODO: Add your control notification handler code here } void CCylinderPage::OnSelchangeCbaddressv() { // TODO: Add your control notification handler code here } void CPlanePage::OnSelchangeCbsrc() { // TODO: Add your control notification handler code here CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectPlane *pPlane = (CX3DEffectPlane *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(3, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); if(pPlane) { pPlane->SetSrcBlending(D3DBLEND_ZERO + m_cbSrc.GetCurSel()); } } void CPlanePage::OnSelchangeCbdest() { // TODO: Add your control notification handler code here CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectPlane *pPlane = (CX3DEffectPlane *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(3, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); if(pPlane) { pPlane->SetDestBlending(D3DBLEND_ZERO + m_cbDest.GetCurSel()); } } void CPlanePage::OnSelchangeCbaddressu() { // TODO: Add your control notification handler code here } void CPlanePage::OnSelchangeCbaddressv() { // TODO: Add your control notification handler code here }