00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __CEL_TRIGGERS__
00021 #define __CEL_TRIGGERS__
00022
00023 #include "behaviourlayer/behave.h"
00024 #include "tools/parameters.h"
00025 #include "tools/sequences.h"
00026
00027
00028
00029
00030
00031 struct iTrigger;
00032
00037 struct iTriggerCallback : public virtual iBase
00038 {
00039 SCF_INTERFACE (iTriggerCallback, 0, 0, 1);
00040
00042 virtual void TriggerFired (iTrigger* trigger, iCelParameterBlock* params) = 0;
00043 };
00044
00052 struct iTrigger : public virtual iBase
00053 {
00054 SCF_INTERFACE (iTrigger, 0, 0, 1);
00055
00060 virtual void RegisterCallback (iTriggerCallback* callback) = 0;
00061
00065 virtual void ClearCallback () = 0;
00066
00070 virtual void ActivateTrigger () = 0;
00071
00075 virtual void DeactivateTrigger () = 0;
00076
00084 virtual bool Check () = 0;
00085
00091 virtual bool LoadAndActivateTrigger (iCelDataBuffer* databuf) = 0;
00092
00096 virtual void SaveTriggerState (iCelDataBuffer* databuf) = 0;
00097 };
00098
00103 struct iTriggerFactory : public virtual iBase
00104 {
00105 SCF_INTERFACE (iTriggerFactory, 0, 0, 1);
00106
00112 virtual csPtr<iTrigger> CreateTrigger (
00113 const celParams& params) = 0;
00114
00120 virtual bool Load (iDocumentNode* node) = 0;
00121 };
00122
00131 struct iTriggerType : public virtual iBase
00132 {
00133 SCF_INTERFACE (iTriggerType, 0, 0, 1);
00134
00138 virtual const char* GetName () const = 0;
00139
00143 virtual csPtr<iTriggerFactory> CreateTriggerFactory () = 0;
00144 };
00145
00146
00147
00148
00169 struct iEnterSectorTriggerFactory : public virtual iBase
00170 {
00171 SCF_INTERFACE (iEnterSectorTriggerFactory, 0, 0, 1);
00172
00181 virtual void SetEntityParameter (const char* entity, const char* tag = 0) = 0;
00182
00189 virtual void SetSectorParameter (const char* sector) = 0;
00190 };
00191
00213 struct iInventoryTriggerFactory : public virtual iBase
00214 {
00215 SCF_INTERFACE (iInventoryTriggerFactory, 0, 0, 1);
00216
00225 virtual void SetEntityParameter (const char* entity, const char* tag = 0) = 0;
00226
00234 virtual void SetChildEntityParameter (const char* child_entity) = 0;
00235 };
00236
00255 struct iMeshSelectTriggerFactory : public virtual iBase
00256 {
00257 SCF_INTERFACE (iMeshSelectTriggerFactory, 0, 0, 1);
00258
00267 virtual void SetEntityParameter (const char* entity, const char* tag = 0) = 0;
00268 };
00269
00284 struct iMessageTriggerFactory : public virtual iBase
00285 {
00286 SCF_INTERFACE (iMessageTriggerFactory, 0, 0, 1);
00287
00293 virtual void SetEntityParameter (const char* entity) = 0;
00294
00301 virtual void SetMaskParameter (const char* mask) = 0;
00302 };
00303
00304
00328 struct iOperationTriggerFactory : public virtual iBase
00329 {
00330 SCF_INTERFACE (iOperationTriggerFactory, 0, 0, 1);
00331
00338 virtual void SetOperationParameter (const char* operation) = 0;
00343 virtual csRefArray<iTriggerFactory> &GetTriggerFactories () = 0;
00344 };
00345
00383 struct iPropertyChangeTriggerFactory : public virtual iBase
00384 {
00385 SCF_INTERFACE (iPropertyChangeTriggerFactory, 0, 0, 1);
00386
00395 virtual void SetEntityParameter (const char* entity, const char* tag = 0) = 0;
00396
00402 virtual void SetPropertyParameter (const char* prop) = 0;
00403
00410 virtual void SetValueParameter (const char* value) = 0;
00411
00417 virtual void SetOperationParameter (const char* op) = 0;
00418
00425 virtual void SetOnChangeOnly (bool on_change) = 0;
00426 };
00427
00445 struct iSequenceFinishTriggerFactory : public virtual iBase
00446 {
00447 SCF_INTERFACE (iSequenceFinishTriggerFactory, 0, 0, 1);
00448
00457 virtual void SetEntityParameter (const char* entity, const char* tag = 0) = 0;
00458
00466 virtual void SetSequenceParameter (const char* sequence) = 0;
00467
00473 virtual void SetSequence (iCelSequence* sequence) = 0;
00474 };
00475
00488 struct iTimeoutTriggerFactory : public virtual iBase
00489 {
00490 SCF_INTERFACE (iTimeoutTriggerFactory, 0, 0, 1);
00491
00497 virtual void SetTimeoutParameter (const char* timeout_par) = 0;
00498 };
00499
00500
00521 struct iTriggerTriggerFactory : public virtual iBase
00522 {
00523 SCF_INTERFACE (iTriggerTriggerFactory, 0, 0, 1);
00524
00533 virtual void SetEntityParameter (const char* entity, const char* tag = 0) = 0;
00534
00539 virtual void EnableLeave () = 0;
00540 };
00541
00567 struct iWatchTriggerFactory : public virtual iBase
00568 {
00569 SCF_INTERFACE (iWatchTriggerFactory, 0, 0, 1);
00570
00579 virtual void SetEntityParameter (const char* entity, const char* tag = 0) = 0;
00580
00589 virtual void SetTargetEntityParameter (const char* entity,
00590 const char* tag = 0) = 0;
00591
00599 virtual void SetChecktimeParameter (const char* time) = 0;
00600
00607 virtual void SetRadiusParameter (const char* radius) = 0;
00608
00616 virtual void SetOffsetParameter (const char* offsetx,
00617 const char* offsety, const char* offsetz) = 0;
00618 };
00619
00620
00621
00625 #define CEL_DECLARE_TRIGGERTYPE(name,id) \
00626 class cel##name##TriggerType : public scfImplementation2< \
00627 cel##name##TriggerType,iTriggerType,iComponent> \
00628 { \
00629 public: \
00630 iObjectRegistry* object_reg; \
00631 csWeakRef<iCelPlLayer> pl; \
00632 cel##name##TriggerType (iBase* parent); \
00633 virtual ~cel##name##TriggerType () { } \
00634 virtual bool Initialize (iObjectRegistry*); \
00635 virtual const char* GetName () const { return id; } \
00636 virtual csPtr<iTriggerFactory> CreateTriggerFactory (); \
00637 };
00638
00642 #define CEL_IMPLEMENT_TRIGGERTYPE(name) \
00643 cel##name##TriggerType::cel##name##TriggerType ( \
00644 iBase* parent) : scfImplementationType (this, parent), \
00645 object_reg(0) \
00646 { \
00647 } \
00648 bool cel##name##TriggerType::Initialize ( \
00649 iObjectRegistry* object_reg) \
00650 { \
00651 cel##name##TriggerType::object_reg = object_reg; \
00652 pl = csQueryRegistry<iCelPlLayer> (object_reg); \
00653 return true; \
00654 } \
00655 csPtr<iTriggerFactory> cel##name##TriggerType::CreateTriggerFactory () \
00656 { \
00657 cel##name##TriggerFactory* fact = new cel##name##TriggerFactory (this); \
00658 return fact; \
00659 }
00660
00661 #endif // __CEL_TRIGGERS__