📄 anim_sound.cpp
字号:
m_nAnim_CORPSE[8] = pServerDE->GetAnimIndex(m_hObject, ANIM_CORPSE9 );
m_nAnim_CORPSE[9] = pServerDE->GetAnimIndex(m_hObject, ANIM_CORPSE10 );
m_nAnim_CORPSE[10] = pServerDE->GetAnimIndex(m_hObject, ANIM_CORPSE11 );
m_nAnim_CORPSE[11] = pServerDE->GetAnimIndex(m_hObject, ANIM_CORPSE12 );
m_nAnim_LIMB[0] = pServerDE->GetAnimIndex(m_hObject, ANIM_LIMB_HEAD );
m_nAnim_LIMB[1] = pServerDE->GetAnimIndex(m_hObject, ANIM_LIMB_ARM );
m_nAnim_LIMB[2] = pServerDE->GetAnimIndex(m_hObject, ANIM_LIMB_LEG );
m_nAnim_SPECIAL[0] = pServerDE->GetAnimIndex(m_hObject, ANIM_SPECIAL1 );
m_nAnim_SPECIAL[1] = pServerDE->GetAnimIndex(m_hObject, ANIM_SPECIAL2 );
m_nAnim_SPECIAL[2] = pServerDE->GetAnimIndex(m_hObject, ANIM_SPECIAL3 );
m_nAnim_SPECIAL[3] = pServerDE->GetAnimIndex(m_hObject, ANIM_SPECIAL4 );
m_nAnim_SPECIAL[4] = pServerDE->GetAnimIndex(m_hObject, ANIM_SPECIAL5 );
m_nAnim_SPECIAL[5] = pServerDE->GetAnimIndex(m_hObject, ANIM_SPECIAL6 );
m_nAnim_SPECIAL[6] = pServerDE->GetAnimIndex(m_hObject, ANIM_SPECIAL7 );
m_nAnim_SPECIAL[7] = pServerDE->GetAnimIndex(m_hObject, ANIM_SPECIAL8 );
m_nAnim_SPECIAL[8] = pServerDE->GetAnimIndex(m_hObject, ANIM_SPECIAL9 );
//SCHLEGZ 3/11/98 7:33:27 PM: make sure we have valid and appropriate anims
CheckAnims(m_nAnim_IDLE,sizeof(m_nAnim_IDLE)/4);
CheckAnims(m_nAnim_WALK,sizeof(m_nAnim_WALK)/4);
CheckAnims(m_nAnim_RUN,sizeof(m_nAnim_RUN)/4);
CheckAnims(m_nAnim_JUMP,sizeof(m_nAnim_JUMP)/4);
CheckAnims(m_nAnim_CROUCH,sizeof(m_nAnim_CROUCH)/4);
CheckAnims(m_nAnim_CRAWL,sizeof(m_nAnim_CRAWL)/4);
CheckAnims(m_nAnim_SWIM,sizeof(m_nAnim_SWIM)/4);
CheckAnims(m_nAnim_FIRE_STAND,sizeof(m_nAnim_FIRE_STAND)/4);
CheckAnims(m_nAnim_FIRE_WALK,sizeof(m_nAnim_FIRE_WALK)/4);
CheckAnims(m_nAnim_FIRE_RUN,sizeof(m_nAnim_FIRE_RUN)/4);
CheckAnims(m_nAnim_FIRE_JUMP,sizeof(m_nAnim_FIRE_JUMP)/4);
CheckAnims(m_nAnim_FIRE_CROUCH,sizeof(m_nAnim_FIRE_CROUCH)/4);
CheckAnims(m_nAnim_FIRE_CRAWL,sizeof(m_nAnim_FIRE_CRAWL)/4);
CheckAnims(m_nAnim_RECOIL,sizeof(m_nAnim_RECOIL)/4);
CheckAnims(m_nAnim_DEATH,sizeof(m_nAnim_DEATH)/4);
CheckAnims(m_nAnim_CORPSE,sizeof(m_nAnim_CORPSE)/4);
}
void CAnim_Sound::GenerateHitSpheres(HOBJECT hObject)
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE || !hObject) return;
DVector vNodePos[NUM_STD_NODES];
DRotation rRot;
for(int i = 0; i < NUM_STD_NODES; i++)
{
if(!pServerDE->GetModelNodeTransform(hObject, szNodes[i], &vNodePos[i], &rRot))
{
if(i >= 1)
VEC_COPY(vNodePos[i], vNodePos[i-1]);
}
}
//HEAD/NECK
m_fHitSpheres[0] = VEC_DIST(vNodePos[0],vNodePos[1]) * 0.66f;
m_fHitSpheres[1] = m_fHitSpheres[0];
//TORSO/PELVIS
m_fHitSpheres[2] = VEC_DIST(vNodePos[2],vNodePos[3]) * 0.66f;
m_fHitSpheres[3] = m_fHitSpheres[2];
//R_ARM
m_fHitSpheres[4] = VEC_DIST(vNodePos[4],vNodePos[5]) * 0.66f;
m_fHitSpheres[5] = VEC_DIST(vNodePos[5],vNodePos[6]) * 0.66f;
m_fHitSpheres[6] = m_fHitSpheres[5];
//L_ARM
m_fHitSpheres[7] = VEC_DIST(vNodePos[7],vNodePos[8]) * 0.66f;
m_fHitSpheres[8] = VEC_DIST(vNodePos[8],vNodePos[9]) * 0.66f;
m_fHitSpheres[9] = m_fHitSpheres[8];
//L_LEG
m_fHitSpheres[10] = VEC_DIST(vNodePos[10],vNodePos[11]) * 0.66f;
m_fHitSpheres[11] = VEC_DIST(vNodePos[11],vNodePos[12]) * 0.66f;
m_fHitSpheres[12] = VEC_DIST(vNodePos[12],vNodePos[13]) * 0.66f;
m_fHitSpheres[13] = m_fHitSpheres[12];
//R_LEG
m_fHitSpheres[14] = VEC_DIST(vNodePos[14],vNodePos[15]) * 0.66f;
m_fHitSpheres[15] = VEC_DIST(vNodePos[15],vNodePos[16]) * 0.66f;
m_fHitSpheres[16] = VEC_DIST(vNodePos[16],vNodePos[17]) * 0.66f;
m_fHitSpheres[17] = m_fHitSpheres[16];
return;
}
// ----------------------------------------------------------------------- //
// ROUTINE : CAnim_Sound::ForceAnimation
// DESCRIPTION :
// RETURN TYPE : void
// PARAMS : HOBJECT m_hObject
// PARAMS : DDWORD nAni
// ----------------------------------------------------------------------- //
void CAnim_Sound::ForceAnimation(HOBJECT m_hObject, DDWORD nAni)
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE || !m_hObject) return;
// Force to different animation
pServerDE->SetModelAnimation(m_hObject, 0);
pServerDE->SetModelAnimation(m_hObject, nAni);
}
// ----------------------------------------------------------------------- //
// ROUTINE : CAnim_Sound::GetSoundPath
// DESCRIPTION :
// RETURN TYPE : char*
// PARAMS : void
// ----------------------------------------------------------------------- //
void CAnim_Sound::GetSoundPath(char* szSound, int nIndex)
{
char szTemp[256];
if(nIndex)
{
sprintf(szTemp,"%s\\%s%d.wav",m_szSoundRoot,szSound,nIndex);
}
else
{
sprintf(szTemp,"%s\\%s",m_szSoundRoot,szSound);
}
_mbscpy((unsigned char*)szSound, (const unsigned char*)szTemp);
return;
}
// ----------------------------------------------------------------------- //
// ROUTINE : CAnim_Sound::PlayAISound
// DESCRIPTION :
// RETURN TYPE : DBOOL
// PARAMS : char* szSound
// PARAMS : DFLOAT fRadius
// ----------------------------------------------------------------------- //
DBOOL CAnim_Sound::PlayVoice(HOBJECT hObject, char* szSound, DFLOAT fRadius, int nVol)
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE || !hObject) return DFALSE;
if(m_hVoxSound)
{
DBOOL bDone = DFALSE;
if(pServerDE->IsSoundDone(m_hVoxSound, &bDone) == LT_OK)
{
if(!bDone)
return DFALSE;
}
pServerDE->KillSound( m_hVoxSound );
m_hVoxSound = DNULL;
}
m_hVoxSound = PlaySound(hObject, szSound, fRadius, nVol, DTRUE );
return DTRUE;
}
// ----------------------------------------------------------------------- //
// ROUTINE : CAnim_Sound::PlayAISound
// DESCRIPTION :
// RETURN TYPE : HSOUNDDE, if bGetHandle == DTRUE
// PARAMS : char* szSound
// PARAMS : DFLOAT fRadius
// PARAMS : DBOOL bGetHandle - return handle.
// ----------------------------------------------------------------------- //
HSOUNDDE CAnim_Sound::PlaySound(HOBJECT hObject, char* szSound, DFLOAT fRadius, int nVol, DBOOL bGetHandle )
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE || !hObject) return DNULL;
PlaySoundInfo playSoundInfo;
PLAYSOUNDINFO_INIT( playSoundInfo );
playSoundInfo.m_dwFlags = PLAYSOUND_3D | PLAYSOUND_ATTACHED | PLAYSOUND_CTRL_VOL | PLAYSOUND_REVERB;
if( bGetHandle )
playSoundInfo.m_dwFlags |= PLAYSOUND_GETHANDLE;
// playSoundInfo.m_dwFlags |= PLAYSOUND_LOOP;
// playSoundInfo.m_dwFlags |= PLAYSOUND_GETHANDLE;
// playSoundInfo.m_dwFlags |= PLAYSOUND_FILESTREAM;
// playSoundInfo.m_dwFlags |= PLAYSOUND_TIME;
sprintf(playSoundInfo.m_szSoundName,"%s\\%s",m_szSoundRoot,szSound);
playSoundInfo.m_hObject = hObject;
playSoundInfo.m_nPriority = SOUNDPRIORITY_AI_MEDIUM;
playSoundInfo.m_fOuterRadius = fRadius;
playSoundInfo.m_fInnerRadius = fRadius * 0.1f;
playSoundInfo.m_nVolume = nVol;
pServerDE->PlaySound( &playSoundInfo );
return playSoundInfo.m_hSound;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -