📄 trigger.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 + -