physicallayer/propclas.h
00001 /* 00002 Crystal Space Entity Layer 00003 Copyright (C) 2001 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., 675 Mass Ave, Cambridge, MA 02139, USA. 00018 */ 00019 00020 #ifndef __CEL_PL_PROPCLASS__ 00021 #define __CEL_PL_PROPCLASS__ 00022 00023 #include "cstypes.h" 00024 #include "csutil/scf.h" 00025 #include "csutil/strset.h" 00026 #include "csutil/ref.h" 00027 #include "physicallayer/datatype.h" 00028 #include "physicallayer/entity.h" 00029 #include "physicallayer/persist.h" 00030 00031 struct iCelPropertyClassList; 00032 00039 #define CEL_QUERY_PROPCLASS(PcList,Interface) \ 00040 (celQueryPropertyClass<Interface> (PcList)) 00041 00046 #define CEL_QUERY_PROPCLASS_TAG(PcList,Interface,Tag) \ 00047 (celQueryPropertyClassTag<Interface> (PcList,Tag)) 00048 00055 #define CEL_QUERY_PROPCLASS_ENT(Ent,Interface) \ 00056 (celQueryPropertyClassEntity<Interface> (Ent)) 00057 00062 #define CEL_QUERY_PROPCLASS_TAG_ENT(Ent,Interface,Tag) \ 00063 CEL_QUERY_PROPCLASS_TAG((Ent)->GetPropertyClassList(),Interface,Tag) 00064 00068 #define CEL_REMOVE_PROPCLASS(PcList,Interface) \ 00069 ((PcList)->RemoveByInterface (scfInterfaceTraits<Interface>::GetID(), \ 00070 scfInterfaceTraits<Interface>::GetVersion())) 00071 00076 #define CEL_REMOVE_PROPCLASS_TAG(PcList,Interface,Tag) \ 00077 ((PcList)->RemoveByInterfaceAndTag ( \ 00078 scfInterfaceTraits<Interface>::GetID(), \ 00079 scfInterfaceTraits<Interface>::GetVersion(), Tag)) 00080 00084 #define CEL_REMOVE_PROPCLASS_ENT(Ent, Interface) \ 00085 CEL_REMOVE_PROPCLASS((Ent)->GetPropertyClassList(),Interface) 00086 00091 #define CEL_REMOVE_PROPCLASS_TAG_ENT(Ent,Interface,Tag) \ 00092 CEL_REMOVE_PROPCLASS_TAG((Ent)->GetPropertyClassList(),Interface,Tag) 00093 00094 class csVector3; 00095 class csColor; 00096 struct iCelEntity; 00097 struct iCelDataBuffer; 00098 struct iCelPropertyChangeCallback; 00099 struct iCelParameterBlock; 00100 00105 struct iCelPropertyClass : public virtual iBase 00106 { 00107 SCF_INTERFACE (iCelPropertyClass, 0, 0, 7); 00108 00112 virtual const char* GetName () const = 0; 00113 00120 virtual void SetTag (const char* tagname) = 0; 00121 00126 virtual const char* GetTag () const = 0; 00127 00131 virtual iCelEntity* GetEntity () = 0; 00132 00136 virtual void SetEntity (iCelEntity* entity) = 0; 00137 00146 virtual csPtr<iCelDataBuffer> SaveFirstPass () = 0; 00147 00153 virtual bool LoadFirstPass (iCelDataBuffer* databuf) = 0; 00154 00158 virtual csPtr<iCelDataBuffer> Save () = 0; 00159 00163 virtual bool Load (iCelDataBuffer* databuf) = 0; 00164 00172 virtual bool AddPropertyChangeCallback (iCelPropertyChangeCallback* cb) = 0; 00173 00180 virtual bool RemovePropertyChangeCallback ( 00181 iCelPropertyChangeCallback* cb) = 0; 00182 00196 virtual bool SetProperty (csStringID propertyID, long value) = 0; 00197 00201 virtual bool SetProperty (csStringID propertyID, float value) = 0; 00202 00206 virtual bool SetProperty (csStringID propertyID, bool value) = 0; 00207 00211 virtual bool SetProperty (csStringID propertyID, const char* value) = 0; 00212 00216 virtual bool SetProperty (csStringID propertyID, const csVector2& value) = 0; 00217 00221 virtual bool SetProperty (csStringID propertyID, const csVector3& value) = 0; 00222 00226 virtual bool SetProperty (csStringID propertyID, const csColor& value) = 0; 00227 00231 virtual bool SetProperty (csStringID propertyID, 00232 iCelPropertyClass* value) = 0; 00233 00237 virtual bool SetProperty (csStringID propertyID, iCelEntity* entity) = 0; 00238 00255 virtual celDataType GetPropertyOrActionType ( 00256 csStringID propertyID) = 0; 00257 00261 virtual bool IsPropertyReadOnly (csStringID propertyID) = 0; 00262 00266 virtual long GetPropertyLong (csStringID propertyID) = 0; 00267 00271 virtual float GetPropertyFloat (csStringID propertyID) = 0; 00272 00276 virtual bool GetPropertyBool (csStringID propertyID) = 0; 00277 00281 virtual const char* GetPropertyString (csStringID propertyID) = 0; 00282 00286 virtual bool GetPropertyVector (csStringID propertyID, csVector2& v) = 0; 00287 00291 virtual bool GetPropertyVector (csStringID propertyID, csVector3& v) = 0; 00292 00296 virtual bool GetPropertyColor (csStringID propertyID, csColor& v) = 0; 00297 00301 virtual iCelPropertyClass* GetPropertyPClass (csStringID propertyID) = 0; 00302 00306 virtual iCelEntity* GetPropertyEntity (csStringID propertyID) = 0; 00307 00311 virtual bool PerformAction (csStringID actionID, 00312 iCelParameterBlock* params) = 0; 00313 00317 virtual size_t GetPropertyAndActionCount () const = 0; 00318 00322 virtual csStringID GetPropertyOrActionID (size_t i) = 0; 00323 00327 virtual const char* GetPropertyOrActionDescription (csStringID) = 0; 00328 00336 virtual void PropertyClassesHaveChanged () = 0; 00337 00342 virtual csPtr<iCelDataBuffer> GetPersistentData ( 00343 celPersistenceType persistence_type) = 0; 00344 00356 virtual celPersistenceResult SetPersistentData (csTicks data_time, 00357 iCelDataBuffer* data, celPersistenceType persistence_type) = 0; 00358 }; 00359 00360 00361 SCF_VERSION (iCelPropertyClassList, 0, 0, 2); 00362 00366 struct iCelPropertyClassList : public iBase 00367 { 00371 virtual size_t GetCount () const = 0; 00372 00376 virtual iCelPropertyClass* Get (size_t n) const = 0; 00377 00381 virtual size_t Add (iCelPropertyClass* obj) = 0; 00382 00386 virtual bool Remove (iCelPropertyClass* obj) = 0; 00387 00391 virtual bool Remove (size_t n) = 0; 00392 00396 virtual bool RemoveByInterface (scfInterfaceID scf_id, int iVersion) = 0; 00397 00402 virtual bool RemoveByInterfaceAndTag (scfInterfaceID scf_id, 00403 int iVersion, const char* tag) = 0; 00404 00408 virtual void RemoveAll () = 0; 00409 00413 virtual size_t Find (iCelPropertyClass* obj) const = 0; 00414 00421 virtual iCelPropertyClass* FindByName (const char *name) const = 0; 00422 00427 virtual iCelPropertyClass* FindByNameAndTag (const char *name, 00428 const char* tag) const = 0; 00429 00437 virtual iBase* FindByInterface ( 00438 scfInterfaceID id, int version) const = 0; 00439 00444 virtual iBase* FindByInterfaceAndTag ( 00445 scfInterfaceID id, int version, const char* tag) const = 0; 00446 }; 00447 00452 template<class Interface> 00453 inline csPtr<Interface> celQueryPropertyClassTag ( 00454 iCelPropertyClassList* plist, const char* tag) 00455 { 00456 iBase* base = plist->FindByInterfaceAndTag ( 00457 scfInterfaceTraits<Interface>::GetID (), 00458 scfInterfaceTraits<Interface>::GetVersion (), 00459 tag); 00460 00461 if (base == 0) return csPtr<Interface> (0); 00462 00463 Interface* x = (Interface*)base->QueryInterface ( 00464 scfInterfaceTraits<Interface>::GetID (), 00465 scfInterfaceTraits<Interface>::GetVersion ()); 00466 00467 base->DecRef (); // Release our base interface. 00468 return csPtr<Interface> (x); 00469 } 00470 00477 template<class Interface> 00478 inline csPtr<Interface> celQueryPropertyClass ( 00479 iCelPropertyClassList* plist) 00480 { 00481 iBase* base = plist->FindByInterface ( 00482 scfInterfaceTraits<Interface>::GetID (), 00483 scfInterfaceTraits<Interface>::GetVersion ()); 00484 00485 if (base == 0) return csPtr<Interface> (0); 00486 00487 Interface* x = (Interface*)base->QueryInterface ( 00488 scfInterfaceTraits<Interface>::GetID (), 00489 scfInterfaceTraits<Interface>::GetVersion ()); 00490 00491 base->DecRef (); // Release our base interface. 00492 return csPtr<Interface> (x); 00493 } 00494 00501 template<class Interface> 00502 inline csPtr<Interface> celQueryPropertyClassEntity ( 00503 iCelEntity* entity) 00504 { 00505 return celQueryPropertyClass<Interface> (entity->GetPropertyClassList ()); 00506 } 00507 00508 #endif // __CEL_PL_PROPCLASS__ 00509
Generated for CEL: Crystal Entity Layer by doxygen 1.4.6