tools/sequences.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_SEQUENCES__ 00021 #define __CEL_SEQUENCES__ 00022 00023 #include "behaviourlayer/behave.h" 00024 #include "tools/parameters.h" 00025 00026 00027 //------------------------------------------------------------------------- 00028 // Sequence operations 00029 //------------------------------------------------------------------------- 00030 00037 struct iSeqOp : public virtual iBase 00038 { 00039 SCF_INTERFACE (iSeqOp, 0, 0, 1); 00040 00047 virtual void Init (iCelParameterBlock* params) = 0; 00048 00052 virtual bool Load (iCelDataBuffer* databuf) = 0; 00053 00057 virtual void Save (iCelDataBuffer* databuf) = 0; 00058 00064 virtual void Do (float time, iCelParameterBlock* params) = 0; 00065 }; 00066 00071 struct iSeqOpFactory : public virtual iBase 00072 { 00073 SCF_INTERFACE (iSeqOpFactory, 0, 0, 1); 00074 00080 virtual csPtr<iSeqOp> CreateSeqOp (const celParams& params) = 0; 00081 00087 virtual bool Load (iDocumentNode* node) = 0; 00088 }; 00089 00095 struct iSeqOpType : public virtual iBase 00096 { 00097 SCF_INTERFACE (iSeqOpType, 0, 0, 1); 00098 00102 virtual const char* GetName () const = 0; 00103 00107 virtual csPtr<iSeqOpFactory> CreateSeqOpFactory () = 0; 00108 }; 00109 00110 struct iCelSequence; 00111 00116 struct iCelSequenceCallback : public virtual iBase 00117 { 00118 SCF_INTERFACE (iCelSequenceCallback, 0, 0, 1); 00119 00121 virtual void SequenceFinished (iCelSequence* sequence) = 0; 00122 }; 00123 00127 struct iCelSequence : public virtual iBase 00128 { 00129 SCF_INTERFACE (iCelSequence, 0, 0, 1); 00130 00134 virtual const char* GetName () const = 0; 00135 00139 virtual void SaveState (iCelDataBuffer* databuf) = 0; 00143 virtual bool LoadState (iCelDataBuffer* databuf) = 0; 00144 00150 virtual bool Start (csTicks delay, iCelParameterBlock* params) = 0; 00151 00158 virtual void Finish () = 0; 00159 00165 virtual void Abort () = 0; 00166 00170 virtual bool IsRunning () = 0; 00171 00175 virtual void AddSequenceCallback (iCelSequenceCallback* cb) = 0; 00179 virtual void RemoveSequenceCallback (iCelSequenceCallback* cb) = 0; 00180 }; 00181 00186 struct iCelSequenceFactory : public virtual iBase 00187 { 00188 SCF_INTERFACE (iCelSequenceFactory, 0, 0, 1); 00189 00190 virtual csPtr<iCelSequence> CreateSequence (const celParams& params) = 0; 00191 00195 virtual const char* GetName () const = 0; 00196 00200 virtual void SetName (const char* name) = 0; 00201 00209 virtual void AddSeqOpFactory (iSeqOpFactory* seqopfact, 00210 const char* duration) = 0; 00211 00216 virtual void AddDelay (const char* delay) = 0; 00217 }; 00218 00222 struct iCelSequenceFactoryGenerator : public virtual iBase 00223 { 00224 SCF_INTERFACE (iCelSequenceFactoryGenerator, 0, 0, 1); 00225 00226 virtual csPtr<iCelSequenceFactory> CreateSequenceFactory () = 0; 00227 }; 00228 00229 //------------------------------------------------------------------------- 00230 // Specific sequence operation implementations. 00231 //------------------------------------------------------------------------- 00232 00245 struct iDebugPrintSeqOpFactory : public virtual iBase 00246 { 00247 SCF_INTERFACE (iDebugPrintSeqOpFactory, 0, 0, 1); 00248 00253 virtual void SetMessageParameter (const char* msg) = 0; 00254 }; 00255 00256 00277 struct iLightSeqOpFactory : public virtual iBase 00278 { 00279 SCF_INTERFACE (iLightSeqOpFactory, 0, 0, 1); 00280 00287 virtual void SetEntityParameter (const char* entity, const char* tag = 0) = 0; 00288 00292 virtual void SetRelColorParameter (const char* red, const char* green, 00293 const char* blue) = 0; 00294 00298 virtual void SetAbsColorParameter (const char* red, const char* green, 00299 const char* blue) = 0; 00300 }; 00301 00321 struct iMovePathSeqOpFactory : public virtual iBase 00322 { 00323 SCF_INTERFACE (iMovePathSeqOpFactory, 0, 0, 1); 00324 00331 virtual void SetEntityParameter (const char* entity, const char* tag = 0) = 0; 00332 00342 virtual void AddPathNode (const char* sectorname, const char* node, 00343 const char* time) = 0; 00344 }; 00345 00374 struct iPropertySeqOpFactory : public virtual iBase 00375 { 00376 SCF_INTERFACE (iPropertySeqOpFactory, 0, 0, 1); 00377 00382 virtual void SetEntityParameter (const char* entity) = 0; 00383 00390 virtual void SetPCParameter (const char* pc, const char* tag = 0) = 0; 00391 00397 virtual void SetPropertyParameter (const char* property_name) = 0; 00398 00404 virtual void SetFloatParameter (const char* pfloat) = 0; 00405 00411 virtual void SetLongParameter (const char* plong) = 0; 00412 00419 virtual void SetVector2Parameter (const char* vectorx, 00420 const char* vectory) = 0; 00421 00430 virtual void SetVector3Parameter (const char* vectorx, const char* vectory, 00431 const char* vectorz) = 0; 00432 00440 virtual void SetRelative (bool is_relative) = 0; 00441 }; 00442 00443 00467 struct iTransformSeqOpFactory : public virtual iBase 00468 { 00469 SCF_INTERFACE (iTransformSeqOpFactory, 0, 0, 1); 00470 00477 virtual void SetEntityParameter (const char* entity, const char* tag = 0) = 0; 00478 00482 virtual void SetVectorParameter (const char* vectorx, const char* vectory, 00483 const char* vectorz) = 0; 00484 00490 virtual void SetRotationParameter (int rot_axis, const char* rot_angle) = 0; 00491 }; 00492 //------------------------------------------------------------------------- 00493 00497 #define CEL_DECLARE_SEQOPTYPE(name,id) \ 00498 class cel##name##SeqOpType : public scfImplementation2< \ 00499 cel##name##SeqOpType,iSeqOpType,iComponent> \ 00500 { \ 00501 public: \ 00502 iObjectRegistry* object_reg; \ 00503 csWeakRef<iCelPlLayer> pl; \ 00504 cel##name##SeqOpType (iBase* parent); \ 00505 virtual ~cel##name##SeqOpType () { } \ 00506 virtual bool Initialize (iObjectRegistry*) ; \ 00507 virtual const char* GetName () const { return id; } \ 00508 virtual csPtr<iSeqOpFactory> CreateSeqOpFactory (); \ 00509 }; 00510 00514 #define CEL_IMPLEMENT_SEQOPTYPE(name) \ 00515 cel##name##SeqOpType::cel##name##SeqOpType ( \ 00516 iBase* parent) : scfImplementationType (this, parent), \ 00517 object_reg(0) \ 00518 { \ 00519 } \ 00520 bool cel##name##SeqOpType::Initialize ( \ 00521 iObjectRegistry* object_reg) \ 00522 { \ 00523 cel##name##SeqOpType::object_reg = object_reg; \ 00524 pl = csQueryRegistry<iCelPlLayer> (object_reg); \ 00525 return true; \ 00526 } \ 00527 csPtr<iSeqOpFactory> cel##name##SeqOpType::CreateSeqOpFactory () \ 00528 { \ 00529 cel##name##SeqOpFactory* fact = new cel##name##SeqOpFactory (this); \ 00530 return fact; \ 00531 } 00532 00533 00534 #endif // __CEL_SEQUENCES__
Generated for CEL: Crystal Entity Layer 2.0 by doxygen 1.6.1
