Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
380 lines
10 KiB
C++
380 lines
10 KiB
C++
// KeyPage.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "resource.h"
|
|
#include "KeyPage.h"
|
|
|
|
#include "MainFrm.h"
|
|
#include "EffectEditorDoc.h"
|
|
#include "EffectEditorView.h"
|
|
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char BASED_CODE THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
IMPLEMENT_DYNCREATE(CKeyPage, CPropertyPage)
|
|
IMPLEMENT_DYNCREATE(CScenarioPage, CPropertyPage)
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CKeyPage property page
|
|
|
|
CKeyPage::CKeyPage() : CPropertyPage(CKeyPage::IDD)
|
|
{
|
|
float fFrameTick;
|
|
CMainFrame *mf = (CMainFrame*)AfxGetApp()->m_pMainWnd;
|
|
//{{AFX_DATA_INIT(CKeyPage)
|
|
m_dwPreFrame = 1;
|
|
m_dwTotalFrame = 30;
|
|
m_fFrameSec = 40.0f;
|
|
|
|
m_bLoop = FALSE;
|
|
m_cBlue = 0;
|
|
m_cGreen = 0;
|
|
m_cRed = 0;
|
|
m_fIncFrame = 1.0f;
|
|
m_WavName.Empty();
|
|
m_pSbuffer = NULL;
|
|
m_pSmanager = NULL;
|
|
//}}AFX_DATA_INIT
|
|
fFrameTick = 1000 / m_fFrameSec;
|
|
((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->SetFrameTick((unsigned long) fFrameTick);
|
|
}
|
|
|
|
CKeyPage::~CKeyPage()
|
|
{
|
|
}
|
|
|
|
void CKeyPage::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CPropertyPage::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CKeyPage)
|
|
DDX_Control(pDX, IDC_POINTSLIDER, m_sldPoint);
|
|
DDX_Control(pDX, IDC_KEYSLIDER, m_sldKeyFrame);
|
|
DDX_Text(pDX, IDC_PREFRAME, m_dwPreFrame);
|
|
DDX_Text(pDX, IDC_TOTALFRAME, m_dwTotalFrame);
|
|
DDX_Text(pDX, IDC_FRAMESEC, m_fFrameSec);
|
|
DDX_Check(pDX, IDC_LOOP, m_bLoop);
|
|
DDX_Text(pDX, IDC_BLUE, m_cBlue);
|
|
DDV_MinMaxByte(pDX, m_cBlue, 0, 255);
|
|
DDX_Text(pDX, IDC_GREEN, m_cGreen);
|
|
DDV_MinMaxByte(pDX, m_cGreen, 0, 255);
|
|
DDX_Text(pDX, IDC_RED, m_cRed);
|
|
DDV_MinMaxByte(pDX, m_cRed, 0, 255);
|
|
DDX_Text(pDX, IDC_INCFRAME, m_fIncFrame);
|
|
DDX_Text(pDX, IDC_WAVNAME, m_WavName);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CKeyPage, CPropertyPage)
|
|
//{{AFX_MSG_MAP(CKeyPage)
|
|
ON_WM_HSCROLL()
|
|
ON_BN_CLICKED(IDC_PLAY, OnPlay)
|
|
ON_BN_CLICKED(IDC_LOOP, OnLoop)
|
|
ON_BN_CLICKED(IDC_STOP, OnStop)
|
|
ON_BN_CLICKED(IDC_WAV, OnWav)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CScenarioPage property page
|
|
|
|
CScenarioPage::CScenarioPage() : CPropertyPage(CScenarioPage::IDD)
|
|
{
|
|
//{{AFX_DATA_INIT(CScenarioPage)
|
|
m_fPrePro = 1.0f;
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
CScenarioPage::~CScenarioPage()
|
|
{
|
|
}
|
|
|
|
void CScenarioPage::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CPropertyPage::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CScenarioPage)
|
|
DDX_Control(pDX, IDC_KEYSLIDER, m_sldKeyFrame);
|
|
DDX_Text(pDX, IDC_PREPRO, m_fPrePro);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CScenarioPage, CPropertyPage)
|
|
//{{AFX_MSG_MAP(CScenarioPage)
|
|
ON_WM_HSCROLL()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
|
|
BOOL CKeyPage::OnInitDialog()
|
|
{
|
|
CPropertyPage::OnInitDialog();
|
|
|
|
// TODO: Add extra initialization here
|
|
m_sldKeyFrame.SetRange(0, 29);
|
|
m_sldKeyFrame.SetPos(0);
|
|
|
|
m_sldPoint.Init(0, 29, 30, NULL, MLTSLD_DISPLAY_TOOLTIPS | MLTSLD_INTEGERS);
|
|
|
|
// CSoundManager & smanager = CSoundManager::GetInstance();
|
|
// m_pSmanager = &smanager;
|
|
// m_pSmanager->Create(GetSafeHwnd());
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
void CKeyPage::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
|
|
{
|
|
// TODO: Add your message handler code here and/or call default
|
|
if(pScrollBar == (CScrollBar *)&m_sldKeyFrame)
|
|
{
|
|
nPos = m_sldKeyFrame.GetPos();
|
|
m_sldKeyFrame.SetPos(nPos);
|
|
|
|
m_dwPreFrame = nPos + 1;
|
|
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
|
((CEffectEditorView*)mf->GetActiveView())->m_dwPreFrame = m_dwPreFrame - 1;
|
|
if(0xFFFFFFFF != ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect)
|
|
{
|
|
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
|
CX3DEffectBase *pEffect = (CX3DEffectBase *)((CX3DEffect *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect)->GetEffect(((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect);
|
|
switch(pEffect->GetEffectKind())
|
|
{
|
|
case EFFECT_PARTICLE:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page1.SetKeyInfo();
|
|
break;
|
|
|
|
case EFFECT_BILLBOARD:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page2.SetKeyInfo();
|
|
break;
|
|
|
|
case EFFECT_CYLINDER:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page3.SetKeyInfo();
|
|
break;
|
|
|
|
case EFFECT_PLANE:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page4.SetKeyInfo();
|
|
break;
|
|
|
|
case EFFECT_SPHERE:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page5.SetKeyInfo();
|
|
break;
|
|
|
|
case EFFECT_MESH:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page6.SetKeyInfo();
|
|
break;
|
|
}
|
|
}
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
CPropertyPage::OnHScroll(nSBCode, nPos, pScrollBar);
|
|
}
|
|
|
|
BOOL CKeyPage::PreTranslateMessage(MSG* pMsg)
|
|
{
|
|
// TODO: Add your specialized code here and/or call the base class
|
|
if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
|
|
{
|
|
CMainFrame *mf = (CMainFrame*)AfxGetApp()->m_pMainWnd;
|
|
float fFrameTick;
|
|
unsigned long temp;
|
|
|
|
UpdateData();
|
|
switch(::GetDlgCtrlID(pMsg->hwnd))
|
|
{
|
|
case IDC_TOTALFRAME:
|
|
((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->SetMaxFrame(m_dwTotalFrame);
|
|
|
|
temp = m_sldKeyFrame.GetPos();
|
|
m_sldKeyFrame.SetRange(0, m_dwTotalFrame - 1);
|
|
m_sldPoint.SetRanges(0, m_dwTotalFrame - 1);
|
|
if(temp > (m_dwTotalFrame - 1))
|
|
{
|
|
m_sldKeyFrame.SetPos(0);
|
|
m_dwPreFrame = m_sldKeyFrame.GetPos() + 1;
|
|
UpdateData(FALSE);
|
|
|
|
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
|
((CEffectEditorView*)mf->GetActiveView())->m_dwPreFrame = m_dwPreFrame - 1;
|
|
}
|
|
UpdateData(FALSE);
|
|
break;
|
|
|
|
case IDC_FRAMESEC:
|
|
fFrameTick = 1000 / m_fFrameSec;
|
|
((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->SetFrameTick((unsigned long) fFrameTick);
|
|
break;
|
|
|
|
case IDC_INCFRAME:
|
|
((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->SetIncFrame(m_fIncFrame);
|
|
break;
|
|
|
|
case IDC_RED:
|
|
case IDC_GREEN:
|
|
case IDC_BLUE:
|
|
((CEffectEditorView*)mf->GetActiveView())->m_cBackRed = m_cRed;
|
|
((CEffectEditorView*)mf->GetActiveView())->m_cBackGreen = m_cGreen;
|
|
((CEffectEditorView*)mf->GetActiveView())->m_cBackBlue = m_cBlue;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return CPropertyPage::PreTranslateMessage(pMsg);
|
|
}
|
|
|
|
void CKeyPage::OnPlay()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
|
((CEffectEditorView*)mf->GetActiveView())->m_fPlayFrame = 0.0f;
|
|
((CEffectEditorView*)mf->GetActiveView())->m_dwOldTick = GetTickCount() - 33;
|
|
((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->SetFrame(0.0f);
|
|
((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->SetPlay(TRUE);
|
|
// ((CEffectEditorView*)mf->GetActiveView())->m_pChr->SetMotion(((CEffectEditorView*)mf->GetActiveView())->m_strMotion);
|
|
// ((CEffectEditorView*)mf->GetActiveView())->m_pChr->SetMotionSheet(((CEffectEditorView*)mf->GetActiveView())->m_strWeaponSeet);
|
|
//wav file name input
|
|
/* if(!m_WavName.IsEmpty()) {
|
|
|
|
CSoundBuffer & sbuffer = m_pSmanager->GetBuffer(m_WavName,false,false);
|
|
m_pSbuffer = &sbuffer;
|
|
|
|
sbuffer.Play((bool)m_bLoop);
|
|
|
|
}*/
|
|
}
|
|
|
|
void CKeyPage::OnLoop()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
UpdateData();
|
|
|
|
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
|
((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->SetLoop(m_bLoop);
|
|
}
|
|
|
|
void CKeyPage::OnStop()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
|
((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->SetPlay(FALSE);
|
|
if(m_pSbuffer) {
|
|
m_pSbuffer->Destroy();
|
|
m_pSbuffer = NULL;
|
|
}
|
|
}
|
|
|
|
BOOL CScenarioPage::OnInitDialog()
|
|
{
|
|
CPropertyPage::OnInitDialog();
|
|
|
|
// TODO: Add extra initialization here
|
|
m_sldKeyFrame.SetRange(0, 99);
|
|
m_sldKeyFrame.SetPos(0);
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
void CScenarioPage::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
|
|
{
|
|
// TODO: Add your message handler code here and/or call default
|
|
if(pScrollBar == (CScrollBar *)&m_sldKeyFrame)
|
|
{
|
|
nPos = m_sldKeyFrame.GetPos();
|
|
m_sldKeyFrame.SetPos(nPos);
|
|
|
|
m_fPrePro = nPos + 1;
|
|
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
|
|
|
if(0xFFFFFFFF != ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect)
|
|
{
|
|
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
|
CX3DEffectBase *pEffect = (CX3DEffectBase *)((CX3DEffect *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect)->GetEffect(((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect);
|
|
switch(pEffect->GetEffectKind())
|
|
{
|
|
case 0:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page1.SetKeyInfo();
|
|
break;
|
|
}
|
|
}
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
CPropertyPage::OnHScroll(nSBCode, nPos, pScrollBar);
|
|
}
|
|
|
|
void CKeyPage::SetKeyFrame(unsigned long dwFrame)
|
|
{
|
|
m_sldKeyFrame.SetPos(dwFrame);
|
|
|
|
m_dwPreFrame = dwFrame + 1;
|
|
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
|
((CEffectEditorView*)mf->GetActiveView())->m_dwPreFrame = m_dwPreFrame - 1;
|
|
if(0xFFFFFFFF != ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect)
|
|
{
|
|
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
|
CX3DEffectBase *pEffect = (CX3DEffectBase *)((CX3DEffect *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect)->GetEffect(((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect);
|
|
switch(pEffect->GetEffectKind())
|
|
{
|
|
case 0:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page1.SetKeyInfo();
|
|
break;
|
|
|
|
case 1:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page2.SetKeyInfo();
|
|
break;
|
|
|
|
case 2:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page3.SetKeyInfo();
|
|
break;
|
|
|
|
case 3:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page4.SetKeyInfo();
|
|
break;
|
|
|
|
case 4:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page5.SetKeyInfo();
|
|
break;
|
|
}
|
|
}
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
void CKeyPage::SetMaxFrame(unsigned long dwTotalFrame)
|
|
{
|
|
m_dwTotalFrame = dwTotalFrame;
|
|
m_sldPoint.SetRanges(0, m_dwTotalFrame - 1);
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
void CKeyPage::SetMarker(unsigned long dwMarker)
|
|
{
|
|
m_sldPoint.SetMaker(dwMarker);
|
|
}
|
|
|
|
void CKeyPage::ClearMarker()
|
|
{
|
|
m_sldPoint.ResetMarkers();
|
|
}
|
|
|
|
void CKeyPage::OnWav()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
CString strFilter = "Wave Files (*.wav)|*.wav|All Files (*.*)|*.*||";
|
|
|
|
CFileDialog filedia(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strFilter,this);
|
|
|
|
filedia.DoModal();
|
|
m_WavName=filedia.GetFileName();
|
|
UpdateData(false);
|
|
}
|