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>
335 lines
9.0 KiB
C++
335 lines
9.0 KiB
C++
// PageGCMDSMotionSheet.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "worldcreator.h"
|
|
#include "PageGCMDSMotionSheet.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPageGCMDSMotionSheet property page
|
|
|
|
IMPLEMENT_DYNCREATE(CPageGCMDSMotionSheet, CPropertyPage)
|
|
|
|
CPageGCMDSMotionSheet::CPageGCMDSMotionSheet() : CPropertyPage(CPageGCMDSMotionSheet::IDD)
|
|
{
|
|
//{{AFX_DATA_INIT(CPageGCMDSMotionSheet)
|
|
//}}AFX_DATA_INIT
|
|
|
|
m_lLastApackColumnCount = 0;
|
|
|
|
m_rpGCMDS = NULL;
|
|
}
|
|
|
|
CPageGCMDSMotionSheet::~CPageGCMDSMotionSheet()
|
|
{
|
|
}
|
|
|
|
void CPageGCMDSMotionSheet::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CPropertyPage::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CPageGCMDSMotionSheet)
|
|
DDX_Control(pDX, IDC_LIST_CHREVENT, m_ctrlChrEvent);
|
|
DDX_Control(pDX, IDC_LIST_MOTLET, m_ctrlMotlet);
|
|
DDX_Control(pDX, IDC_TREE_MOTIONSHEET, m_ctrlMotionSheet);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CPageGCMDSMotionSheet, CPropertyPage)
|
|
//{{AFX_MSG_MAP(CPageGCMDSMotionSheet)
|
|
ON_WM_DESTROY()
|
|
ON_NOTIFY(TVN_SELCHANGED, IDC_TREE_MOTIONSHEET, OnSelchangedTreeMotionsheet)
|
|
ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST_MOTLET, OnColumnclickListMotlet)
|
|
ON_WM_SHOWWINDOW()
|
|
ON_WM_CONTEXTMENU()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPageGCMDSMotionSheet message handlers
|
|
|
|
BOOL CPageGCMDSMotionSheet::OnInitDialog()
|
|
{
|
|
CPropertyPage::OnInitDialog();
|
|
|
|
// TODO: Add extra initialization here
|
|
m_ImgTreeIcon.Create( IDB_TREEICON, 16, 2, RGB(255,255,255) );
|
|
m_ctrlMotionSheet.SetImageList( &m_ImgTreeIcon, TVSIL_NORMAL );
|
|
|
|
DWORD dwExtStyle;
|
|
|
|
dwExtStyle = m_ctrlMotlet.GetExtendedStyle();
|
|
dwExtStyle |= LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES;
|
|
m_ctrlMotlet.SetExtendedStyle( dwExtStyle );
|
|
m_ctrlMotlet.InsertColumn( 0, "", LVCFMT_LEFT, 20 );
|
|
m_ctrlMotlet.InsertColumn( 1, "È®·üÁ¡À¯µµ", LVCFMT_LEFT, 80 );
|
|
m_ctrlMotlet.SetColumnType( 0, GLCT_NORMAL );
|
|
|
|
dwExtStyle = m_ctrlChrEvent.GetExtendedStyle();
|
|
dwExtStyle |= LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES;
|
|
m_ctrlChrEvent.SetExtendedStyle( dwExtStyle );
|
|
m_ctrlChrEvent.InsertColumn( 0, "", LVCFMT_LEFT, 20 );
|
|
m_ctrlChrEvent.InsertColumn( 1, "ÁÖ À̺¥Æ®", LVCFMT_LEFT, 135 );
|
|
m_ctrlChrEvent.InsertColumn( 2, "º¸Á¶ À̺¥Æ®", LVCFMT_LEFT, 135 );
|
|
m_ctrlChrEvent.InsertColumn( 3, "¹ß»ýÈ®·ü(ºÐÀÚ)", LVCFMT_LEFT, 30 );
|
|
m_ctrlChrEvent.InsertColumn( 4, "¹ß»ýÈ®·ü(ºÐ¸ð)", LVCFMT_LEFT, 30 );
|
|
|
|
|
|
m_dlgEventKeyframeSlider.Create(this);
|
|
m_dlgEventKeyframeSlider.SetWindowPos( NULL, 0, 530, 0, 0, SWP_NOZORDER|SWP_NOSIZE );
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
void CPageGCMDSMotionSheet::UpdateDataByGCMDS( CZ3DGCMDS* pGCMDS )
|
|
{
|
|
char szTmp[100];
|
|
|
|
m_rpGCMDS = pGCMDS;
|
|
m_ctrlMotionSheet.SetGCMDS(m_rpGCMDS);
|
|
|
|
UpdateMotionSheetTree();
|
|
|
|
for(int i = m_lLastApackColumnCount; i >= 0; --i )
|
|
{
|
|
m_ctrlMotlet.DeleteColumn( i+1 );
|
|
}
|
|
|
|
m_lLastApackColumnCount = pGCMDS->GetAniHolderCount();
|
|
for( i = 0; i < m_lLastApackColumnCount; ++i )
|
|
{
|
|
sprintf( szTmp, "APack #%d", i );
|
|
m_ctrlMotlet.InsertColumn( i+1, szTmp, LVCFMT_LEFT, 140 );
|
|
}
|
|
m_ctrlMotlet.InsertColumn( i+1, "È®·üÁ¡À¯µµ", LVCFMT_LEFT, 80 );
|
|
|
|
UpdateMotletList( NULL );
|
|
UpdateEventList( NULL );
|
|
}
|
|
|
|
void CPageGCMDSMotionSheet::UpdateMotionSheetTree()
|
|
{
|
|
std::map<Z3DTOK, Z3DMOTIONSHEET*>* pmap;
|
|
std::map<Z3DTOK, Z3DMOTIONSHEET*>::iterator it;
|
|
|
|
std::map<Z3DMOTIONSHEET*, HTREEITEM> mapMotionSheet2TreeItem;
|
|
std::map<Z3DMOTIONSHEET*, HTREEITEM>::iterator itM2T;
|
|
|
|
m_ctrlMotionSheet.DeleteAllItems();
|
|
|
|
m_rpGCMDS->RetrieveMotionSheetList( pmap );
|
|
for( it = pmap->begin(); it != pmap->end(); ++it )
|
|
{
|
|
Z3DMOTIONSHEET* pSheet = it->second;
|
|
|
|
HTREEITEM hParent = NULL;
|
|
itM2T = mapMotionSheet2TreeItem.find( pSheet->rpParentSheet );
|
|
if( mapMotionSheet2TreeItem.end() != itM2T )
|
|
{
|
|
hParent = itM2T->second;
|
|
}
|
|
|
|
HTREEITEM hItem = m_ctrlMotionSheet.InsertItem(
|
|
TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_SELECTEDIMAGE,
|
|
g_TokSheetName.GetString( it->first ), 0, 0, 0, 0,
|
|
NULL, hParent, TVI_LAST );
|
|
|
|
mapMotionSheet2TreeItem[pSheet] = hItem;
|
|
|
|
// motion sheet ¿¡ ¼ÓÇÑ motlet ¾ÆÀÌÅÛµé Ãß°¡
|
|
std::map<Z3DTOK, Z3DMOTLET*> &mapTok2Motlet = pSheet->mapTok2Motlet;
|
|
std::map<Z3DTOK, Z3DMOTLET*>::iterator itT2M;
|
|
for( itT2M = mapTok2Motlet.begin(); itT2M != mapTok2Motlet.end(); ++itT2M )
|
|
{
|
|
m_ctrlMotionSheet.InsertItem(
|
|
TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_SELECTEDIMAGE,
|
|
g_TokMotionName.GetString(itT2M->first), 1, 1, 0, 0,
|
|
(long)(itT2M->second), hItem, TVI_LAST );
|
|
}
|
|
}
|
|
}
|
|
|
|
void CPageGCMDSMotionSheet::UpdateMotletList( Z3DMOTLET* pMotlet )
|
|
{
|
|
char szTmp[100];
|
|
|
|
m_ctrlMotlet.DeleteAllItems();
|
|
|
|
if( NULL == pMotlet )
|
|
{
|
|
return;
|
|
}
|
|
|
|
int i, j;
|
|
long lPrevProbSum = 0;
|
|
for( i = 0; i < pMotlet->lCount; ++i )
|
|
{
|
|
m_ctrlMotlet.InsertItem( i, itoa(i, szTmp, 10) );
|
|
|
|
for( j = 0; j < m_lLastApackColumnCount; ++j )
|
|
{
|
|
m_ctrlMotlet.SetItemText( i, j+1,
|
|
g_TokFileName.GetString( pMotlet->pTokArr[i].pArray[j] ) );
|
|
}
|
|
m_ctrlMotlet.SetItemText( i, j+1,
|
|
itoa(pMotlet->pProbabilityIdx[i] - lPrevProbSum, szTmp, 10) );
|
|
lPrevProbSum = pMotlet->pProbabilityIdx[i];
|
|
}
|
|
}
|
|
|
|
void CPageGCMDSMotionSheet::UpdateEventList( const char* szApackFileName )
|
|
{
|
|
m_ctrlChrEvent.DeleteAllItems();
|
|
|
|
if( NULL == szApackFileName )
|
|
{
|
|
m_dlgEventKeyframeSlider.ShowWindow(FALSE);
|
|
return;
|
|
}
|
|
|
|
Z3DTOK tokApackFileName = g_TokFileName.GetTOK(szApackFileName);
|
|
if( NULL_TOK == tokApackFileName )
|
|
{
|
|
m_dlgEventKeyframeSlider.ShowWindow(FALSE);
|
|
return;
|
|
}
|
|
|
|
CWnd* pCurrentFocus = GetFocus();
|
|
m_dlgEventKeyframeSlider.ShowWindow(TRUE);
|
|
pCurrentFocus->SetFocus();
|
|
|
|
std::map<Z3DTOK, std::vector<Z3D_EVENT_ELEMENT>* >* pmap;
|
|
std::map<Z3DTOK, std::vector<Z3D_EVENT_ELEMENT>* >::iterator it;
|
|
CZ3DChrEventGenerator::_RetrieveEventDataList(pmap);
|
|
|
|
if( pmap->end() == (it = pmap->find(tokApackFileName)) )
|
|
{
|
|
return;
|
|
}
|
|
|
|
std::vector<Z3D_EVENT_ELEMENT> &rvecEventElement = *(it->second);
|
|
|
|
for( int i = 0; i < rvecEventElement.size(); ++i )
|
|
{
|
|
//rvecEventElement[i] Z3D_EVENT_ELEMENT.
|
|
}
|
|
|
|
|
|
|
|
//m_ctrlChrEvent.InsertItem( 0, szApackFileName );
|
|
}
|
|
|
|
void CPageGCMDSMotionSheet::OnDestroy()
|
|
{
|
|
CPropertyPage::OnDestroy();
|
|
|
|
// TODO: Add your message handler code here
|
|
}
|
|
|
|
void CPageGCMDSMotionSheet::OnSelchangedTreeMotionsheet(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
|
|
// TODO: Add your control notification handler code here
|
|
UpdateMotletList( (Z3DMOTLET*)(pNMTreeView->itemNew.lParam) );
|
|
UpdateEventList( NULL );
|
|
|
|
*pResult = 0;
|
|
}
|
|
|
|
void CPageGCMDSMotionSheet::OnColumnclickListMotlet(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
|
|
// TODO: Add your control notification handler code here
|
|
|
|
if( 0 < pNMListView->iSubItem && pNMListView->iSubItem <= m_lLastApackColumnCount )
|
|
{
|
|
CString strApackFileName = m_ctrlMotlet.GetItemText( pNMListView->iItem, pNMListView->iSubItem );
|
|
UpdateEventList( strApackFileName );
|
|
}
|
|
else
|
|
{
|
|
UpdateEventList( NULL );
|
|
}
|
|
|
|
*pResult = 0;
|
|
}
|
|
|
|
void CPageGCMDSMotionSheet::OnShowWindow(BOOL bShow, UINT nStatus)
|
|
{
|
|
CPropertyPage::OnShowWindow(bShow, nStatus);
|
|
|
|
// TODO: Add your message handler code here
|
|
if( FALSE == bShow )
|
|
{
|
|
m_dlgEventKeyframeSlider.ShowWindow(FALSE);
|
|
}
|
|
}
|
|
|
|
void CPageGCMDSMotionSheet::OnContextMenu(CWnd* pWnd, CPoint point)
|
|
{
|
|
// TODO: Add your message handler code here
|
|
if( m_ctrlMotionSheet.GetSafeHwnd() == pWnd->GetSafeHwnd() )
|
|
{
|
|
// context menu for 'motion sheet tree'
|
|
OnMotionSheetTreeContextMenu(point);
|
|
}
|
|
else if( m_ctrlMotlet.GetSafeHwnd() == pWnd->GetSafeHwnd() )
|
|
{
|
|
// context menu for 'motlet list(Apack setting)'
|
|
}
|
|
else if( m_ctrlChrEvent.GetSafeHwnd() == pWnd->GetSafeHwnd() )
|
|
{
|
|
// context menu for 'ChrEvent list'
|
|
}
|
|
else
|
|
{
|
|
CPropertyPage::OnContextMenu( pWnd, point );
|
|
}
|
|
}
|
|
|
|
void CPageGCMDSMotionSheet::OnMotionSheetTreeContextMenu(CPoint point)
|
|
{
|
|
CMenu menuTmp;
|
|
CMenu* pContextMenu;
|
|
|
|
menuTmp.LoadMenu( IDR_MENU_GCMDS );
|
|
pContextMenu = menuTmp.GetSubMenu( 0 );
|
|
|
|
CPoint ptClient;
|
|
UINT uFlags;
|
|
ptClient = point;
|
|
m_ctrlMotionSheet.ScreenToClient( &ptClient );
|
|
HTREEITEM hItem = m_ctrlMotionSheet.HitTest( ptClient, &uFlags );
|
|
if( NULL == hItem )
|
|
{
|
|
pContextMenu->EnableMenuItem( ID_MENUITEM_ADDMOTIONSHEET, MF_ENABLED );
|
|
pContextMenu->EnableMenuItem( ID_MENUITEM_ADDMOTION, MF_GRAYED );
|
|
pContextMenu->EnableMenuItem( ID_MENUITEM_DELETEMOTION, MF_GRAYED );
|
|
}
|
|
else
|
|
{
|
|
long lData = m_ctrlMotionSheet.GetItemData( hItem );
|
|
if( 0 == lData )
|
|
{
|
|
pContextMenu->EnableMenuItem( ID_MENUITEM_ADDMOTIONSHEET, MF_ENABLED );
|
|
pContextMenu->EnableMenuItem( ID_MENUITEM_ADDMOTION, MF_ENABLED );
|
|
pContextMenu->EnableMenuItem( ID_MENUITEM_DELETEMOTION, MF_ENABLED );
|
|
}
|
|
else
|
|
{
|
|
pContextMenu->EnableMenuItem( ID_MENUITEM_ADDMOTIONSHEET, MF_GRAYED );
|
|
pContextMenu->EnableMenuItem( ID_MENUITEM_ADDMOTION, MF_GRAYED );
|
|
pContextMenu->EnableMenuItem( ID_MENUITEM_DELETEMOTION, MF_ENABLED );
|
|
}
|
|
}
|
|
|
|
pContextMenu->TrackPopupMenu( TPM_LEFTALIGN, point.x, point.y, this, NULL );
|
|
}
|