⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 anim_sound.cpp

📁 Blood 2全套源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    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 + -