Files
Client/GameTools/WORLDCREATOR/PageGCMDSMotionSheet.cpp
LGram16 dd97ddec92 Restructure repository to include all source folders
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>
2025-11-29 20:17:20 +09:00

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 );
}