tools/sequences.h
00001 /* 00002 Crystal Space Entity Layer 00003 Copyright (C) 2004-2011 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 "tools/parameters.h" 00024 00025 struct iQuest; 00026 struct iCelParameterBlock; 00027 struct iSeqOpType; 00028 00029 //------------------------------------------------------------------------- 00030 // Sequence operations 00031 //------------------------------------------------------------------------- 00032 00039 struct iSeqOp : public virtual iBase 00040 { 00041 SCF_INTERFACE (iSeqOp, 0, 0, 1); 00042 00049 virtual void Init (iCelParameterBlock* params) = 0; 00050 00056 virtual void Do (float time, iCelParameterBlock* params) = 0; 00057 }; 00058 00063 struct iSeqOpFactory : public virtual iBase 00064 { 00065 SCF_INTERFACE (iSeqOpFactory, 0, 0, 1); 00066 00070 virtual iSeqOpType* GetSeqOpType () const = 0; 00071 00077 virtual csPtr<iSeqOp> CreateSeqOp (iCelParameterBlock* params) = 0; 00078 00084 virtual bool Load (iDocumentNode* node) = 0; 00085 00091 virtual bool Save (iDocumentNode* node) = 0; 00092 }; 00093 00099 struct iSeqOpType : public virtual iBase 00100 { 00101 SCF_INTERFACE (iSeqOpType, 0, 0, 1); 00102 00106 virtual const char* GetName () const = 0; 00107 00111 virtual csPtr<iSeqOpFactory> CreateSeqOpFactory () = 0; 00112 }; 00113 00114 struct iCelSequence; 00115 00120 struct iCelSequenceCallback : public virtual iBase 00121 { 00122 SCF_INTERFACE (iCelSequenceCallback, 0, 0, 1); 00123 00125 virtual void SequenceFinished (iCelSequence* sequence) = 0; 00126 }; 00127 00131 struct iCelSequence : public virtual iBase 00132 { 00133 SCF_INTERFACE (iCelSequence, 0, 0, 1); 00134 00138 virtual const char* GetName () const = 0; 00139 00145 virtual bool Start (csTicks delay, iCelParameterBlock* params) = 0; 00146 00153 virtual void Finish () = 0; 00154 00160 virtual void Abort () = 0; 00161 00165 virtual bool IsRunning () = 0; 00166 00170 virtual void AddSequenceCallback (iCelSequenceCallback* cb) = 0; 00174 virtual void RemoveSequenceCallback (iCelSequenceCallback* cb) = 0; 00175 00179 virtual void Activate () = 0; 00180 00184 virtual void Deactivate () = 0; 00185 }; 00186 00191 struct iCelSequenceFactory : public virtual iBase 00192 { 00193 SCF_INTERFACE (iCelSequenceFactory, 0, 0, 1); 00194 00195 virtual csPtr<iCelSequence> CreateSequence (iQuest* q, 00196 iCelParameterBlock* params) = 0; 00197 00201 virtual const char* GetName () const = 0; 00202 00206 virtual void SetName (const char* name) = 0; 00207 00215 virtual void AddSeqOpFactory (iSeqOpFactory* seqopfact, 00216 const char* duration) = 0; 00217 00221 virtual void UpdateSeqOpFactory (size_t idx, iSeqOpFactory* seqopfact, 00222 const char* duration) = 0; 00223 00227 virtual size_t GetSeqOpFactoryCount () const = 0; 00228 00232 virtual iSeqOpFactory* GetSeqOpFactory (size_t idx) const = 0; 00233 00237 virtual const char* GetSeqOpFactoryDuration (size_t idx) const = 0; 00238 00243 virtual void RemoveSeqOpFactory (size_t idx) = 0; 00244 00249 virtual void AddDelay (const char* delay) = 0; 00250 }; 00251 00255 struct iCelSequenceFactoryGenerator : public virtual iBase 00256 { 00257 SCF_INTERFACE (iCelSequenceFactoryGenerator, 0, 0, 1); 00258 00259 virtual csPtr<iCelSequenceFactory> CreateSequenceFactory () = 0; 00260 }; 00261 00262 //------------------------------------------------------------------------- 00263 // Specific sequence operation implementations. 00264 //------------------------------------------------------------------------- 00265 00278 struct iDebugPrintSeqOpFactory : public virtual iBase 00279 { 00280 SCF_INTERFACE (iDebugPrintSeqOpFactory, 0, 0, 1); 00281 00286 virtual void SetMessageParameter (const char* msg) = 0; 00287 virtual const char* GetMessage () const = 0; 00288 }; 00289 00290 00312 struct iAmbientMeshSeqOpFactory : public virtual iBase 00313 { 00314 SCF_INTERFACE (iAmbientMeshSeqOpFactory, 0, 0, 1); 00315 00322 virtual void SetEntityParameter (const char* entity, const char* tag = 0) = 0; 00323 virtual const char* GetEntity () const = 0; 00324 virtual const char* GetTag () const = 0; 00325 00329 virtual void SetRelColorParameter (const char* red, const char* green, 00330 const char* blue) = 0; 00331 virtual const char* GetRelColorRed () const = 0; 00332 virtual const char* GetRelColorGreen () const = 0; 00333 virtual const char* GetRelColorBlue () const = 0; 00334 00338 virtual void SetAbsColorParameter (const char* red, const char* green, 00339 const char* blue) = 0; 00340 virtual const char* GetAbsColorRed () const = 0; 00341 virtual const char* GetAbsColorGreen () const = 0; 00342 virtual const char* GetAbsColorBlue () const = 0; 00343 }; 00344 00365 struct iLightSeqOpFactory : public virtual iBase 00366 { 00367 SCF_INTERFACE (iLightSeqOpFactory, 0, 0, 1); 00368 00375 virtual void SetEntityParameter (const char* entity, const char* tag = 0) = 0; 00376 virtual const char* GetEntity () const = 0; 00377 virtual const char* GetTag () const = 0; 00378 00382 virtual void SetRelColorParameter (const char* red, const char* green, 00383 const char* blue) = 0; 00384 virtual const char* GetRelColorRed () const = 0; 00385 virtual const char* GetRelColorGreen () const = 0; 00386 virtual const char* GetRelColorBlue () const = 0; 00387 00391 virtual void SetAbsColorParameter (const char* red, const char* green, 00392 const char* blue) = 0; 00393 virtual const char* GetAbsColorRed () const = 0; 00394 virtual const char* GetAbsColorGreen () const = 0; 00395 virtual const char* GetAbsColorBlue () const = 0; 00396 }; 00397 00417 struct iMovePathSeqOpFactory : public virtual iBase 00418 { 00419 SCF_INTERFACE (iMovePathSeqOpFactory, 0, 0, 1); 00420 00427 virtual void SetEntityParameter (const char* entity, const char* tag = 0) = 0; 00428 virtual const char* GetEntity () const = 0; 00429 virtual const char* GetTag () const = 0; 00430 00440 virtual void AddPathNode (const char* sectorname, const char* node, 00441 const char* time) = 0; 00442 virtual size_t GetPathCount () const = 0; 00443 virtual const char* GetPathSector (size_t idx) const = 0; 00444 virtual const char* GetPathNode (size_t idx) const = 0; 00445 virtual const char* GetPathTime (size_t idx) const = 0; 00446 }; 00447 00476 struct iPropertySeqOpFactory : public virtual iBase 00477 { 00478 SCF_INTERFACE (iPropertySeqOpFactory, 0, 0, 1); 00479 00484 virtual void SetEntityParameter (const char* entity) = 0; 00485 virtual const char* GetEntity () const = 0; 00486 00493 virtual void SetPCParameter (const char* pc, const char* tag = 0) = 0; 00494 virtual const char* GetPC () const = 0; 00495 virtual const char* GetPCTag () const = 0; 00496 00502 virtual void SetPropertyParameter (const char* property_name) = 0; 00503 virtual const char* GetProperty () const = 0; 00504 virtual celDataType GetPropertyType () const = 0; 00505 00511 virtual void SetFloatParameter (const char* pfloat) = 0; 00512 virtual const char* GetFloat () const = 0; 00513 00519 virtual void SetLongParameter (const char* plong) = 0; 00520 virtual const char* GetLong () const = 0; 00521 00528 virtual void SetVector2Parameter (const char* vectorx, 00529 const char* vectory) = 0; 00530 virtual const char* GetVectorX () const = 0; 00531 virtual const char* GetVectorY () const = 0; 00532 00541 virtual void SetVector3Parameter (const char* vectorx, const char* vectory, 00542 const char* vectorz) = 0; 00543 virtual const char* GetVectorZ () const = 0; 00544 00552 virtual void SetRelative (bool is_relative) = 0; 00553 virtual bool IsRelative () const = 0; 00554 }; 00555 00556 00580 struct iTransformSeqOpFactory : public virtual iBase 00581 { 00582 SCF_INTERFACE (iTransformSeqOpFactory, 0, 0, 1); 00583 00590 virtual void SetEntityParameter (const char* entity, const char* tag = 0) = 0; 00591 virtual const char* GetEntity () const = 0; 00592 virtual const char* GetTag () const = 0; 00593 00597 virtual void SetVectorParameter (const char* vectorx, const char* vectory, 00598 const char* vectorz) = 0; 00599 virtual const char* GetVectorX () const = 0; 00600 virtual const char* GetVectorY () const = 0; 00601 virtual const char* GetVectorZ () const = 0; 00602 00608 virtual void SetRotationParameter (int rot_axis, const char* rot_angle) = 0; 00609 virtual int GetRotationAxis () const = 0; 00610 virtual const char* GetRotationAngle () const = 0; 00611 00616 virtual void SetReversed (bool r) = 0; 00617 virtual bool IsReversed () const = 0; 00618 }; 00619 00620 //------------------------------------------------------------------------- 00621 00625 #define CEL_DECLARE_SEQOPTYPE(name,id) \ 00626 class cel##name##SeqOpType : public scfImplementation2< \ 00627 cel##name##SeqOpType,iSeqOpType,iComponent> \ 00628 { \ 00629 public: \ 00630 iObjectRegistry* object_reg; \ 00631 csWeakRef<iCelPlLayer> pl; \ 00632 cel##name##SeqOpType (iBase* parent); \ 00633 virtual ~cel##name##SeqOpType () { } \ 00634 virtual bool Initialize (iObjectRegistry*) ; \ 00635 virtual const char* GetName () const { return id; } \ 00636 virtual csPtr<iSeqOpFactory> CreateSeqOpFactory (); \ 00637 }; 00638 00642 #define CEL_IMPLEMENT_SEQOPTYPE(name) \ 00643 cel##name##SeqOpType::cel##name##SeqOpType ( \ 00644 iBase* parent) : scfImplementationType (this, parent), \ 00645 object_reg(0) \ 00646 { \ 00647 } \ 00648 bool cel##name##SeqOpType::Initialize ( \ 00649 iObjectRegistry* object_reg) \ 00650 { \ 00651 cel##name##SeqOpType::object_reg = object_reg; \ 00652 pl = csQueryRegistry<iCelPlLayer> (object_reg); \ 00653 return true; \ 00654 } \ 00655 csPtr<iSeqOpFactory> cel##name##SeqOpType::CreateSeqOpFactory () \ 00656 { \ 00657 cel##name##SeqOpFactory* fact = new cel##name##SeqOpFactory (this); \ 00658 return fact; \ 00659 } 00660 00661 00662 #endif // __CEL_SEQUENCES__
Generated for CEL: Crystal Entity Layer 2.1 by doxygen 1.6.1
