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

📄 voicemgr.h

📁 Blood 2全套源码
💻 H
字号:
/****************************************************************************
;
;	 MODULE:		VOICEMGR (.H)
;
;	PURPOSE:		Voice Manager for character voice sounds
;
;	HISTORY:		10/11/98 [blg] This file was created
;
;	COMMENT:		Copyright (c) 1998, Monolith Productions Inc.
;
****************************************************************************/


#ifndef _VOICEMGR_H_
#define _VOICEMGR_H_


// Includes...

#include "cpp_client_de.h"
#include "VoiceMgrDefs.h"


// Defines...

#define VM_MAX_SOUNDS		64
#define VM_MAX_STRING		128
#define VM_MAX_CHARACTERS	VMC_MAX


// Classes...

class CVoiceGroup
{
	// Member functions...

public:
	CVoiceGroup() { Clear(); }
	~CVoiceGroup() { Term(); }

	DBOOL				Init(CClientDE* pClientDE, char* sDir, char* sCustomDir);
	void				Term();
	void				Clear();

	int					GetNumSounds() { return(m_cSounds); }
	char*				GetSoundString(int iSound);
	char*				GetRandomSoundString();

	int					AddSoundStrings(char* sDir);
	DBOOL				AddSoundString(char* sSound);


	// Member variables...

private:
	char				m_sSounds[VM_MAX_SOUNDS][VM_MAX_STRING];
	int					m_cSounds;
	int					m_iLast;
	CClientDE*			m_pClientDE;
};

class CVoiceGroupMgr
{
	// Member functions...

public:
	CVoiceGroupMgr() { Clear(); }
	~CVoiceGroupMgr() { Term(); }

	DBOOL				Init(CClientDE* pClientDE, char* sDirPrefix, char* sCustomDirPrefix);
	void				Term();
	void				Clear();

	CVoiceGroup*		GetGroup(int iGroup);
	char*				GetGroupSoundString(int iGroup, int iSound);

	int					AddGroup(int iGroup, char* sDirPrefix, char* sCustomDirPrefix, char* sDir);


	// Member variables...

private:
	CVoiceGroup			m_aGroups[VME_MAX];
	CClientDE*			m_pClientDE;
};

class CVoiceMgr
{
	// Member functions...

public:
	CVoiceMgr() { m_hCurSound = DNULL; Clear(); }
	~CVoiceMgr() { Term(); }

	DBOOL				Init(CClientDE* pClientDE);
	void				Term();
	void				Clear();

	CVoiceGroupMgr*		GetGroupMgr(int iCharacter);
	CVoiceGroup*		GetGroup(int iCharacter, int iEvent);
	char*				GetRandomGroupSoundString(int iCharacter, int iEvent);
	DBOOL				GetUniqueEventSoundString(int iCharacter, int iUnique, char* sPath);

	void				SetNextPlayTime(DFLOAT fTimeAdd = 0.5f);
	void				SetOnOff(DBOOL bOn) { m_bOn = bOn; if (!IsOn()) StopAll(); }

	DBOOL				PlayEventSound(int iCharacter, int iEvent);
	DBOOL				PlayUniqueSound(int iCharacter, int iUnique);
	DBOOL				PlaySound(char* sSound, DFLOAT fTimeAdd = 0.5f);
	DBOOL				PlaySoundNoStream(char* sSound, DFLOAT fTimeAdd = 0.5f);

	DBOOL				IsOkToPlaySound();
	DBOOL				IsOn() { return(m_bOn); }

	DBOOL				IsUniqueSoundPlayed(int iCharacter, int iUnique);
	void				FlagUniqueSoundPlayed(int iCharacter, int iUnique);

	void				StopAll();
	void				Reset();


	// Member variables...

private:
	CClientDE*			m_pClientDE;
	CVoiceGroupMgr		m_aGroupMgrs[VM_MAX_CHARACTERS];
	DBOOL				m_aUniquePlayFlags[VMC_MAX][VMU_MAX];
	DBOOL				m_bOn;
	DFLOAT				m_fNextPlayTime;
	HSOUNDDE			m_hCurSound;
};


// Inlines...

inline void CVoiceGroup::Clear()
{
	for (int i = 0; i < VM_MAX_SOUNDS; i++)
	{
		m_sSounds[i][0] = '\0';
	}

	m_cSounds = 0;
	m_iLast   = -1;
	m_pClientDE  = DNULL;
}

inline char* CVoiceGroup::GetSoundString(int iSound)
{
	if (iSound < 0) return(DNULL);
	if (iSound >= VM_MAX_SOUNDS) return(DNULL);

	return(m_sSounds[iSound]);
}

inline void CVoiceGroupMgr::Clear()
{
	m_pClientDE = NULL;
}

inline CVoiceGroup* CVoiceGroupMgr::GetGroup(int iGroup)
{
	if (iGroup < 0) return(DNULL);
	if (iGroup >= VME_MAX) return(DNULL);

	return(&m_aGroups[iGroup]);
}

inline char* CVoiceGroupMgr::GetGroupSoundString(int iGroup, int iSound)
{
	CVoiceGroup* pGroup = GetGroup(iGroup);
	if (!pGroup) return(DNULL);

	return(pGroup->GetSoundString(iSound));
}

inline CVoiceGroupMgr* CVoiceMgr::GetGroupMgr(int iCharacter)
{
	if (iCharacter < 0) return(DNULL);
	if (iCharacter >= VMC_MAX) return(DNULL);

	return(&m_aGroupMgrs[iCharacter]);
}

inline CVoiceGroup* CVoiceMgr::GetGroup(int iCharacter, int iEvent)
{
	CVoiceGroupMgr* pMgr = GetGroupMgr(iCharacter);
	if (!pMgr) return(NULL);

	return(pMgr->GetGroup(iEvent));
}

inline char* CVoiceMgr::GetRandomGroupSoundString(int iCharacter, int iEvent)
{
	CVoiceGroup* pGroup = GetGroup(iCharacter, iEvent);
	if (!pGroup) return(DNULL);

	return(pGroup->GetRandomSoundString());
}

inline void CVoiceMgr::SetNextPlayTime(DFLOAT fTimeDelta)
{
	m_fNextPlayTime = m_pClientDE->GetTime() + fTimeDelta;
}


// EOF...

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -