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, 8); 00108 00112 virtual void SetName (const char* name) = 0; 00113 00117 virtual const char* GetName () const = 0; 00118 00125 virtual void SetTag (const char* tagname) = 0; 00126 00131 virtual const char* GetTag () const = 0; 00132 00136 virtual iCelEntity* GetEntity () = 0; 00137 00141 virtual void SetEntity (iCelEntity* entity) = 0; 00142 00151 virtual csPtr<iCelDataBuffer> SaveFirstPass () = 0; 00152 00158 virtual bool LoadFirstPass (iCelDataBuffer* databuf) = 0; 00159 00163 virtual csPtr<iCelDataBuffer> Save () = 0; 00164 00168 virtual bool Load (iCelDataBuffer* databuf) = 0; 00169 00177 virtual bool AddPropertyChangeCallback (iCelPropertyChangeCallback* cb) = 0; 00178 00185 virtual bool RemovePropertyChangeCallback ( 00186 iCelPropertyChangeCallback* cb) = 0; 00187 00201 virtual bool SetProperty (csStringID propertyID, long value) = 0; 00202 00206 virtual bool SetProperty (csStringID propertyID, float value) = 0; 00207 00211 virtual bool SetProperty (csStringID propertyID, bool value) = 0; 00212 00216 virtual bool SetProperty (csStringID propertyID, const char* value) = 0; 00217 00221 virtual bool SetProperty (csStringID propertyID, const csVector2& value) = 0; 00222 00226 virtual bool SetProperty (csStringID propertyID, const csVector3& value) = 0; 00227 00231 virtual bool SetProperty (csStringID propertyID, const csColor& value) = 0; 00232 00236 virtual bool SetProperty (csStringID propertyID, 00237 iCelPropertyClass* value) = 0; 00238 00242 virtual bool SetProperty (csStringID propertyID, iCelEntity* entity) = 0; 00243 00247 virtual bool SetProperty (csStringID propertyID, iBase* ibase) = 0; 00248 00263 virtual celDataType GetPropertyOrActionType ( 00264 csStringID propertyID) = 0; 00265 00269 virtual bool IsPropertyReadOnly (csStringID propertyID) = 0; 00270 00274 virtual long GetPropertyLongByID (csStringID propertyID) = 0; 00275 00279 virtual float GetPropertyFloatByID (csStringID propertyID) = 0; 00280 00284 virtual bool GetPropertyBoolByID (csStringID propertyID) = 0; 00285 00289 virtual const char* GetPropertyStringByID (csStringID propertyID) = 0; 00290 00294 virtual bool GetPropertyVectorByID (csStringID propertyID, csVector2& v) = 0; 00295 00299 virtual bool GetPropertyVectorByID (csStringID propertyID, csVector3& v) = 0; 00300 00304 virtual bool GetPropertyColorByID (csStringID propertyID, csColor& v) = 0; 00305 00309 virtual iCelPropertyClass* GetPropertyPClassByID (csStringID propertyID) = 0; 00310 00314 virtual iCelEntity* GetPropertyEntityByID (csStringID propertyID) = 0; 00315 00319 virtual iBase* GetPropertyIBaseByID (csStringID propertyID) = 0; 00320 00329 virtual bool PerformAction (csStringID actionID, 00330 iCelParameterBlock* params, celData& ret) = 0; 00331 00335 virtual size_t GetPropertyAndActionCount () = 0; 00336 00340 virtual csStringID GetPropertyOrActionID (size_t i) = 0; 00341 00345 virtual const char* GetPropertyOrActionDescription (csStringID) = 0; 00346 00354 virtual void PropertyClassesHaveChanged () = 0; 00355 00360 virtual csPtr<iCelDataBuffer> GetPersistentData ( 00361 celPersistenceType persistence_type) = 0; 00362 00374 virtual celPersistenceResult SetPersistentData (csTicks data_time, 00375 iCelDataBuffer* data, celPersistenceType persistence_type) = 0; 00376 }; 00377 00378 00382 struct iCelPropertyClassList : public virtual iBase 00383 { 00384 SCF_INTERFACE (iCelPropertyClassList, 0, 0, 2); 00385 00389 virtual size_t GetCount () const = 0; 00390 00394 virtual iCelPropertyClass* Get (size_t n) const = 0; 00395 00399 virtual size_t Add (iCelPropertyClass* obj) = 0; 00400 00404 virtual bool Remove (iCelPropertyClass* obj) = 0; 00405 00409 virtual bool Remove (size_t n) = 0; 00410 00414 virtual bool RemoveByInterface (scfInterfaceID scf_id, int iVersion) = 0; 00415 00420 virtual bool RemoveByInterfaceAndTag (scfInterfaceID scf_id, 00421 int iVersion, const char* tag) = 0; 00422 00426 virtual void RemoveAll () = 0; 00427 00431 virtual size_t Find (iCelPropertyClass* obj) const = 0; 00432 00439 virtual iCelPropertyClass* FindByName (const char *name) const = 0; 00440 00445 virtual iCelPropertyClass* FindByNameAndTag (const char *name, 00446 const char* tag) const = 0; 00447 00455 virtual iBase* FindByInterface ( 00456 scfInterfaceID id, int version) const = 0; 00457 00462 virtual iBase* FindByInterfaceAndTag ( 00463 scfInterfaceID id, int version, const char* tag) const = 0; 00464 }; 00465 00470 template<class Interface> 00471 inline csPtr<Interface> celQueryPropertyClassTag ( 00472 iCelPropertyClassList* plist, const char* tag) 00473 { 00474 iBase* base = plist->FindByInterfaceAndTag ( 00475 scfInterfaceTraits<Interface>::GetID (), 00476 scfInterfaceTraits<Interface>::GetVersion (), 00477 tag); 00478 00479 if (base == 0) return csPtr<Interface> (0); 00480 00481 Interface* x = (Interface*)base->QueryInterface ( 00482 scfInterfaceTraits<Interface>::GetID (), 00483 scfInterfaceTraits<Interface>::GetVersion ()); 00484 00485 base->DecRef (); // Release our base interface. 00486 return csPtr<Interface> (x); 00487 } 00488 00495 template<class Interface> 00496 inline csPtr<Interface> celQueryPropertyClass ( 00497 iCelPropertyClassList* plist) 00498 { 00499 iBase* base = plist->FindByInterface ( 00500 scfInterfaceTraits<Interface>::GetID (), 00501 scfInterfaceTraits<Interface>::GetVersion ()); 00502 00503 if (base == 0) return csPtr<Interface> (0); 00504 00505 Interface* x = (Interface*)base->QueryInterface ( 00506 scfInterfaceTraits<Interface>::GetID (), 00507 scfInterfaceTraits<Interface>::GetVersion ()); 00508 00509 base->DecRef (); // Release our base interface. 00510 return csPtr<Interface> (x); 00511 } 00512 00519 template<class Interface> 00520 inline csPtr<Interface> celQueryPropertyClassEntity ( 00521 iCelEntity* entity) 00522 { 00523 return celQueryPropertyClass<Interface> (entity->GetPropertyClassList ()); 00524 } 00525 00526 #endif // __CEL_PL_PROPCLASS__ 00527
Generated for CEL: Crystal Entity Layer 1.4.1 by doxygen 1.7.1