CEL

Public API Reference

tools/questmanager.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_MGR_QUEST__
00021 #define __CEL_MGR_QUEST__
00022 
00023 #include "cstypes.h"
00024 #include "csutil/scf.h"
00025 #include "csutil/weakref.h"
00026 #include "csutil/hash.h"
00027 #include "csgeom/vector3.h"
00028 #include "csutil/refarr.h"
00029 #include "tools/rewards.h"
00030 #include "tools/sequences.h"
00031 #include "tools/triggers.h"
00032 #include "physicallayer/pl.h"
00033 
00034 struct iDocumentNode;
00035 struct iChangePropertyRewardFactory;
00036 struct iCelDataBuffer;
00037 struct iCelParameterBlock;
00038 
00039 class celQuestManager;
00040 
00041 
00042 //-------------------------------------------------------------------------
00043 // The Quest
00044 //-------------------------------------------------------------------------
00045 
00050 struct iQuest : public virtual iBase
00051 {
00052   SCF_INTERFACE (iQuest, 0, 0, 1);
00053 
00058   virtual bool SwitchState (const char* state) = 0;
00059 
00063   virtual const char* GetCurrentState () const = 0;
00064 
00070   virtual bool LoadState (const char* state, iCelDataBuffer* databuf) = 0;
00071 
00076   virtual void SaveState (iCelDataBuffer* databuf) = 0;
00077 
00081   virtual iCelSequence*   FindSequence (const char* name) = 0;
00082 };
00083 
00089 struct iQuestTriggerResponseFactory : public virtual iBase
00090 {
00091   SCF_INTERFACE (iQuestTriggerResponseFactory, 0, 0, 1);
00092 
00097   virtual void SetTriggerFactory (iTriggerFactory* trigger_fact) = 0;
00098 
00103   virtual void AddRewardFactory (iRewardFactory* reward_fact) = 0;
00104 };
00105 
00110 struct iQuestStateFactory : public virtual iBase
00111 {
00112   SCF_INTERFACE (iQuestStateFactory, 0, 0, 1);
00113 
00117   virtual const char* GetName () const = 0;
00118 
00122   virtual iQuestTriggerResponseFactory* CreateTriggerResponseFactory () = 0;
00123 
00127   virtual void AddInitRewardFactory (iRewardFactory* reward_fact) = 0;
00128 
00132   virtual void AddExitRewardFactory (iRewardFactory* reward_fact) = 0;
00133 };
00134 
00135 
00150 struct iQuestFactory : public virtual iBase
00151 {
00152   SCF_INTERFACE (iQuestFactory, 0, 0, 1);
00153 
00154   virtual celQuestManager* GetQuestManager () const = 0;
00155 
00159   virtual const char* GetName () const = 0;
00160   
00168   virtual csPtr<iQuest> CreateQuest (
00169           const celParams& params) = 0;
00170 
00176   virtual bool Load (iDocumentNode* node) = 0;
00177 
00182   virtual iQuestStateFactory* GetState (const char* name) = 0;
00183 
00188   virtual iQuestStateFactory* CreateState (const char* name) = 0;
00189 
00194   virtual iCelSequenceFactory* GetSequence (const char* name) = 0;
00195 
00200   virtual iCelSequenceFactory* CreateSequence (const char* name) = 0;
00201 
00206   virtual const char* GetDefaultParameter (const char* name) const = 0;
00207 
00212   virtual void SetDefaultParameter (const char* name,const char* value) = 0;
00213   
00217   virtual void ClearDefaultParameters () = 0;
00218 
00219 };
00220 
00221 //-------------------------------------------------------------------------
00222 // The Quest Manager
00223 //-------------------------------------------------------------------------
00224 
00230 struct iQuestManager : public virtual iBase
00231 {
00232   SCF_INTERFACE (iQuestManager, 2, 0, 0);
00233 
00266   virtual bool RegisterTriggerType (iTriggerType* trigger) = 0;
00267 
00272   virtual iTriggerType* GetTriggerType (const char* name) = 0;
00273 
00303   virtual bool RegisterRewardType (iRewardType* trigger) = 0;
00304 
00309   virtual iRewardType* GetRewardType (const char* name) = 0;
00310 
00330   virtual bool RegisterSeqOpType (iSeqOpType* seqop) = 0;
00331 
00336   virtual iSeqOpType* GetSeqOpType (const char* name) = 0;
00337 
00341   virtual iQuestFactory* GetQuestFactory (const char* name) = 0;
00342 
00346   virtual void RemoveQuestFactory (const char* name) = 0;
00347 
00351   virtual void RemoveQuestFactories () = 0;
00352 
00358   virtual iQuestFactory* CreateQuestFactory (const char* name) = 0;
00359 
00365   virtual bool Load (iDocumentNode* node) = 0;
00366 
00371   virtual iRewardFactory* AddNewStateReward (
00372         iQuestTriggerResponseFactory* response,
00373         const char* entity_par, const char* state_par) = 0;
00374 
00379   virtual iRewardFactory* AddDebugPrintReward (
00380         iQuestTriggerResponseFactory* response,
00381         const char* msg) = 0;
00382 
00387   virtual iRewardFactory* AddInventoryReward (
00388         iQuestTriggerResponseFactory* response,
00389         const char* entity_par, const char* child_entity_par) = 0;
00390 
00395   virtual iRewardFactory* AddSequenceReward (
00396         iQuestTriggerResponseFactory* response,
00397         const char* entity_par, const char* sequence_par,
00398         const char* delay_par) = 0;
00399 
00400 
00405   virtual iRewardFactory* AddCsSequenceReward (
00406         iQuestTriggerResponseFactory* response,
00407         const char* sequence_par, const char* delay_par) = 0;
00408 
00413   virtual iRewardFactory* AddSequenceFinishReward (
00414         iQuestTriggerResponseFactory* response,
00415         const char* entity_par, const char* sequence_par) = 0;
00416 
00422   virtual iChangePropertyRewardFactory* AddChangePropertyReward (
00423         iQuestTriggerResponseFactory* response,
00424         const char* entity_par, const char* prop_par) = 0;
00425 
00432   virtual iRewardFactory* AddCreateEntityReward (
00433         iQuestTriggerResponseFactory* response,
00434         const char* template_par,
00435         const char* name_par,
00436     const celEntityTemplateParams &tpl_params) = 0;
00437 
00443   virtual iRewardFactory* AddDestroyEntityReward(
00444         iQuestTriggerResponseFactory* response,
00445         const char* entity_par) = 0;
00446 
00452   virtual iRewardFactory* AddActionReward (
00453         iQuestTriggerResponseFactory* response,
00454         const char* entity_par,
00455         const char* id_par,
00456         const char* pcclass_par) = 0;
00457 
00463   virtual iRewardFactory* AddMessageReward (
00464         iQuestTriggerResponseFactory* response,
00465         const char* entity_par,
00466         const char* id_par) = 0;
00467 
00472   virtual iTriggerFactory* SetTimeoutTrigger (
00473         iQuestTriggerResponseFactory* response,
00474         const char* timeout_par) = 0;
00475 
00480   virtual iTriggerFactory* SetEnterSectorTrigger (
00481         iQuestTriggerResponseFactory* response,
00482         const char* entity_par, const char* sector_par) = 0;
00483 
00488   virtual iTriggerFactory* SetMeshEnterSectorTrigger (
00489         iQuestTriggerResponseFactory* response,
00490         const char* entity_par, const char* sector_par) = 0;
00491 
00496   virtual iTriggerFactory* SetSequenceFinishTrigger (
00497         iQuestTriggerResponseFactory* response,
00498         const char* entity_par, const char* sequence_par) = 0;
00499 
00504   virtual iTriggerFactory* SetPropertyChangeTrigger (
00505         iQuestTriggerResponseFactory* response,
00506         const char* entity_par, const char* prop_par,
00507         const char* value_par) = 0;
00508 
00513   virtual iTriggerFactory* SetTriggerTrigger (
00514         iQuestTriggerResponseFactory* response,
00515         const char* entity_par, bool do_leave = false) = 0;
00516 
00521   virtual iTriggerFactory* SetWatchTrigger (
00522         iQuestTriggerResponseFactory* response,
00523         const char* entity_par, const char* target_entity_par,
00524         const char* checktime_par,
00525         const char* radius_par) = 0;
00526 
00531   virtual iTriggerFactory* SetOperationTrigger (
00532         iQuestTriggerResponseFactory* response,
00533         const char* operation_par, 
00534         csRefArray<iTriggerFactory> &trigger_factories) = 0;
00535 
00540   virtual iTriggerFactory* SetInventoryTrigger (
00541         iQuestTriggerResponseFactory* response,
00542         const char* entity_par,
00543         const char* child_par) = 0;
00544 
00549   virtual iTriggerFactory* SetMessageTrigger (
00550         iQuestTriggerResponseFactory* response,
00551         const char* entity_par,
00552         const char* mask_par) = 0;
00553 
00558   virtual iTriggerFactory* SetMeshSelectTrigger (
00559         iQuestTriggerResponseFactory* response,
00560         const char* entity_par) = 0;
00561 
00562 };
00563 
00564 
00565 //-------------------------------------------------------------------------
00566 // Specific reward implementations.
00567 //-------------------------------------------------------------------------
00568 
00569 
00589 struct iNewStateQuestRewardFactory : public virtual iBase
00590 {
00591   SCF_INTERFACE (iNewStateQuestRewardFactory, 0, 0, 1);
00592 
00599   virtual void SetStateParameter (const char* state) = 0;
00600 
00609   virtual void SetEntityParameter (const char* entity, const char* tag = 0) = 0;
00610 
00616   virtual void SetTagParameter (const char* tag_par) = 0;
00617 
00624   virtual void SetClassParameter (const char* ent_class) = 0;
00625 };
00626 
00627 
00628 
00629 //-------------------------------------------------------------------------
00630 
00634 #define CEL_DECLARE_QUESTREWARDTYPE(name,id)                                    \
00635 class cel##name##RewardType : public scfImplementation1<                \
00636                 cel##name##RewardType,iRewardType>                      \
00637 {                                                                       \
00638 public:                                                                 \
00639   iObjectRegistry* object_reg;                                          \
00640   csWeakRef<iCelPlLayer> pl;                                            \
00641   cel##name##RewardType (iObjectRegistry* object_reg);                  \
00642   virtual ~cel##name##RewardType () { }                                 \
00643   virtual const char* GetName () const { return id; }                   \
00644   virtual csPtr<iRewardFactory> CreateRewardFactory ();         \
00645 };
00646 
00650 #define CEL_IMPLEMENT_QUESTREWARDTYPE(name)                                     \
00651 cel##name##RewardType::cel##name##RewardType (                          \
00652         iObjectRegistry* object_reg) : scfImplementationType (this)     \
00653 {                                                                       \
00654   cel##name##RewardType::object_reg = object_reg;                       \
00655   pl = csQueryRegistry<iCelPlLayer> (object_reg);                       \
00656 }                                                                       \
00657 csPtr<iRewardFactory> cel##name##RewardType::CreateRewardFactory ()\
00658 {                                                                       \
00659   cel##name##RewardFactory* fact = new                                  \
00660         cel##name##RewardFactory (this);                                \
00661   return fact;                                                          \
00662 }
00663 
00664 //-------------------------------------------------------------------------
00665 
00666 CS_DEPRECATED_METHOD_MSG("Use iParameter instead")
00667 typedef iParameter iQuestParameter;
00668 CS_DEPRECATED_METHOD_MSG("Use iTriggerCallback instead")
00669 typedef iTriggerCallback iQuestTriggerCallback;
00670 CS_DEPRECATED_METHOD_MSG("Use iTrigger instead")
00671 typedef iTrigger iQuestTrigger;
00672 CS_DEPRECATED_METHOD_MSG("Use iTriggerFactory instead")
00673 typedef iTriggerFactory iQuestTriggerFactory;
00674 CS_DEPRECATED_METHOD_MSG("Use iTriggerType instead")
00675 typedef iTriggerType iQuestTriggerType;
00676 CS_DEPRECATED_METHOD_MSG("Use iReward instead")
00677 typedef iReward iQuestReward;
00678 CS_DEPRECATED_METHOD_MSG("Use iRewardFactory instead")
00679 typedef iRewardFactory iQuestRewardFactory;
00680 CS_DEPRECATED_METHOD_MSG("Use iRewardType instead")
00681 typedef iRewardType iQuestRewardType;
00682 CS_DEPRECATED_METHOD_MSG("Use iSeqOp instead")
00683 typedef iSeqOp iQuestSeqOp;
00684 CS_DEPRECATED_METHOD_MSG("Use iSeqOpFactory instead")
00685 typedef iSeqOpFactory iQuestSeqOpFactory;
00686 CS_DEPRECATED_METHOD_MSG("Use iSeqOpType instead")
00687 typedef iSeqOpType iQuestSeqOpType;
00688 CS_DEPRECATED_METHOD_MSG("Use iCelSequenceCallback instead")
00689 typedef iCelSequenceCallback iQuestSequenceCallback;
00690 CS_DEPRECATED_METHOD_MSG("Use iCelSequence instead")
00691 typedef iCelSequence iQuestSequence;
00692 CS_DEPRECATED_METHOD_MSG("Use iCelSequenceFactory instead")
00693 typedef iCelSequenceFactory iQuestSequenceFactory;
00694 CS_DEPRECATED_METHOD_MSG("Use iTimeoutTriggerFactory instead")
00695 typedef iTimeoutTriggerFactory iTimeoutQuestTriggerFactory;
00696 CS_DEPRECATED_METHOD_MSG("Use iPropertyChangeTriggerFactory instead")
00697 typedef iPropertyChangeTriggerFactory iPropertyChangeQuestTriggerFactory;
00698 CS_DEPRECATED_METHOD_MSG("Use iMeshSelectTriggerFactory instead")
00699 typedef iMeshSelectTriggerFactory iMeshSelectQuestTriggerFactory;
00700 CS_DEPRECATED_METHOD_MSG("Use iInventoryTriggerFactory instead")
00701 typedef iInventoryTriggerFactory iInventoryQuestTriggerFactory;
00702 CS_DEPRECATED_METHOD_MSG("Use iEnterSectorTriggerFactory instead")
00703 typedef iEnterSectorTriggerFactory iEnterSectorQuestTriggerFactory;
00704 CS_DEPRECATED_METHOD_MSG("Use iOperationTriggerFactory instead")
00705 typedef iOperationTriggerFactory iOperationQuestTriggerFactory;
00706 CS_DEPRECATED_METHOD_MSG("Use iSequenceFinishTriggerFactory instead")
00707 typedef iSequenceFinishTriggerFactory iSequenceFinishQuestTriggerFactory;
00708 CS_DEPRECATED_METHOD_MSG("Use iTriggerTriggerFactory instead")
00709 typedef iTriggerTriggerFactory iTriggerQuestTriggerFactory;
00710 CS_DEPRECATED_METHOD_MSG("Use iMessageTriggerFactory instead")
00711 typedef iMessageTriggerFactory iMessageQuestTriggerFactory;
00712 CS_DEPRECATED_METHOD_MSG("Use iWatchTriggerFactory instead")
00713 typedef iWatchTriggerFactory iWatchQuestTriggerFactory;
00714 CS_DEPRECATED_METHOD_MSG("Use iDebugPrintRewardFactory instead")
00715 typedef iDebugPrintRewardFactory iDebugPrintQuestRewardFactory;
00716 CS_DEPRECATED_METHOD_MSG("Use iChangePropertyRewardFactory instead")
00717 typedef iChangePropertyRewardFactory iChangePropertyQuestRewardFactory;
00718 CS_DEPRECATED_METHOD_MSG("Use iInventoryRewardFactory instead")
00719 typedef iInventoryRewardFactory iInventoryQuestRewardFactory;
00720 CS_DEPRECATED_METHOD_MSG("Use iCsSequenceRewardFactory instead")
00721 typedef iCsSequenceRewardFactory iCsSequenceQuestRewardFactory;
00722 CS_DEPRECATED_METHOD_MSG("Use iSequenceRewardFactory instead")
00723 typedef iSequenceRewardFactory iSequenceQuestRewardFactory;
00724 CS_DEPRECATED_METHOD_MSG("Use iSequenceFinishRewardFactory instead")
00725 typedef iSequenceFinishRewardFactory iSequenceFinishQuestRewardFactory;
00726 CS_DEPRECATED_METHOD_MSG("Use iMessageRewardFactory instead")
00727 typedef iMessageRewardFactory iMessageQuestRewardFactory;
00728 CS_DEPRECATED_METHOD_MSG("Use iActionRewardFactory instead")
00729 typedef iActionRewardFactory iActionQuestRewardFactory;
00730 CS_DEPRECATED_METHOD_MSG("Use iDestroyEntityRewardFactory instead")
00731 typedef iDestroyEntityRewardFactory iDestroyEntityQuestRewardFactory;
00732 CS_DEPRECATED_METHOD_MSG("Use iCreateEntityRewardFactory instead")
00733 typedef iCreateEntityRewardFactory iCreateEntityQuestRewardFactory;
00734 CS_DEPRECATED_METHOD_MSG("Use iDebugPrintSeqOpFactory instead")
00735 typedef iDebugPrintSeqOpFactory iDebugPrintQuestSeqOpFactory;
00736 CS_DEPRECATED_METHOD_MSG("Use iTransformSeqOpFactory instead")
00737 typedef iTransformSeqOpFactory iTransformQuestSeqOpFactory;
00738 CS_DEPRECATED_METHOD_MSG("Use iMovePathSeqOpFactory instead")
00739 typedef iMovePathSeqOpFactory iMovePathQuestSeqOpFactory;
00740 CS_DEPRECATED_METHOD_MSG("Use iLightSeqOpFactory instead")
00741 typedef iLightSeqOpFactory iLightQuestSeqOpFactory;
00742 CS_DEPRECATED_METHOD_MSG("Use iPropertySeqOpFactory instead")
00743 typedef iPropertySeqOpFactory iPropertyQuestSeqOpFactory;
00744 
00745 #endif // __CEL_MGR_QUEST__

Generated for CEL: Crystal Entity Layer 2.0 by doxygen 1.7.6.1