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 00242 virtual bool SetProperty (csStringID propertyID, iBase* ibase) = 0; 00243 00258 virtual celDataType GetPropertyOrActionType ( 00259 csStringID propertyID) = 0; 00260 00264 virtual bool IsPropertyReadOnly (csStringID propertyID) = 0; 00265 00269 virtual long GetPropertyLong (csStringID propertyID) = 0; 00270 00274 virtual float GetPropertyFloat (csStringID propertyID) = 0; 00275 00279 virtual bool GetPropertyBool (csStringID propertyID) = 0; 00280 00284 virtual const char* GetPropertyString (csStringID propertyID) = 0; 00285 00289 virtual bool GetPropertyVector (csStringID propertyID, csVector2& v) = 0; 00290 00294 virtual bool GetPropertyVector (csStringID propertyID, csVector3& v) = 0; 00295 00299 virtual bool GetPropertyColor (csStringID propertyID, csColor& v) = 0; 00300 00304 virtual iCelPropertyClass* GetPropertyPClass (csStringID propertyID) = 0; 00305 00309 virtual iCelEntity* GetPropertyEntity (csStringID propertyID) = 0; 00310 00314 virtual iBase* GetPropertyIBase (csStringID propertyID) = 0; 00315 00324 virtual bool PerformAction (csStringID actionID, 00325 iCelParameterBlock* params, celData& ret) = 0; 00326 00330 virtual size_t GetPropertyAndActionCount () = 0; 00331 00335 virtual csStringID GetPropertyOrActionID (size_t i) = 0; 00336 00340 virtual const char* GetPropertyOrActionDescription (csStringID) = 0; 00341 00349 virtual void PropertyClassesHaveChanged () = 0; 00350 00355 virtual csPtr<iCelDataBuffer> GetPersistentData ( 00356 celPersistenceType persistence_type) = 0; 00357 00369 virtual celPersistenceResult SetPersistentData (csTicks data_time, 00370 iCelDataBuffer* data, celPersistenceType persistence_type) = 0; 00371 }; 00372 00373 00374 SCF_VERSION (iCelPropertyClassList, 0, 0, 2); 00375 00379 struct iCelPropertyClassList : public iBase 00380 { 00384 virtual size_t GetCount () const = 0; 00385 00389 virtual iCelPropertyClass* Get (size_t n) const = 0; 00390 00394 virtual size_t Add (iCelPropertyClass* obj) = 0; 00395 00399 virtual bool Remove (iCelPropertyClass* obj) = 0; 00400 00404 virtual bool Remove (size_t n) = 0; 00405 00409 virtual bool RemoveByInterface (scfInterfaceID scf_id, int iVersion) = 0; 00410 00415 virtual bool RemoveByInterfaceAndTag (scfInterfaceID scf_id, 00416 int iVersion, const char* tag) = 0; 00417 00421 virtual void RemoveAll () = 0; 00422 00426 virtual size_t Find (iCelPropertyClass* obj) const = 0; 00427 00434 virtual iCelPropertyClass* FindByName (const char *name) const = 0; 00435 00440 virtual iCelPropertyClass* FindByNameAndTag (const char *name, 00441 const char* tag) const = 0; 00442 00450 virtual iBase* FindByInterface ( 00451 scfInterfaceID id, int version) const = 0; 00452 00457 virtual iBase* FindByInterfaceAndTag ( 00458 scfInterfaceID id, int version, const char* tag) const = 0; 00459 }; 00460 00465 template<class Interface> 00466 inline csPtr<Interface> celQueryPropertyClassTag ( 00467 iCelPropertyClassList* plist, const char* tag) 00468 { 00469 iBase* base = plist->FindByInterfaceAndTag ( 00470 scfInterfaceTraits<Interface>::GetID (), 00471 scfInterfaceTraits<Interface>::GetVersion (), 00472 tag); 00473 00474 if (base == 0) return csPtr<Interface> (0); 00475 00476 Interface* x = (Interface*)base->QueryInterface ( 00477 scfInterfaceTraits<Interface>::GetID (), 00478 scfInterfaceTraits<Interface>::GetVersion ()); 00479 00480 base->DecRef (); // Release our base interface. 00481 return csPtr<Interface> (x); 00482 } 00483 00490 template<class Interface> 00491 inline csPtr<Interface> celQueryPropertyClass ( 00492 iCelPropertyClassList* plist) 00493 { 00494 iBase* base = plist->FindByInterface ( 00495 scfInterfaceTraits<Interface>::GetID (), 00496 scfInterfaceTraits<Interface>::GetVersion ()); 00497 00498 if (base == 0) return csPtr<Interface> (0); 00499 00500 Interface* x = (Interface*)base->QueryInterface ( 00501 scfInterfaceTraits<Interface>::GetID (), 00502 scfInterfaceTraits<Interface>::GetVersion ()); 00503 00504 base->DecRef (); // Release our base interface. 00505 return csPtr<Interface> (x); 00506 } 00507 00514 template<class Interface> 00515 inline csPtr<Interface> celQueryPropertyClassEntity ( 00516 iCelEntity* entity) 00517 { 00518 return celQueryPropertyClass<Interface> (entity->GetPropertyClassList ()); 00519 } 00520 00521 #endif // __CEL_PL_PROPCLASS__ 00522
Generated for CEL: Crystal Entity Layer by doxygen 1.4.7