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 iCelParameterBlock; 00037 struct iLoaderContext; 00038 struct iCollection; 00039 struct iQuestFactory; 00040 00041 00042 //------------------------------------------------------------------------- 00043 // The Quest 00044 //------------------------------------------------------------------------- 00045 00050 struct iQuest : public virtual iBase 00051 { 00052 SCF_INTERFACE (iQuest, 0, 0, 2); 00053 00058 virtual bool SwitchState (const char* state) = 0; 00059 00063 virtual const char* GetCurrentState () const = 0; 00064 00068 virtual iCelSequence* FindSequence (const char* name) = 0; 00069 00074 virtual void Activate () = 0; 00075 00080 virtual void Deactivate () = 0; 00081 00089 virtual void MarkBaseline () = 0; 00090 00094 virtual bool IsModifiedSinceBaseline () const = 0; 00095 00103 virtual void SaveModifications (iCelCompactDataBufferWriter* buf, iStringSet* strings) = 0; 00104 00111 virtual void RestoreModifications (iCelCompactDataBufferReader* buf, 00112 const csHash<csString,csStringID>& strings) = 0; 00113 }; 00114 00115 struct iRewardFactoryArray : public iArrayChangeAll<iRewardFactory*> 00116 { 00117 SCF_IARRAYCHANGEALL_INTERFACE(iRewardFactoryArray); 00118 }; 00119 00125 struct iQuestTriggerResponseFactory : public virtual iBase 00126 { 00127 SCF_INTERFACE (iQuestTriggerResponseFactory, 0, 0, 1); 00128 00133 virtual void SetTriggerFactory (iTriggerFactory* trigger_fact) = 0; 00134 00138 virtual iTriggerFactory* GetTriggerFactory () const = 0; 00139 00144 virtual void AddRewardFactory (iRewardFactory* reward_fact) = 0; 00145 00149 virtual csRef<iRewardFactoryArray> GetRewardFactories () = 0; 00150 }; 00151 00152 struct iQuestTriggerResponseFactoryArray : public iArrayChangeAll<iQuestTriggerResponseFactory*> 00153 { 00154 SCF_IARRAYCHANGEALL_INTERFACE(iQuestTriggerResponseFactoryArray); 00155 }; 00156 00161 struct iQuestStateFactory : public virtual iBase 00162 { 00163 SCF_INTERFACE (iQuestStateFactory, 0, 1, 1); 00164 00168 virtual const char* GetName () const = 0; 00169 00173 virtual iQuestTriggerResponseFactory* CreateTriggerResponseFactory () = 0; 00174 00178 virtual csRef<iQuestTriggerResponseFactoryArray> GetTriggerResponseFactories () = 0; 00179 00183 virtual void AddInitRewardFactory (iRewardFactory* reward_fact) = 0; 00187 virtual csRef<iRewardFactoryArray> GetInitRewardFactories () = 0; 00188 00192 virtual void AddExitRewardFactory (iRewardFactory* reward_fact) = 0; 00196 virtual csRef<iRewardFactoryArray> GetExitRewardFactories () = 0; 00197 }; 00198 00202 struct iQuestStateFactoryIterator : public virtual iBase 00203 { 00204 SCF_INTERFACE (iQuestStateFactoryIterator, 0, 0, 1); 00205 00206 virtual bool HasNext () const = 0; 00207 virtual iQuestStateFactory* Next () = 0; 00208 }; 00209 00213 struct iCelSequenceFactoryIterator : public virtual iBase 00214 { 00215 SCF_INTERFACE (iCelSequenceFactoryIterator, 0, 0, 1); 00216 00217 virtual bool HasNext () const = 0; 00218 virtual iCelSequenceFactory* Next () = 0; 00219 }; 00220 00224 struct iQuestFactoryIterator : public virtual iBase 00225 { 00226 SCF_INTERFACE (iQuestFactoryIterator, 0, 0, 1); 00227 00228 virtual bool HasNext () const = 0; 00229 virtual iQuestFactory* Next () = 0; 00230 }; 00231 00246 struct iQuestFactory : public virtual iBase 00247 { 00248 SCF_INTERFACE (iQuestFactory, 0, 0, 1); 00249 00250 virtual iObject* QueryObject () = 0; 00251 00255 virtual const char* GetName () const = 0; 00256 00264 virtual csPtr<iQuest> CreateQuest ( 00265 iCelParameterBlock* params) = 0; 00266 00272 virtual bool Load (iDocumentNode* node) = 0; 00273 00279 virtual bool Save (iDocumentNode* node) = 0; 00280 00285 virtual iQuestStateFactory* GetState (const char* name) = 0; 00286 00291 virtual bool RemoveState (const char* name) = 0; 00292 00297 virtual iQuestStateFactory* CreateState (const char* name) = 0; 00298 00302 virtual csRef<iQuestStateFactoryIterator> GetStates () const = 0; 00303 00308 virtual iCelSequenceFactory* GetSequence (const char* name) = 0; 00309 00314 virtual iCelSequenceFactory* CreateSequence (const char* name) = 0; 00315 00320 virtual bool RemoveSequence (const char* name) = 0; 00321 00325 virtual csRef<iCelSequenceFactoryIterator> GetSequences () const = 0; 00326 00331 virtual void SetDefaultParameter (const char* name, const char* value) = 0; 00332 00336 virtual void ClearDefaultParameters () = 0; 00337 00341 virtual iCelParameterBlock* GetDefaultParameters () const = 0; 00342 }; 00343 00344 //------------------------------------------------------------------------- 00345 // The Quest Manager 00346 //------------------------------------------------------------------------- 00347 00353 struct iQuestManager : public virtual iBase 00354 { 00355 SCF_INTERFACE (iQuestManager, 2, 0, 0); 00356 00389 virtual bool RegisterTriggerType (iTriggerType* trigger) = 0; 00390 00395 virtual iTriggerType* GetTriggerType (const char* name) = 0; 00396 00426 virtual bool RegisterRewardType (iRewardType* trigger) = 0; 00427 00432 virtual iRewardType* GetRewardType (const char* name) = 0; 00433 00453 virtual bool RegisterSeqOpType (iSeqOpType* seqop) = 0; 00454 00459 virtual iSeqOpType* GetSeqOpType (const char* name) = 0; 00460 00464 virtual iQuestFactory* GetQuestFactory (const char* name) = 0; 00465 00469 virtual csRef<iQuestFactoryIterator> GetQuestFactories () const = 0; 00470 00474 virtual void RemoveQuestFactory (const char* name) = 0; 00475 00479 virtual void RemoveQuestFactories () = 0; 00480 00486 virtual iQuestFactory* CreateQuestFactory (const char* name) = 0; 00487 00494 virtual bool Load (iDocumentNode* node, iLoaderContext* context) = 0; 00495 00503 virtual bool Save (iDocumentNode* node, iCollection* collection = 0) = 0; 00504 00509 virtual iRewardFactory* AddNewStateReward ( 00510 iQuestTriggerResponseFactory* response, 00511 const char* entity_par, const char* state_par) = 0; 00512 00517 virtual iRewardFactory* AddDebugPrintReward ( 00518 iQuestTriggerResponseFactory* response, 00519 const char* msg) = 0; 00520 00525 virtual iRewardFactory* AddInventoryReward ( 00526 iQuestTriggerResponseFactory* response, 00527 const char* entity_par, const char* child_entity_par) = 0; 00528 00533 virtual iRewardFactory* AddSequenceReward ( 00534 iQuestTriggerResponseFactory* response, 00535 const char* entity_par, const char* sequence_par, 00536 const char* delay_par) = 0; 00537 00538 00543 virtual iRewardFactory* AddCsSequenceReward ( 00544 iQuestTriggerResponseFactory* response, 00545 const char* sequence_par, const char* delay_par) = 0; 00546 00551 virtual iRewardFactory* AddSequenceFinishReward ( 00552 iQuestTriggerResponseFactory* response, 00553 const char* entity_par, const char* sequence_par) = 0; 00554 00560 virtual iChangePropertyRewardFactory* AddChangePropertyReward ( 00561 iQuestTriggerResponseFactory* response, 00562 const char* entity_par, const char* prop_par) = 0; 00563 00570 virtual iRewardFactory* AddCreateEntityReward ( 00571 iQuestTriggerResponseFactory* response, 00572 const char* template_par, 00573 const char* name_par, 00574 iCelParameterBlock* tpl_params) = 0; 00575 00581 virtual iRewardFactory* AddDestroyEntityReward ( 00582 iQuestTriggerResponseFactory* response, 00583 const char* entity_par) = 0; 00584 00589 virtual iRewardFactory* AddChangeClassReward ( 00590 iQuestTriggerResponseFactory* response, 00591 const char* entity_par, 00592 const char* class_par, 00593 bool remove) = 0; 00594 00600 virtual iRewardFactory* AddActionReward ( 00601 iQuestTriggerResponseFactory* response, 00602 const char* entity_par, 00603 const char* id_par, 00604 const char* pcclass_par) = 0; 00605 00611 virtual iRewardFactory* AddMessageReward ( 00612 iQuestTriggerResponseFactory* response, 00613 const char* entity_par, 00614 const char* id_par) = 0; 00615 00620 virtual iTriggerFactory* SetTimeoutTrigger ( 00621 iQuestTriggerResponseFactory* response, 00622 const char* timeout_par) = 0; 00623 00628 virtual iTriggerFactory* SetEnterSectorTrigger ( 00629 iQuestTriggerResponseFactory* response, 00630 const char* entity_par, const char* sector_par) = 0; 00631 00636 virtual iTriggerFactory* SetMeshEnterSectorTrigger ( 00637 iQuestTriggerResponseFactory* response, 00638 const char* entity_par, const char* sector_par) = 0; 00639 00644 virtual iTriggerFactory* SetSequenceFinishTrigger ( 00645 iQuestTriggerResponseFactory* response, 00646 const char* entity_par, const char* sequence_par) = 0; 00647 00652 virtual iTriggerFactory* SetPropertyChangeTrigger ( 00653 iQuestTriggerResponseFactory* response, 00654 const char* entity_par, const char* prop_par, 00655 const char* value_par) = 0; 00656 00661 virtual iTriggerFactory* SetTriggerTrigger ( 00662 iQuestTriggerResponseFactory* response, 00663 const char* entity_par, bool do_leave = false) = 0; 00664 00669 virtual iTriggerFactory* SetWatchTrigger ( 00670 iQuestTriggerResponseFactory* response, 00671 const char* entity_par, const char* target_entity_par, 00672 const char* checktime_par, 00673 const char* radius_par) = 0; 00674 00679 virtual iTriggerFactory* SetOperationTrigger ( 00680 iQuestTriggerResponseFactory* response, 00681 const char* operation_par, 00682 csRefArray<iTriggerFactory> &trigger_factories) = 0; 00683 00688 virtual iTriggerFactory* SetInventoryTrigger ( 00689 iQuestTriggerResponseFactory* response, 00690 const char* entity_par, 00691 const char* child_par) = 0; 00692 00697 virtual iTriggerFactory* SetMessageTrigger ( 00698 iQuestTriggerResponseFactory* response, 00699 const char* entity_par, 00700 const char* mask_par) = 0; 00701 00706 virtual iTriggerFactory* SetMeshSelectTrigger ( 00707 iQuestTriggerResponseFactory* response, 00708 const char* entity_par) = 0; 00709 00710 }; 00711 00712 00713 //------------------------------------------------------------------------- 00714 // Specific reward implementations. 00715 //------------------------------------------------------------------------- 00716 00717 00737 struct iNewStateQuestRewardFactory : public virtual iBase 00738 { 00739 SCF_INTERFACE (iNewStateQuestRewardFactory, 0, 0, 1); 00740 00747 virtual void SetStateParameter (const char* state) = 0; 00748 virtual const char* GetStateParameter () const = 0; 00749 00758 virtual void SetEntityParameter (const char* entity, const char* tag = 0) = 0; 00759 virtual const char* GetEntityParameter () const = 0; 00760 00766 virtual void SetTagParameter (const char* tag_par) = 0; 00767 virtual const char* GetTagParameter () const = 0; 00768 00775 virtual void SetClassParameter (const char* ent_class) = 0; 00776 virtual const char* GetClassParameter () const = 0; 00777 }; 00778 00779 00780 00781 //------------------------------------------------------------------------- 00782 00786 #define CEL_DECLARE_QUESTREWARDTYPE(name,id) \ 00787 class cel##name##RewardType : public scfImplementation1< \ 00788 cel##name##RewardType,iRewardType> \ 00789 { \ 00790 public: \ 00791 iObjectRegistry* object_reg; \ 00792 csWeakRef<iCelPlLayer> pl; \ 00793 cel##name##RewardType (iObjectRegistry* object_reg); \ 00794 virtual ~cel##name##RewardType () { } \ 00795 virtual const char* GetName () const { return id; } \ 00796 virtual csPtr<iRewardFactory> CreateRewardFactory (); \ 00797 }; 00798 00802 #define CEL_IMPLEMENT_QUESTREWARDTYPE(name) \ 00803 cel##name##RewardType::cel##name##RewardType ( \ 00804 iObjectRegistry* object_reg) : scfImplementationType (this) \ 00805 { \ 00806 cel##name##RewardType::object_reg = object_reg; \ 00807 pl = csQueryRegistry<iCelPlLayer> (object_reg); \ 00808 } \ 00809 csPtr<iRewardFactory> cel##name##RewardType::CreateRewardFactory ()\ 00810 { \ 00811 cel##name##RewardFactory* fact = new \ 00812 cel##name##RewardFactory (this); \ 00813 return fact; \ 00814 } 00815 00816 //------------------------------------------------------------------------- 00817 00818 CS_DEPRECATED_METHOD_MSG("Use iParameter instead") 00819 typedef iParameter iQuestParameter; 00820 CS_DEPRECATED_METHOD_MSG("Use iTriggerCallback instead") 00821 typedef iTriggerCallback iQuestTriggerCallback; 00822 CS_DEPRECATED_METHOD_MSG("Use iTrigger instead") 00823 typedef iTrigger iQuestTrigger; 00824 CS_DEPRECATED_METHOD_MSG("Use iTriggerFactory instead") 00825 typedef iTriggerFactory iQuestTriggerFactory; 00826 CS_DEPRECATED_METHOD_MSG("Use iTriggerType instead") 00827 typedef iTriggerType iQuestTriggerType; 00828 CS_DEPRECATED_METHOD_MSG("Use iReward instead") 00829 typedef iReward iQuestReward; 00830 CS_DEPRECATED_METHOD_MSG("Use iRewardFactory instead") 00831 typedef iRewardFactory iQuestRewardFactory; 00832 CS_DEPRECATED_METHOD_MSG("Use iRewardType instead") 00833 typedef iRewardType iQuestRewardType; 00834 CS_DEPRECATED_METHOD_MSG("Use iSeqOp instead") 00835 typedef iSeqOp iQuestSeqOp; 00836 CS_DEPRECATED_METHOD_MSG("Use iSeqOpFactory instead") 00837 typedef iSeqOpFactory iQuestSeqOpFactory; 00838 CS_DEPRECATED_METHOD_MSG("Use iSeqOpType instead") 00839 typedef iSeqOpType iQuestSeqOpType; 00840 CS_DEPRECATED_METHOD_MSG("Use iCelSequenceCallback instead") 00841 typedef iCelSequenceCallback iQuestSequenceCallback; 00842 CS_DEPRECATED_METHOD_MSG("Use iCelSequence instead") 00843 typedef iCelSequence iQuestSequence; 00844 CS_DEPRECATED_METHOD_MSG("Use iCelSequenceFactory instead") 00845 typedef iCelSequenceFactory iQuestSequenceFactory; 00846 CS_DEPRECATED_METHOD_MSG("Use iTimeoutTriggerFactory instead") 00847 typedef iTimeoutTriggerFactory iTimeoutQuestTriggerFactory; 00848 CS_DEPRECATED_METHOD_MSG("Use iPropertyChangeTriggerFactory instead") 00849 typedef iPropertyChangeTriggerFactory iPropertyChangeQuestTriggerFactory; 00850 CS_DEPRECATED_METHOD_MSG("Use iMeshSelectTriggerFactory instead") 00851 typedef iMeshSelectTriggerFactory iMeshSelectQuestTriggerFactory; 00852 CS_DEPRECATED_METHOD_MSG("Use iInventoryTriggerFactory instead") 00853 typedef iInventoryTriggerFactory iInventoryQuestTriggerFactory; 00854 CS_DEPRECATED_METHOD_MSG("Use iEnterSectorTriggerFactory instead") 00855 typedef iEnterSectorTriggerFactory iEnterSectorQuestTriggerFactory; 00856 CS_DEPRECATED_METHOD_MSG("Use iOperationTriggerFactory instead") 00857 typedef iOperationTriggerFactory iOperationQuestTriggerFactory; 00858 CS_DEPRECATED_METHOD_MSG("Use iSequenceFinishTriggerFactory instead") 00859 typedef iSequenceFinishTriggerFactory iSequenceFinishQuestTriggerFactory; 00860 CS_DEPRECATED_METHOD_MSG("Use iTriggerTriggerFactory instead") 00861 typedef iTriggerTriggerFactory iTriggerQuestTriggerFactory; 00862 CS_DEPRECATED_METHOD_MSG("Use iMessageTriggerFactory instead") 00863 typedef iMessageTriggerFactory iMessageQuestTriggerFactory; 00864 CS_DEPRECATED_METHOD_MSG("Use iWatchTriggerFactory instead") 00865 typedef iWatchTriggerFactory iWatchQuestTriggerFactory; 00866 CS_DEPRECATED_METHOD_MSG("Use iDebugPrintRewardFactory instead") 00867 typedef iDebugPrintRewardFactory iDebugPrintQuestRewardFactory; 00868 CS_DEPRECATED_METHOD_MSG("Use iChangePropertyRewardFactory instead") 00869 typedef iChangePropertyRewardFactory iChangePropertyQuestRewardFactory; 00870 CS_DEPRECATED_METHOD_MSG("Use iInventoryRewardFactory instead") 00871 typedef iInventoryRewardFactory iInventoryQuestRewardFactory; 00872 CS_DEPRECATED_METHOD_MSG("Use iCsSequenceRewardFactory instead") 00873 typedef iCsSequenceRewardFactory iCsSequenceQuestRewardFactory; 00874 CS_DEPRECATED_METHOD_MSG("Use iSequenceRewardFactory instead") 00875 typedef iSequenceRewardFactory iSequenceQuestRewardFactory; 00876 CS_DEPRECATED_METHOD_MSG("Use iSequenceFinishRewardFactory instead") 00877 typedef iSequenceFinishRewardFactory iSequenceFinishQuestRewardFactory; 00878 CS_DEPRECATED_METHOD_MSG("Use iMessageRewardFactory instead") 00879 typedef iMessageRewardFactory iMessageQuestRewardFactory; 00880 CS_DEPRECATED_METHOD_MSG("Use iActionRewardFactory instead") 00881 typedef iActionRewardFactory iActionQuestRewardFactory; 00882 CS_DEPRECATED_METHOD_MSG("Use iDestroyEntityRewardFactory instead") 00883 typedef iDestroyEntityRewardFactory iDestroyEntityQuestRewardFactory; 00884 CS_DEPRECATED_METHOD_MSG("Use iCreateEntityRewardFactory instead") 00885 typedef iCreateEntityRewardFactory iCreateEntityQuestRewardFactory; 00886 CS_DEPRECATED_METHOD_MSG("Use iDebugPrintSeqOpFactory instead") 00887 typedef iDebugPrintSeqOpFactory iDebugPrintQuestSeqOpFactory; 00888 CS_DEPRECATED_METHOD_MSG("Use iTransformSeqOpFactory instead") 00889 typedef iTransformSeqOpFactory iTransformQuestSeqOpFactory; 00890 CS_DEPRECATED_METHOD_MSG("Use iMovePathSeqOpFactory instead") 00891 typedef iMovePathSeqOpFactory iMovePathQuestSeqOpFactory; 00892 CS_DEPRECATED_METHOD_MSG("Use iLightSeqOpFactory instead") 00893 typedef iLightSeqOpFactory iLightQuestSeqOpFactory; 00894 CS_DEPRECATED_METHOD_MSG("Use iPropertySeqOpFactory instead") 00895 typedef iPropertySeqOpFactory iPropertyQuestSeqOpFactory; 00896 00897 #endif // __CEL_MGR_QUEST__
Generated for CEL: Crystal Entity Layer 2.1 by doxygen 1.6.1
