tools/triggers.h
00001 /* 00002 Crystal Space Entity Layer 00003 Copyright (C) 2004-2006 by Jorrit Tyberghein 00004 00005 This library is free software; you can redistribute it and/or 00006 modify it under the terms of the GNU Library General Public 00007 License as published by the Free Software Foundation; either 00008 version 2 of the License, or (at your option) any later version. 00009 00010 This library is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 Library General Public License for more details. 00014 00015 You should have received a copy of the GNU Library General Public 00016 License along with this library; if not, write to the Free 00017 Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 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 struct iQuest; 00028 struct iCelParameterBlock; 00029 00030 //------------------------------------------------------------------------- 00031 // Triggers 00032 //------------------------------------------------------------------------- 00033 00034 struct iTrigger; 00035 struct iTriggerType; 00036 00041 struct iTriggerCallback : public virtual iBase 00042 { 00043 SCF_INTERFACE (iTriggerCallback, 0, 0, 1); 00044 00046 virtual void TriggerFired (iTrigger* trigger, iCelParameterBlock* params) = 0; 00047 }; 00048 00056 struct iTrigger : public virtual iBase 00057 { 00058 SCF_INTERFACE (iTrigger, 0, 0, 2); 00059 00064 virtual void RegisterCallback (iTriggerCallback* callback) = 0; 00065 00069 virtual void ClearCallback () = 0; 00070 00074 virtual void ActivateTrigger () = 0; 00075 00079 virtual void DeactivateTrigger () = 0; 00080 00088 virtual bool Check () = 0; 00089 00097 virtual void Activate () = 0; 00098 00104 virtual void Deactivate () = 0; 00105 }; 00106 00111 struct iTriggerFactory : public virtual iBase 00112 { 00113 SCF_INTERFACE (iTriggerFactory, 0, 0, 1); 00114 00118 virtual iTriggerType* GetTriggerType () const = 0; 00119 00125 virtual csPtr<iTrigger> CreateTrigger ( 00126 iQuest* q, iCelParameterBlock* params) = 0; 00127 00133 virtual bool Load (iDocumentNode* node) = 0; 00134 00140 virtual bool Save (iDocumentNode* node) = 0; 00141 }; 00142 00151 struct iTriggerType : public virtual iBase 00152 { 00153 SCF_INTERFACE (iTriggerType, 0, 0, 1); 00154 00158 virtual const char* GetName () const = 0; 00159 00163 virtual csPtr<iTriggerFactory> CreateTriggerFactory () = 0; 00164 }; 00165 00166 //------------------------------------------------------------------------- 00167 // Specific trigger implementations. 00168 //------------------------------------------------------------------------- 00189 struct iEnterSectorTriggerFactory : public virtual iBase 00190 { 00191 SCF_INTERFACE (iEnterSectorTriggerFactory, 0, 0, 1); 00192 00201 virtual void SetEntityParameter (const char* entity, const char* tag = 0) = 0; 00202 virtual const char* GetEntity () const = 0; 00203 virtual const char* GetTag () const = 0; 00204 00211 virtual void SetSectorParameter (const char* sector) = 0; 00212 virtual const char* GetSector () const = 0; 00213 }; 00214 00239 struct iInventoryTriggerFactory : public virtual iBase 00240 { 00241 SCF_INTERFACE (iInventoryTriggerFactory, 0, 0, 1); 00242 00251 virtual void SetEntityParameter (const char* entity, const char* tag = 0) = 0; 00252 virtual const char* GetEntity () const = 0; 00253 virtual const char* GetTag () const = 0; 00254 00262 virtual void SetChildEntityParameter (const char* child_entity) = 0; 00263 virtual const char* GetChildEntity () const = 0; 00264 00272 virtual void SetChildTemplateParameter (const char* child_template) = 0; 00273 virtual const char* GetChildTemplate () const = 0; 00274 }; 00275 00294 struct iMeshSelectTriggerFactory : public virtual iBase 00295 { 00296 SCF_INTERFACE (iMeshSelectTriggerFactory, 0, 0, 1); 00297 00306 virtual void SetEntityParameter (const char* entity, const char* tag = 0) = 0; 00307 virtual const char* GetEntity () const = 0; 00308 virtual const char* GetTag () const = 0; 00309 }; 00310 00325 struct iMessageTriggerFactory : public virtual iBase 00326 { 00327 SCF_INTERFACE (iMessageTriggerFactory, 0, 0, 1); 00328 00334 virtual void SetEntityParameter (const char* entity) = 0; 00335 virtual const char* GetEntity () const = 0; 00336 00343 virtual void SetMaskParameter (const char* mask) = 0; 00344 virtual const char* GetMask () const = 0; 00345 }; 00346 00347 00371 struct iOperationTriggerFactory : public virtual iBase 00372 { 00373 SCF_INTERFACE (iOperationTriggerFactory, 0, 0, 1); 00374 00381 virtual void SetOperationParameter (const char* operation) = 0; 00382 virtual const char* GetOperation () const = 0; 00383 00388 virtual csRefArray<iTriggerFactory> &GetTriggerFactories () = 0; 00389 }; 00390 00428 struct iPropertyChangeTriggerFactory : public virtual iBase 00429 { 00430 SCF_INTERFACE (iPropertyChangeTriggerFactory, 0, 0, 1); 00431 00440 virtual void SetEntityParameter (const char* entity, const char* tag = 0) = 0; 00441 virtual const char* GetEntity () const = 0; 00442 virtual const char* GetTag () const = 0; 00443 00449 virtual void SetPropertyParameter (const char* prop) = 0; 00450 virtual const char* GetProperty () const = 0; 00451 00458 virtual void SetValueParameter (const char* value) = 0; 00459 virtual const char* GetValue () const = 0; 00460 00466 virtual void SetOperationParameter (const char* op) = 0; 00467 virtual const char* GetOperation () const = 0; 00468 00475 virtual void SetOnChangeOnly (bool on_change) = 0; 00476 virtual bool IsOnChangeOnly () const = 0; 00477 }; 00478 00496 struct iSequenceFinishTriggerFactory : public virtual iBase 00497 { 00498 SCF_INTERFACE (iSequenceFinishTriggerFactory, 0, 0, 1); 00499 00508 virtual void SetEntityParameter (const char* entity, const char* tag = 0) = 0; 00509 virtual const char* GetEntity () const = 0; 00510 virtual const char* GetTag () const = 0; 00511 00519 virtual void SetSequenceParameter (const char* sequence) = 0; 00520 virtual const char* GetSequence () const = 0; 00521 00527 virtual void SetSequence (iCelSequence* sequence) = 0; 00528 }; 00529 00542 struct iTimeoutTriggerFactory : public virtual iBase 00543 { 00544 SCF_INTERFACE (iTimeoutTriggerFactory, 0, 0, 1); 00545 00551 virtual void SetTimeoutParameter (const char* timeout_par) = 0; 00552 virtual const char* GetTimeout () const = 0; 00553 }; 00554 00555 00576 struct iTriggerTriggerFactory : public virtual iBase 00577 { 00578 SCF_INTERFACE (iTriggerTriggerFactory, 0, 0, 1); 00579 00588 virtual void SetEntityParameter (const char* entity, const char* tag = 0) = 0; 00589 virtual const char* GetEntity () const = 0; 00590 virtual const char* GetTag () const = 0; 00591 00596 virtual void EnableLeave (bool l) = 0; 00597 virtual bool IsLeaveEnabled () const = 0; 00598 }; 00599 00625 struct iWatchTriggerFactory : public virtual iBase 00626 { 00627 SCF_INTERFACE (iWatchTriggerFactory, 0, 0, 1); 00628 00637 virtual void SetEntityParameter (const char* entity, const char* tag = 0) = 0; 00638 virtual const char* GetEntity () const = 0; 00639 virtual const char* GetTag () const = 0; 00640 00649 virtual void SetTargetEntityParameter (const char* entity, 00650 const char* tag = 0) = 0; 00651 virtual const char* GetTargetEntity () const = 0; 00652 virtual const char* GetTargetTag () const = 0; 00653 00661 virtual void SetChecktimeParameter (const char* time) = 0; 00662 virtual const char* GetChecktime () const = 0; 00663 00670 virtual void SetRadiusParameter (const char* radius) = 0; 00671 virtual const char* GetRadius () const = 0; 00672 00680 virtual void SetOffsetParameter (const char* offsetx, 00681 const char* offsety, const char* offsetz) = 0; 00682 virtual const char* GetOffsetX () const = 0; 00683 virtual const char* GetOffsetY () const = 0; 00684 virtual const char* GetOffsetZ () const = 0; 00685 }; 00686 00687 //------------------------------------------------------------------------- 00688 00692 #define CEL_DECLARE_TRIGGERTYPE(name,id) \ 00693 class cel##name##TriggerType : public scfImplementation2< \ 00694 cel##name##TriggerType,iTriggerType,iComponent> \ 00695 { \ 00696 public: \ 00697 iObjectRegistry* object_reg; \ 00698 csWeakRef<iCelPlLayer> pl; \ 00699 cel##name##TriggerType (iBase* parent); \ 00700 virtual ~cel##name##TriggerType () { } \ 00701 virtual bool Initialize (iObjectRegistry*); \ 00702 virtual const char* GetName () const { return id; } \ 00703 virtual csPtr<iTriggerFactory> CreateTriggerFactory (); \ 00704 }; 00705 00709 #define CEL_IMPLEMENT_TRIGGERTYPE(name) \ 00710 cel##name##TriggerType::cel##name##TriggerType ( \ 00711 iBase* parent) : scfImplementationType (this, parent), \ 00712 object_reg(0) \ 00713 { \ 00714 } \ 00715 bool cel##name##TriggerType::Initialize ( \ 00716 iObjectRegistry* object_reg) \ 00717 { \ 00718 cel##name##TriggerType::object_reg = object_reg; \ 00719 pl = csQueryRegistry<iCelPlLayer> (object_reg); \ 00720 return true; \ 00721 } \ 00722 csPtr<iTriggerFactory> cel##name##TriggerType::CreateTriggerFactory () \ 00723 { \ 00724 cel##name##TriggerFactory* fact = new cel##name##TriggerFactory (this); \ 00725 return fact; \ 00726 } 00727 00728 #endif // __CEL_TRIGGERS__
Generated for CEL: Crystal Entity Layer 2.1 by doxygen 1.6.1
