DragonNest/Client/EtActionTool/DnGameWeaponMng.cpp

187 lines
6.6 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
#include "StdAfx.h"
#include "DnGameWeaponMng.h"
#include "DnGameTable.h"
#include "DNTableFile.h"
#include "ActionObject.h"
#include "GlobalValue.h"
#include "EtResourceMng.h"
#include "DnCommonUtil.h"
#ifdef _DEBUG
#define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
#endif
CDnGameWeaponMng::CDnGameWeaponMng(void)
{
char szFileName[ _MAX_PATH ];
FILE *fp;
char szString[_MAX_PATH]={0};
char szActionName[_MAX_PATH]={0};
int nWeapon1, nWeapon2;
SWeaponInfo Info;
strcpy_s( szFileName, _MAX_PATH, "R:\\Gameres\\WorkSheet\\ToolData\\ActionToolWeapon.txt" );
fopen_s( &fp, szFileName, "r" );
if( fp )
{
while( fgets( szString, _MAX_PATH, fp ) )
{
if( szString[strlen(szString)-1] == '\n' ) szString[strlen(szString)-1] = '\0';
sscanf_s( szString, "%s %d %d", szActionName, _MAX_PATH, &nWeapon1, &nWeapon2 );
Info.szActionFile = szActionName;
Info.nWeapon1 = nWeapon1;
Info.nWeapon2 = nWeapon2;
m_vecWeaponInfo.push_back( Info );
}
fclose( fp );
}
m_nCurrentInfoIndex = -1;
}
CDnGameWeaponMng::~CDnGameWeaponMng(void)
{
char szFileName[ _MAX_PATH ];
FILE *fp;
strcpy_s( szFileName, _MAX_PATH, "R:\\Gameres\\WorkSheet\\ToolData\\ActionToolWeapon.txt" );
fopen_s( &fp, szFileName, "w" );
if( fp )
{
for( int i = 0; i < (int)m_vecWeaponInfo.size(); ++i )
{
if( m_vecWeaponInfo[i].nWeapon1 == 0 && m_vecWeaponInfo[i].nWeapon2 == 0 )
continue;
fprintf_s( fp, "%s %d %d\n", m_vecWeaponInfo[i].szActionFile.c_str(), m_vecWeaponInfo[i].nWeapon1, m_vecWeaponInfo[i].nWeapon2 );
}
fclose( fp );
}
SAFE_RELEASE_SPTR( m_hWeaponObject1 );
SAFE_RELEASE_SPTR( m_hWeaponObject2 );
}
void CDnGameWeaponMng::OnLoadAction( CString szActionFileName )
{
m_nCurrentInfoIndex = -1;
char szFileName[512] = { 0, };
_GetFileName( szFileName, _countof(szFileName), szActionFileName );
m_szCurrentActionFileName = szFileName;
for( int i = 0; i < (int)m_vecWeaponInfo.size(); ++i )
{
if( m_vecWeaponInfo[i].szActionFile == m_szCurrentActionFileName )
{
AttachWeapon( m_vecWeaponInfo[i].nWeapon1, m_vecWeaponInfo[i].nWeapon2 );
m_nCurrentInfoIndex = i;
return;
}
}
}
void CDnGameWeaponMng::GetAttachedWeapon( int &nWeapon1, int &nWeapon2 )
{
if( m_nCurrentInfoIndex < 0 ) return;
if( m_nCurrentInfoIndex >= (int)m_vecWeaponInfo.size() ) return;
nWeapon1 = m_vecWeaponInfo[m_nCurrentInfoIndex].nWeapon1;
nWeapon2 = m_vecWeaponInfo[m_nCurrentInfoIndex].nWeapon2;
}
void CDnGameWeaponMng::ChangeAttachWeapon( int nWeapon1, int nWeapon2 )
{
if( 0 <= m_nCurrentInfoIndex && m_nCurrentInfoIndex < (int)m_vecWeaponInfo.size() )
{
if( m_vecWeaponInfo[m_nCurrentInfoIndex].nWeapon1 == nWeapon1 && m_vecWeaponInfo[m_nCurrentInfoIndex].nWeapon2 == nWeapon2 )
return;
m_vecWeaponInfo[m_nCurrentInfoIndex].nWeapon1 = nWeapon1;
m_vecWeaponInfo[m_nCurrentInfoIndex].nWeapon2 = nWeapon2;
}
else
{
if( nWeapon1 == 0 && nWeapon2 == 0 )
return;
SWeaponInfo Info;
Info.szActionFile = m_szCurrentActionFileName;
Info.nWeapon1 = nWeapon1;
Info.nWeapon2 = nWeapon2;
m_nCurrentInfoIndex = (int)m_vecWeaponInfo.size();
m_vecWeaponInfo.push_back( Info );
}
AttachWeapon( nWeapon1, nWeapon2 );
}
void CDnGameWeaponMng::AttachWeapon( int nWeapon1, int nWeapon2 )
{
DNTableFileFormat *pSox = CDnGameTable::GetInstance().GetTable( CDnGameTable::WEAPON_TABLE );
CActionObject *pObject = (CActionObject*)CGlobalValue::GetInstance().GetRootObject();
if( !pSox ) return;
if( !pObject ) return;
if( !pObject->GetObjectHandle() ) return;
if( !pObject->GetObjectHandle()->GetAniHandle() ) return;
std::string szSkinName;
std::string szAniName;
std::string szActName;
std::string szSimName;
std::string szLinkBoneName;
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD>,
SAFE_RELEASE_SPTR( m_hWeaponObject1 );
if( nWeapon1 > 0 ) {
if( pSox->IsExistItem( nWeapon1 ) ) {
//szSkinName = pSox->GetFieldFromLablePtr( nWeapon1, "_SkinName" )->GetString();
//szAniName = pSox->GetFieldFromLablePtr( nWeapon1, "_AniName" )->GetString();
//szActName = pSox->GetFieldFromLablePtr( nWeapon1, "_ActName" )->GetString();
//szSimName = pSox->GetFieldFromLablePtr( nWeapon1, "_SimName" )->GetString();
// Ext<78><74>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϸ鼭 <20>Ʒ<EFBFBD> <20>Լ<EFBFBD> <20><><EFBFBD>°ŷ<C2B0> <20><><EFBFBD><EFBFBD>.
CommonUtil::GetFileNameFromFileEXT( szSkinName, pSox, nWeapon1, "_SkinName" );
CommonUtil::GetFileNameFromFileEXT( szAniName, pSox, nWeapon1, "_AniName" );
CommonUtil::GetFileNameFromFileEXT( szActName, pSox, nWeapon1, "_ActName" );
CommonUtil::GetFileNameFromFileEXT( szSimName, pSox, nWeapon1, "_SimName" );
if( !szSkinName.empty() ) {
m_hWeaponObject1 = EternityEngine::CreateAniObject( CEtResourceMng::GetInstance().GetFullName( szSkinName ).c_str(), ( szAniName.empty() ) ? NULL : CEtResourceMng::GetInstance().GetFullName( szAniName ).c_str() );
if( m_hWeaponObject1 ) {
m_hWeaponObject1->GetSkinInstance()->SetRenderAlphaTwoPass( true );
if( !szSimName.empty() ) {
m_hWeaponObject1->CreateSimulation( szSimName.c_str() );
}
}
}
if( m_hWeaponObject1 ) {
szLinkBoneName = "~BoxBone01";
int nBoneIndex = pObject->GetObjectHandle()->GetAniHandle()->GetBoneIndex( szLinkBoneName.c_str() );
m_hWeaponObject1->SetParent( pObject->GetObjectHandle(), nBoneIndex );
}
}
}
SAFE_RELEASE_SPTR( m_hWeaponObject2 );
if( nWeapon2 > 0 ) {
if( pSox->IsExistItem( nWeapon2 ) ) {
//szSkinName = pSox->GetFieldFromLablePtr( nWeapon2, "_SkinName" )->GetString();
//szAniName = pSox->GetFieldFromLablePtr( nWeapon2, "_AniName" )->GetString();
//szActName = pSox->GetFieldFromLablePtr( nWeapon2, "_ActName" )->GetString();
//szSimName = pSox->GetFieldFromLablePtr( nWeapon2, "_SimName" )->GetString();
CommonUtil::GetFileNameFromFileEXT( szSkinName, pSox, nWeapon2, "_SkinName" );
CommonUtil::GetFileNameFromFileEXT( szAniName, pSox, nWeapon2, "_AniName" );
CommonUtil::GetFileNameFromFileEXT( szActName, pSox, nWeapon2, "_ActName" );
CommonUtil::GetFileNameFromFileEXT( szSimName, pSox, nWeapon2, "_SimName" );
if( !szSkinName.empty() ) {
m_hWeaponObject2 = EternityEngine::CreateAniObject( CEtResourceMng::GetInstance().GetFullName( szSkinName ).c_str(), ( szAniName.empty() ) ? NULL : CEtResourceMng::GetInstance().GetFullName( szAniName ).c_str() );
if( m_hWeaponObject2 ) {
m_hWeaponObject2->GetSkinInstance()->SetRenderAlphaTwoPass( true );
if( !szSimName.empty() ) {
m_hWeaponObject2->CreateSimulation( szSimName.c_str() );
}
}
}
if( m_hWeaponObject2 ) {
szLinkBoneName = "~BoxBone02";
int nBoneIndex = pObject->GetObjectHandle()->GetAniHandle()->GetBoneIndex( szLinkBoneName.c_str() );
m_hWeaponObject2->SetParent( pObject->GetObjectHandle(), nBoneIndex );
}
}
}
}