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

📄 trigger.h

📁 Blood 2全套源码
💻 H
字号:
// ----------------------------------------------------------------------- //
//
// MODULE  : Trigger.h
//
// PURPOSE : Trigger - Definition
//
// CREATED : 10/6/97
//
// ----------------------------------------------------------------------- //

#ifndef __TRIGGER_H__
#define __TRIGGER_H__

#include "cpp_server_de.h"
#include "cpp_engineobjects_de.h"
#include "B2BaseClass.h"

#define MAX_TRIGGER_MESSAGES	10


// Trigger class
class Trigger : public B2BaseClass
{
	public:
		
		Trigger();
		~Trigger();

		void	SetActive(DBOOL bActive) { m_bActive = bActive; }
		void	SetTargetName(int index, char *szTarget);
		void	SetMessageName(int index, char *szTrigger);
		void	Setup(DBOOL bActive, char *pszTarget, char *pszMessage, DBOOL bTouchActivate,
					DBOOL bPlayerActivate, DBOOL bAIActivate, DBOOL bObjectActivate, 
					DBOOL bTriggerRelayActivate, DBOOL bNamedObjectActivate, 
					HSTRING hstrActivationObjectName, DBOOL bTrigLocked,
					HSTRING hstrTrigLockedMsg, HSTRING hstrTrigLockedSound, HSTRING hstrTrigUnlockedMsg,
					HSTRING hstrTrigUnlockedSound, HSTRING hstrTrigKeyName);

	protected:

		virtual void HandleKeyQueryResponse(HOBJECT hSender, HMESSAGEREAD hRead);
		virtual void HandleTriggerMsg(HOBJECT hSender, HMESSAGEREAD hRead);
		virtual void SendMessage(int nSlot);
		virtual void SendMessages();

		DBOOL	ReadProp(ObjectCreateStruct *pStruct);
		void	ObjectTouch (HOBJECT hObj);
		DBOOL	InitialUpdate(DVector *position);
		DBOOL	Update(DVector *position);
		DDWORD	EngineMessageFn(DDWORD messageID, void *pData, float lData);
		DDWORD	ObjectMessageFn(HOBJECT hSender, DDWORD messageID, HMESSAGEREAD hRead);
		DBOOL	ValidateSender(HOBJECT hObj);
		void	PlayActivationSound();
	
	private:

		void	Save(HMESSAGEWRITE hWrite, DDWORD dwSaveFlags);
		void	Load(HMESSAGEREAD hWrite, DDWORD dwLoadFlags);

	protected:

		DBOOL	m_bActive;				// Are we currently 'live'?
		DBOOL	m_bDelay[MAX_TRIGGER_MESSAGES];			// Currently delaying message sending
		DVector m_vDims;				// Size of the object
		DBOOL	m_bLocked;				// Trigger is locked.
		HSTRING	m_hstrLockedMsg;		// Message to display when trigger is locked.
		HSTRING	m_hstrLockedSound;		// Message to display when trigger is locked.
		HSTRING	m_hstrUnlockedMsg;		// Message to display when trigger is locked.
		HSTRING	m_hstrUnlockedSound;	// Message to display when trigger is locked.
		HSTRING	m_hstrKeyName;			// Name of key item needed to open the trigger.

		DFLOAT	m_fTriggerResetTime;	// How long to wait after being triggered
		DFLOAT	m_fTriggerMessageDelay[MAX_TRIGGER_MESSAGES];	// Time to wait to send trigger message
		DFLOAT	m_fMaxTriggerMessageDelay;
		DFLOAT	m_fDelayStartTime;		// Time a message delay started

		HSTRING m_hstrActivationSound;	// Name of our activation sound
		DFLOAT	m_fSoundRadius;			// Radius of activation sound

		HSTRING m_hstrTargetName[MAX_TRIGGER_MESSAGES];		// Name of our first target
		HSTRING m_hstrMessageName[MAX_TRIGGER_MESSAGES];	// Message to send to our first target

		HSTRING m_hstrActivationObjectName;	// Message to send to our second target

		DBOOL	m_bTouchActivate;		// Trigger can be activated with TouchNotify
		DBOOL	m_bPlayerActivate;		// Can be triggered by player
		DBOOL	m_bAIActivate;			// Can be triggered by AI
		DBOOL	m_bObjectActivate;		// Can be triggered by another object
		DBOOL	m_bTriggerRelayActivate;	// Can be triggered by another trigger
		DBOOL	m_bNamedObjectActivate;	// Can it only be triggered by a specific object?
		HOBJECT m_hLastSender;			// Last object we were triggered by

		DDWORD	m_nActivationCount;
		DDWORD	m_nCurrentActivation;

		DBOOL	m_bSending;
};


inline void Trigger::SetTargetName(int index, char *szTarget)
{
	if (index < 0 || index >= MAX_TRIGGER_MESSAGES) return;

	if (m_hstrTargetName[index])
		g_pServerDE->FreeString(m_hstrTargetName[index]);
	m_hstrTargetName[index] = g_pServerDE->CreateString(szTarget);
}


inline void Trigger::SetMessageName(int index, char *szMessage)
{
	if (index < 0 || index >= MAX_TRIGGER_MESSAGES) return;

	if (m_hstrMessageName[index])
		g_pServerDE->FreeString(m_hstrMessageName[index]);
	m_hstrMessageName[index] = g_pServerDE->CreateString(szMessage);
}

void SendTriggerMsgToObjects(LPBASECLASS pSender, HSTRING hName, HSTRING hMsg);
void SendTriggerMsgToClass(LPBASECLASS pSender, HCLASS hClass, HSTRING hMsg);



// BigTrigger class - obsolete
class BigTrigger : public Trigger
{
};


// Toggle trigger class
// Trigger class
class ToggleTrigger : public Trigger
{
	public:
		
		ToggleTrigger();
		~ToggleTrigger();

	protected:

		virtual void SendMessages();

		DBOOL	ReadProp(ObjectCreateStruct *pStruct);
		DDWORD	EngineMessageFn(DDWORD messageID, void *pData, float lData);
	
	private:

		void	Save(HMESSAGEWRITE hWrite, DDWORD dwSaveFlags);
		void	Load(HMESSAGEREAD hWrite, DDWORD dwLoadFlags);

	protected:

		DBOOL	m_bOn;					// Are we currently on?

		HSTRING m_hstrOffMessageName[MAX_TRIGGER_MESSAGES];	// Message to send to our first target
};




#endif // __TRIGGER_H__

⌨️ 快捷键说明

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