📄 appearancemanager.cpp
字号:
// AppearanceManager.cpp: implementation of the CAppearanceManager class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "AppearanceManager.h"
#include "Player.h"
#include "Monster.h"
#include "BossMonster.h"
#include "Npc.h"
#include "ItemGround.h"
#include "TacticObject.h"
#include ".\Engine\EngineObject.h"
#include ".\Engine\EngineEffect.h"
#include "ObjectStateManager.h"
#include "ObjectManager.h"
#include "GameResourceManager.h"
#include "ItemManager.h"
#include "PeaceWarModeManager.h"
#include "MotionManager.h"
#include "CharMakeManager.h"
#include "MainGame.h"
#include "MHMap.h"
#ifdef _GMTOOL_
#include "MHCamera.h"
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
GLOBALTON(CAppearanceManager)
CAppearanceManager::CAppearanceManager()
{
}
CAppearanceManager::~CAppearanceManager()
{
}
void CAppearanceManager::Init()
{
GAMERESRCMNGR->LoadModFileList(GAMERESRCMNGR->m_ModFileList);
GAMERESRCMNGR->LoadHairModFileList(GAMERESRCMNGR->m_HairModList);
GAMERESRCMNGR->LoadFaceModFileList(GAMERESRCMNGR->m_FaceModList);
}
void CAppearanceManager::Release()
{
}
void CAppearanceManager::InitAppearanceToEffect(CObject* pObject,CEngineEffect* pEffect)
{
if(pObject->GetObjectKind() == eObjectKind_Player)
{
CPlayer* pPlayer = (CPlayer*)pObject;
SetCharacterAppearanceToEffect(pPlayer,pEffect);
}
else if(pObject->GetObjectKind() == eObjectKind_Monster)
{
ASSERT(0);
}
else if(pObject->GetObjectKind() == eObjectKind_Npc)
{
ASSERT(0);
}
}
BOOL CAppearanceManager::SetCharacterAppearanceToEngineObject(CPlayer* pPlayer,CEngineObject* pEngineObject)
{
BYTE gender = pPlayer->m_CharacterInfo.Gender;
ASSERT(gender < 2);
if( gender >= 2 ) gender = 0;
BYTE hair = pPlayer->m_CharacterInfo.HairType;
BYTE face = pPlayer->m_CharacterInfo.FaceType;
WORD *WearedItemIdx = pPlayer->m_CharacterInfo.WearedItemIdx;
MOD_LIST* pHairList = &GAMERESRCMNGR->m_HairModList[gender];
MOD_LIST* pFaceList = &GAMERESRCMNGR->m_FaceModList[gender];
MOD_LIST* pModList = &GAMERESRCMNGR->m_ModFileList[gender];
pEngineObject->Init(pModList->BaseObjectFile,pPlayer,eEngineObjectType_Character);
ASSERT(pHairList->MaxModFile > hair);
if( pHairList->MaxModFile <= hair ) hair = 0;
//////////////////////////////////////////////////////////////////////////
// 龋冠 烙矫 // 魂鸥葛磊
if( WearedItemIdx[eWearedItem_Hat] == 53001 || WearedItemIdx[eWearedItem_Hat] == 53002 ||
WearedItemIdx[eWearedItem_Hat] == 53003 || WearedItemIdx[eWearedItem_Hat] == 53006 ||
WearedItemIdx[eWearedItem_Hat] == 53009 || WearedItemIdx[eWearedItem_Hat] == 53012 ||
WearedItemIdx[eWearedItem_Hat] == 53015 )
{
}
else
//////////////////////////////////////////////////////////////////////////
pEngineObject->ChangePart(eAppearPart_Hair,pHairList->ModFile[hair]);
BOOL rt;
pEngineObject->ChangePart(eAppearPart_Face,"NULL.MOD");
int PartType,PartModelNum;
for(int n=0;n<eWearedItem_Max;++n)
{
if(WearedItemIdx[n])
{
ITEM_INFO* pInfo = ITEMMGR->GetItemInfo(WearedItemIdx[n]);
if(!pInfo)
continue;
PartType = pInfo->Part3DType;
PartModelNum = pInfo->Part3DModelNum;
if(PartType == -1)
continue;
// 咯磊绰 赣府甫 官操瘤 臼绊 赣府俊 嘿牢促.
if(gender == 1 && PartType == 0)
{
PartType = 6;
}
if(PartType == 7)// 7锅篮 巢磊电 咯磊电 赣府甫 官槽促. (龋冠赣府)
{
if(gender == 0)
pEngineObject->ChangePart(eAppearPart_Hair,"NULLHAIR_M.MOD");
else
pEngineObject->ChangePart(eAppearPart_Hair,"NULLHAIR_W.MOD");
PartType = 6;
}
if(PartType == 6) // 赣府鹅
{
CEngineObject* pHairBand = new CEngineObject;
pHairBand->Init(pModList->ModFile[PartModelNum],NULL,eEngineObjectType_Weapon);
rt = pEngineObject->AttachDress(pHairBand,"Bip01 Head");
}
else if(PartType != 5) // 恐 救官操唱 ?? // 公扁扼辑 救官槽促 坷官(yh)
pEngineObject->ChangePart(
//倔奔(扁粮 2锅 Part)捞 CHX俊辑 狐瘤绰 官恩俊 茄沫究 动败脸促.
//PartType>2 ? PartType : PartType - 1
PartType
,pModList->ModFile[PartModelNum]);
}
}
CEngineObject* pFace = new CEngineObject;
ASSERT( pFaceList->MaxModFile > face );
if( pFaceList->MaxModFile <= face ) face = 0;
pFace->Init(pFaceList->ModFile[face],NULL,eEngineObjectType_Weapon);
rt = pEngineObject->AttachDress(pFace,"Bip01 Head");
//////////////////////////////////////////////////////////////////////////
//YH2DO
if(pPlayer->GetState() != eObjectState_Ungijosik && pPlayer->GetState() != eObjectState_StreetStall_Owner)
ShowWeapon(pPlayer,pEngineObject);
if( PEACEWARMGR->IsPeaceMode(pPlayer) )
if( pPlayer->GetWeaponEquipType() == WP_GWUN ||
pPlayer->GetWeaponEquipType() == WP_AMGI )
HideWeapon(pPlayer,pEngineObject);
//////////////////////////////////////////////////////////////////////////
//胶纳老
VECTOR3 scale;
if( pPlayer->m_CharacterInfo.Width > 1.1 ) pPlayer->m_CharacterInfo.Width = 1.1;
else if( pPlayer->m_CharacterInfo.Width < 0.9 ) pPlayer->m_CharacterInfo.Width = 0.9;
if( pPlayer->m_CharacterInfo.Height > 1.1 ) pPlayer->m_CharacterInfo.Height = 1.1;
else if( pPlayer->m_CharacterInfo.Height < 0.9 ) pPlayer->m_CharacterInfo.Height = 0.9;
SetVector3(&scale,
pPlayer->m_CharacterInfo.Width,
pPlayer->m_CharacterInfo.Height,
pPlayer->m_CharacterInfo.Width);
pEngineObject->SetScale(&scale);
pEngineObject->ApplyHeightField(TRUE);
pPlayer->SetPosition(&pPlayer->m_MoveInfo.CurPosition);
pPlayer->SetAngle(pPlayer->m_RotateInfo.Angle.ToRad());
if(pPlayer->GetID() == HEROID)
{
pPlayer->GetEngineObject()->DisablePick();
}
/*
// 儡惑 抛胶飘 内靛
CEngineObject* pKGEffect = new CEngineObject;
pKGEffect->Init("jansang.MOD",NULL,eEngineObjectType_Effect);
pKGEffect->Attach(pEngineObject,"Bip01 Head");
pKGEffect->InitializeIllusionEffect(20,NULL);
pKGEffect->BeginIllusionEffect();
*/
return TRUE;
}
void CAppearanceManager::ShowWeapon(CPlayer* pPlayer)
{
SetCharacterAppearanceToEngineObject(pPlayer,&pPlayer->m_EngineObject);
ShowWeapon(pPlayer,pPlayer->GetEngineObject());
if(pPlayer->GetCharacterTotalInfo()->bVisible == FALSE)
{
#ifdef _GMTOOL_
if( MAINGAME->GetUserLevel() <= eUSERLEVEL_GM && CAMERA->GetCameraMode() != eCM_EyeView )
pPlayer->GetEngineObject()->SetAlpha( 0.3f );
else
#endif
pPlayer->GetEngineObject()->Hide();
}
OBJECTMGR->ApplyShadowOption(pPlayer);
}
void CAppearanceManager::HideWeapon(CPlayer* pPlayer)
{
SetCharacterAppearanceToEngineObject(pPlayer,&pPlayer->m_EngineObject);
HideWeapon(pPlayer,pPlayer->GetEngineObject());
if(pPlayer->GetCharacterTotalInfo()->bVisible == FALSE)
{
#ifdef _GMTOOL_
if( MAINGAME->GetUserLevel() <= eUSERLEVEL_GM && CAMERA->GetCameraMode() != eCM_EyeView )
pPlayer->GetEngineObject()->SetAlpha( 0.3f );
else
#endif
pPlayer->GetEngineObject()->Hide();
}
OBJECTMGR->ApplyShadowOption(pPlayer);
}
void CAppearanceManager::SetCharacterAppearance(CPlayer* pPlayer)
{
SetCharacterAppearanceToEngineObject(pPlayer,&pPlayer->m_EngineObject);
if(pPlayer->GetState() == eObjectState_None)
OBJECTSTATEMGR->EndObjectState(pPlayer,eObjectState_None);
if( pPlayer->GetState() == eObjectState_Move &&
pPlayer->m_MoveInfo.KyungGongIdx == 0)
pPlayer->SetState(eObjectState_Move);
if(pPlayer->GetCharacterTotalInfo()->bVisible == FALSE)
{
#ifdef _GMTOOL_
if( MAINGAME->GetUserLevel() <= eUSERLEVEL_GM && CAMERA->GetCameraMode() != eCM_EyeView )
pPlayer->GetEngineObject()->SetAlpha( 0.3f );
else
#endif
pPlayer->GetEngineObject()->Hide();
}
OBJECTMGR->ApplyShadowOption(pPlayer);
}
void CAppearanceManager::SetBossMonsterAppearance(CBossMonster* pMonster)
{
pMonster->m_EngineObject.Release();
WORD mkind = pMonster->GetMonsterKind();
BASE_MONSTER_LIST* pList = GAMERESRCMNGR->GetMonsterListInfo(mkind);
pMonster->m_EngineObject.Init(pList->ChxName, pMonster, eEngineObjectType_Monster);
pMonster->m_EngineObject.ApplyHeightField(TRUE);
//////////////////////////////////////////////////////////////////////////
// 阁胶磐 农扁 利侩
VECTOR3 Scale;
// taiyo test
Scale.x = Scale.y = Scale.z = pList->Scale;
pMonster->m_EngineObject.SetScale(&Scale);
}
void CAppearanceManager::SetMonsterAppearance(CMonster* pMonster)
{
pMonster->m_EngineObject.Release();
WORD mkind = pMonster->GetMonsterKind();
BASE_MONSTER_LIST* pList = GAMERESRCMNGR->GetMonsterListInfo(mkind);
pMonster->m_EngineObject.Init(pList->ChxName,pMonster,eEngineObjectType_Monster);
pMonster->m_EngineObject.ApplyHeightField(TRUE);
/////////////////////////////////////////////////////////////////////////
// taiyo
// 葛记 沥焊 肺靛
/*
char chtName[255];
// char tmp[255];
int lens = strlen(pMonsterChxName) - 4;
strncpy( chtName, pMonsterChxName, lens );
chtName[lens] = 0;
#ifdef _FILE_BIN_
strcat(chtName, ".bin");
#else
strcat(chtName, ".cht");
#endif
MOTIONMGR->LoadMotionInfo(pMonster, chtName);
*/
MOTIONMGR->SetMotionInfo(pMonster, pList->MotionID);
//////////////////////////////////////////////////////////////////////////
// 阁胶磐 农扁 利侩
VECTOR3 Scale;
// taiyo test
Scale.x = Scale.y = Scale.z = pList->Scale;
pMonster->m_EngineObject.SetScale(&Scale);
}
void CAppearanceManager::SetNpcAppearance(CNpc* pNpc)
{
pNpc->m_EngineObject.Release();
WORD nkind = pNpc->GetNpcKind();
NPC_LIST* pList = GAMERESRCMNGR->GetNpcInfo(nkind);
int ChxNum = pList->ModelNum;
char* pNpcChxName = GAMERESRCMNGR->GetNpcChxName(ChxNum);
pNpc->m_EngineObject.Init(pNpcChxName,pNpc,eEngineObjectType_Npc);
pNpc->SetPosition(&pNpc->m_MoveInfo.CurPosition);
pNpc->m_EngineObject.ApplyHeightField(TRUE);
pNpc->SetAngle(pNpc->m_RotateInfo.Angle.ToRad());
pNpc->m_EngineObject.ChangeMotion(1);
pNpc->m_EngineObject.RandMotionFrame();
if( pNpc->GetNpcJob() == 0 )
pNpc->m_EngineObject.DisablePick();
}
void CAppearanceManager::SetCharacterAppearanceToEffect(CPlayer* pPlayer,CEngineEffect* pRtEffect)
{
SetCharacterAppearanceToEngineObject(pPlayer,pRtEffect);
}
void CAppearanceManager::InitAppearance(CObject* pObject)
{
if(pObject->GetObjectKind() == eObjectKind_Player)
{
SetCharacterAppearance((CPlayer*)pObject);
}
else if(pObject->GetObjectKind() == eObjectKind_Monster)
{
SetMonsterAppearance((CMonster*)pObject);
}
else if(pObject->GetObjectKind() == eObjectKind_Npc)
{
SetNpcAppearance((CNpc*)pObject);
}
else if(pObject->GetObjectKind() == eObjectKind_Tactic)
{
}
else if(pObject->GetObjectKind() == eObjectKind_BossMonster)
{
SetBossMonsterAppearance((CBossMonster*)pObject);
}
}
void CAppearanceManager::SetScalebyGuageBar(DWORD PlayerID)
{
CObject* pPlayer;
pPlayer = OBJECTMGR->GetObject(PlayerID);
if(pPlayer == NULL)
{
ASSERT(0);
return;
}
ASSERT(pPlayer->GetObjectKind() == eObjectKind_Player);
((CPlayer*)pPlayer)->m_CharacterInfo.Width = CHARMAKEMGR->GetCharacterMakeInfo()->Width;
((CPlayer*)pPlayer)->m_CharacterInfo.Height = CHARMAKEMGR->GetCharacterMakeInfo()->Height;
}
void CAppearanceManager::AddCharacterPartChange(DWORD PlayerID)
{
m_PtrList.AddHead((void*)PlayerID);
}
void CAppearanceManager::ProcessAppearance()
{
DWORD PlayerID;
CObject* pPlayer;
while(PlayerID = (DWORD)m_PtrList.RemoveTail())
{
pPlayer = OBJECTMGR->GetObject(PlayerID);
if(pPlayer == NULL)
continue;
ASSERT(pPlayer->GetObjectKind() == eObjectKind_Player);
SetCharacterAppearance((CPlayer*)pPlayer);
}
}
void CAppearanceManager::ShowWeapon(CPlayer* pPlayer,CEngineObject* pEngineObject)
{
WORD WeaponIdx = pPlayer->GetWearedItemIdx(eWearedItem_Weapon);
if(WeaponIdx == 0)
return;
BYTE gender = pPlayer->m_CharacterInfo.Gender;
ASSERT(gender < 2);
MOD_LIST* pModList = &GAMERESRCMNGR->m_ModFileList[gender];
HideWeapon(pPlayer,pEngineObject);
int PartType,PartModelNum;
{ // 公扁 Attach 贸府
if(WeaponIdx)
{
PartType = ITEMMGR->GetItemInfo(WeaponIdx)->Part3DType;
PartModelNum = ITEMMGR->GetItemInfo(WeaponIdx)->Part3DModelNum;
if( PartType != -1 &&
PartType != 3 )
{
WORD EquipType = pPlayer->GetWeaponEquipType();
CEngineObject* pWeapon1 = new CEngineObject;
if(EquipType == WP_AMGI)
{
char temp[256],*pSrc;
pSrc = pModList->ModFile[PartModelNum];
for(DWORD n=0;n<strlen(pSrc);++n)
{
if(pSrc[n] == '.')
{
temp[n] = '_';
temp[n+1] = 'R';
strcpy(&temp[n+2],&pSrc[n]);
break;
}
else
temp[n] = pSrc[n];
}
pWeapon1->Init(temp,NULL,eEngineObjectType_Weapon);
BOOL rt = pEngineObject->AttachWeapon(pWeapon1,"Bip01 R Forearm");
pSrc = pModList->ModFile[PartModelNum];
for(n=0;n<strlen(pSrc);++n)
{
if(pSrc[n] == '.')
{
temp[n] = '_';
temp[n+1] = 'L';
strcpy(&temp[n+2],&pSrc[n]);
break;
}
else
temp[n] = pSrc[n];
}
CEngineObject* pWeapon2 = new CEngineObject;
pWeapon2->Init(temp,NULL,eEngineObjectType_Weapon);
rt = pEngineObject->AttachWeapon(pWeapon2,"Bip01 L Forearm");
return;
}
pWeapon1->Init(pModList->ModFile[PartModelNum],NULL,eEngineObjectType_Weapon);
if(EquipType == WP_GUNG)
pEngineObject->AttachWeapon(pWeapon1,WEAPON_ATTACH_BONENAME_L);
else
pEngineObject->AttachWeapon(pWeapon1,WEAPON_ATTACH_BONENAME_R);
// 阂漠 test
// pWeapon1 = new CEngineObject;
// pWeapon1->Init("eff_ex_missile1.chx",NULL,eEngineObjectType_Effect);
// pEngineObject->AttachWeapon(pWeapon1,WEAPON_ATTACH_BONENAME_R);
//
if( pPlayer->GetWeaponEquipType() == WP_GWUN )
{
CEngineObject* pWeapon2 = new CEngineObject;
char temp[256],*pSrc;
pSrc = pModList->ModFile[PartModelNum];
for(DWORD n=0;n<strlen(pSrc);++n)
{
if(pSrc[n] == '.')
{
temp[n] = '_';
temp[n+1] = 'L';
strcpy(&temp[n+2],&pSrc[n]);
break;
}
else
temp[n] = pSrc[n];
}
pWeapon2->Init(temp,NULL,eEngineObjectType_Weapon);
pEngineObject->AttachWeapon(pWeapon2,WEAPON_ATTACH_BONENAME_L);
}
}
}
}
}
void CAppearanceManager::HideWeapon(CPlayer* pPlayer,CEngineObject* pEngineObject)
{
pEngineObject->RemoveAllAttachedWeapon();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -