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.6.1
