CEL

Public API Reference

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