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>
This commit is contained in:
310
GameTools/WORLDCREATOR/PageGCMDSAttachmentSet.cpp
Normal file
310
GameTools/WORLDCREATOR/PageGCMDSAttachmentSet.cpp
Normal file
@@ -0,0 +1,310 @@
|
||||
// PageGCMDSAttachmentSet.cpp : implementation file
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "worldcreator.h"
|
||||
#include "PageGCMDSAttachmentSet.h"
|
||||
|
||||
#include "SimpleParser.h"
|
||||
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define new DEBUG_NEW
|
||||
#undef THIS_FILE
|
||||
static char THIS_FILE[] = __FILE__;
|
||||
#endif
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CPageGCMDSAttachmentSet property page
|
||||
|
||||
IMPLEMENT_DYNCREATE(CPageGCMDSAttachmentSet, CPropertyPage)
|
||||
|
||||
CPageGCMDSAttachmentSet::CPageGCMDSAttachmentSet() : CPropertyPage(CPageGCMDSAttachmentSet::IDD)
|
||||
{
|
||||
//{{AFX_DATA_INIT(CPageGCMDSAttachmentSet)
|
||||
// NOTE: the ClassWizard will add member initialization here
|
||||
//}}AFX_DATA_INIT
|
||||
|
||||
m_rpGCMDS = NULL;
|
||||
}
|
||||
|
||||
CPageGCMDSAttachmentSet::~CPageGCMDSAttachmentSet()
|
||||
{
|
||||
}
|
||||
|
||||
void CPageGCMDSAttachmentSet::DoDataExchange(CDataExchange* pDX)
|
||||
{
|
||||
CPropertyPage::DoDataExchange(pDX);
|
||||
//{{AFX_DATA_MAP(CPageGCMDSAttachmentSet)
|
||||
DDX_Control(pDX, IDC_COMBO_WEAPONTYPE, m_ctrlWeaponType);
|
||||
DDX_Control(pDX, IDC_EDIT_MESHNAME, m_ctrlMeshName);
|
||||
DDX_Control(pDX, IDC_EDIT_TEXTURENAME, m_ctrlTextureName);
|
||||
DDX_Control(pDX, IDC_TREE_ATTACHMENTSET, m_ctrlAttachmentTree);
|
||||
DDX_Control(pDX, IDC_LIST_HOLDER, m_ctrlHolderList);
|
||||
//}}AFX_DATA_MAP
|
||||
}
|
||||
|
||||
|
||||
BEGIN_MESSAGE_MAP(CPageGCMDSAttachmentSet, CPropertyPage)
|
||||
//{{AFX_MSG_MAP(CPageGCMDSAttachmentSet)
|
||||
ON_NOTIFY(TVN_SELCHANGED, IDC_TREE_ATTACHMENTSET, OnSelchangedTreeAttachmentset)
|
||||
//}}AFX_MSG_MAP
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CPageGCMDSAttachmentSet message handlers
|
||||
|
||||
BOOL CPageGCMDSAttachmentSet::OnInitDialog()
|
||||
{
|
||||
CPropertyPage::OnInitDialog();
|
||||
|
||||
// TODO: Add extra initialization here
|
||||
m_ImgTreeIcon.Create( IDB_TREEICON, 16, 2, RGB(255,255,255) );
|
||||
m_ctrlAttachmentTree.SetImageList( &m_ImgTreeIcon, TVSIL_NORMAL );
|
||||
|
||||
DWORD dwExtStyle;
|
||||
dwExtStyle = m_ctrlHolderList.GetExtendedStyle();
|
||||
dwExtStyle |= LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES;
|
||||
m_ctrlHolderList.SetExtendedStyle( dwExtStyle );
|
||||
m_ctrlHolderList.InsertColumn( 0, " ", LVCFMT_LEFT, 20 );
|
||||
m_ctrlHolderList.InsertColumn( 1, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 80 );
|
||||
m_ctrlHolderList.InsertColumn( 2, "POS", LVCFMT_LEFT, 80 );
|
||||
m_ctrlHolderList.InsertColumn( 3, "ROT", LVCFMT_LEFT, 80 );
|
||||
|
||||
return TRUE; // return TRUE unless you set the focus to a control
|
||||
// EXCEPTION: OCX Property Pages should return FALSE
|
||||
}
|
||||
|
||||
void CPageGCMDSAttachmentSet::UpdateDataByGCMDS( CZ3DGCMDS* pGCMDS )
|
||||
{
|
||||
if( NULL == pGCMDS )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
m_rpGCMDS = pGCMDS;
|
||||
|
||||
UpdateAttachmentTree();
|
||||
}
|
||||
|
||||
void CPageGCMDSAttachmentSet::UpdateAttachmentTree()
|
||||
{
|
||||
CSimpleParser parser;
|
||||
CString strIndexFileName(m_rpGCMDS->GetNameString());
|
||||
strIndexFileName += "_attachment_index.txt";
|
||||
|
||||
if( false == parser.OpenFile( strIndexFileName, NULL ) )
|
||||
{
|
||||
FILE* fp = fopen( strIndexFileName, "wt" );
|
||||
if( NULL == fp )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
fclose( fp ); // just creating empty file
|
||||
|
||||
parser.OpenFile( strIndexFileName, NULL ); // open the empty file with parser
|
||||
}
|
||||
|
||||
m_ctrlAttachmentTree.DeleteAllItems();
|
||||
|
||||
char* szToken;
|
||||
HTREEITEM hParent = NULL; // root
|
||||
HTREEITEM hItem;
|
||||
std::map<Z3DTOK, Z3DATTACHMENTINFO*>* pmap;
|
||||
|
||||
m_rpGCMDS->RetrieveAttachmentList( pmap );
|
||||
std::map<Z3DTOK, Z3DATTACHMENTINFO*> mapTok2AttachmentInfo( *pmap );
|
||||
std::map<Z3DTOK, Z3DATTACHMENTINFO*>::iterator it;
|
||||
|
||||
while( szToken = parser.GetNextToken() )
|
||||
{
|
||||
if( 0 == stricmp( szToken, "*" ) ) // begin with asterisk -> group name
|
||||
{
|
||||
szToken = parser.GetNextToken();
|
||||
|
||||
hItem = m_ctrlAttachmentTree.InsertItem(
|
||||
TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM,
|
||||
szToken, 0, 0, 0, 0, 0, hParent, TVI_LAST );
|
||||
hParent = hItem;
|
||||
}
|
||||
else if( 0 == stricmp( ";", szToken ) )
|
||||
{
|
||||
hParent = m_ctrlAttachmentTree.GetParentItem( hParent );
|
||||
}
|
||||
else
|
||||
{
|
||||
Z3DTOK tok = g_TokAttachmentName.GetTOK( szToken );
|
||||
it = mapTok2AttachmentInfo.find( tok );
|
||||
if( mapTok2AttachmentInfo.end() != it )
|
||||
{
|
||||
hItem = m_ctrlAttachmentTree.InsertItem(
|
||||
TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM,
|
||||
szToken, 1, 1, 0, 0, (LPARAM)(it->second), hParent, TVI_LAST );
|
||||
|
||||
mapTok2AttachmentInfo.erase( it );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for( it = mapTok2AttachmentInfo.begin(); it != mapTok2AttachmentInfo.end(); ++it )
|
||||
{
|
||||
hItem = m_ctrlAttachmentTree.InsertItem(
|
||||
TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM,
|
||||
g_TokAttachmentName.GetString(it->first), 1, 1, 0, 0, (LPARAM)(it->second),
|
||||
NULL, TVI_LAST );
|
||||
}
|
||||
|
||||
parser.Close();
|
||||
}
|
||||
|
||||
static void PrintIndent( const int n, FILE* fp )
|
||||
{
|
||||
for( int i = 0; i < n; ++i )
|
||||
{
|
||||
fprintf( fp, "\t" );
|
||||
}
|
||||
}
|
||||
|
||||
void CPageGCMDSAttachmentSet::Save()
|
||||
{
|
||||
if( NULL == m_rpGCMDS )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
FILE* fp;
|
||||
CString strIndexFileName(m_rpGCMDS->GetNameString());
|
||||
strIndexFileName += "_attachment_index.txt";
|
||||
|
||||
fp = fopen( strIndexFileName, "wt" );
|
||||
if( NULL == fp )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int nIndent = 0;
|
||||
HTREEITEM hItem = m_ctrlAttachmentTree.GetChildItem( NULL );
|
||||
HTREEITEM hParent = NULL;
|
||||
char szTmp[300];
|
||||
TVITEM tvitem;
|
||||
tvitem.mask = TVIF_PARAM | TVIF_TEXT;
|
||||
tvitem.pszText = szTmp;
|
||||
tvitem.cchTextMax = 300;
|
||||
|
||||
while( !(NULL == hItem && hParent == NULL) )
|
||||
{
|
||||
if( hItem )
|
||||
{
|
||||
tvitem.hItem = hItem;
|
||||
m_ctrlAttachmentTree.GetItem( &tvitem );
|
||||
if( 0 == tvitem.lParam ) // group name
|
||||
{
|
||||
PrintIndent( nIndent, fp );
|
||||
fprintf( fp, "*%s\n", szTmp );
|
||||
++nIndent;
|
||||
hParent = hItem;
|
||||
hItem = m_ctrlAttachmentTree.GetChildItem( hItem );
|
||||
}
|
||||
else // item name
|
||||
{
|
||||
PrintIndent( nIndent, fp );
|
||||
fprintf( fp, "%s\n", szTmp );
|
||||
hItem = m_ctrlAttachmentTree.GetNextSiblingItem( hItem );
|
||||
}
|
||||
}
|
||||
|
||||
if( NULL == hItem )
|
||||
{
|
||||
if( NULL != hParent )
|
||||
{
|
||||
// move up 1 level
|
||||
hItem = m_ctrlAttachmentTree.GetNextSiblingItem( hParent );
|
||||
hParent = m_ctrlAttachmentTree.GetParentItem( hParent );
|
||||
PrintIndent( --nIndent, fp );
|
||||
fprintf( fp, ";\n\n" );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
void CPageGCMDSAttachmentSet::UpdateWeaponTypeControl( Z3DATTACHMENTINFO* pAttachmentInfo )
|
||||
{
|
||||
if( NULL == pAttachmentInfo )
|
||||
{
|
||||
m_ctrlWeaponType.SetCurSel( -1 );
|
||||
return;
|
||||
}
|
||||
|
||||
m_ctrlWeaponType.SetCurSel( pAttachmentInfo->lType );
|
||||
}
|
||||
|
||||
void CPageGCMDSAttachmentSet::UpdateMeshNameControl( Z3DATTACHMENTINFO* pAttachmentInfo )
|
||||
{
|
||||
if( NULL == pAttachmentInfo )
|
||||
{
|
||||
m_ctrlMeshName.SetWindowText( "" );
|
||||
return;
|
||||
}
|
||||
|
||||
m_ctrlMeshName.SetWindowText( g_TokFileName.GetString(pAttachmentInfo->tokMeshFile) );
|
||||
}
|
||||
|
||||
void CPageGCMDSAttachmentSet::UpdateTextureNameControl( Z3DATTACHMENTINFO* pAttachmentInfo )
|
||||
{
|
||||
if( NULL == pAttachmentInfo )
|
||||
{
|
||||
m_ctrlTextureName.SetWindowText( "" );
|
||||
return;
|
||||
}
|
||||
|
||||
m_ctrlTextureName.SetWindowText( g_TokFileName.GetString(pAttachmentInfo->tokTextureFile) );
|
||||
}
|
||||
|
||||
void CPageGCMDSAttachmentSet::UpdateHolderListControl( Z3DATTACHMENTINFO* pAttachmentInfo )
|
||||
{
|
||||
char szTmp[100];
|
||||
|
||||
m_ctrlHolderList.DeleteAllItems();
|
||||
if( NULL == pAttachmentInfo )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for( int i = 0; i < pAttachmentInfo->lHolderCount; ++i )
|
||||
{
|
||||
m_ctrlHolderList.InsertItem( i, itoa(i, szTmp, 10 ) );
|
||||
|
||||
m_ctrlHolderList.SetItemText( i, 1,
|
||||
g_TokSkeletonPartName.GetString( pAttachmentInfo->pHolderInfo[i].tokSkelPart ) );
|
||||
|
||||
sprintf( szTmp, "%f %f %f",
|
||||
pAttachmentInfo->pHolderInfo[i].vPos.x,
|
||||
pAttachmentInfo->pHolderInfo[i].vPos.y,
|
||||
pAttachmentInfo->pHolderInfo[i].vPos.z );
|
||||
m_ctrlHolderList.SetItemText( i, 2, szTmp );
|
||||
|
||||
sprintf( szTmp, "%f %f %f %f",
|
||||
pAttachmentInfo->pHolderInfo[i].qRot.x,
|
||||
pAttachmentInfo->pHolderInfo[i].qRot.y,
|
||||
pAttachmentInfo->pHolderInfo[i].qRot.z,
|
||||
pAttachmentInfo->pHolderInfo[i].qRot.w );
|
||||
m_ctrlHolderList.SetItemText( i, 3, szTmp );
|
||||
}
|
||||
}
|
||||
|
||||
void CPageGCMDSAttachmentSet::OnSelchangedTreeAttachmentset(NMHDR* pNMHDR, LRESULT* pResult)
|
||||
{
|
||||
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
|
||||
// TODO: Add your control notification handler code here
|
||||
Z3DATTACHMENTINFO* pAttachmentInfo = (Z3DATTACHMENTINFO*)(pNMTreeView->itemNew.lParam);
|
||||
|
||||
UpdateWeaponTypeControl( pAttachmentInfo );
|
||||
UpdateMeshNameControl( pAttachmentInfo );
|
||||
UpdateTextureNameControl( pAttachmentInfo );
|
||||
UpdateHolderListControl( pAttachmentInfo );
|
||||
|
||||
*pResult = 0;
|
||||
}
|
||||
Reference in New Issue
Block a user