00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
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
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
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__