Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members
stdpcimp.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_CELTOOL_STDPC__ 00021 #define __CEL_CELTOOL_STDPC__ 00022 00023 #include "cstypes.h" 00024 #include "iutil/comp.h" 00025 #include "csutil/scf.h" 00026 #include "csutil/scf_implementation.h" 00027 #include "csutil/refarr.h" 00028 #include "csutil/weakref.h" 00029 #include "physicallayer/propclas.h" 00030 #include "physicallayer/propfact.h" 00031 #include "physicallayer/pl.h" 00032 00033 struct iCelEntity; 00034 struct iObjectRegistry; 00035 00036 00037 struct Property 00038 { 00039 csStringID id; 00040 celDataType datatype; 00041 bool readonly; 00042 const char* desc; 00043 }; 00044 00050 class celPcCommon : public scfImplementation2< 00051 celPcCommon, iCelPropertyClass, iCelTimerListener> 00052 { 00053 private: 00054 csRefArray<iCelPropertyChangeCallback> callbacks; 00055 // This flag is true if we currently don't know the state of 00056 // the sibling property classes (property classes in the same 00057 // entity). It is set to true by PropertyClassesHaveChanged() 00058 // and cleared by HavePropertyClassesChanged(). 00059 bool propclasses_dirty; 00060 char* tag; 00061 00062 protected: 00063 iCelEntity* entity; 00064 iObjectRegistry* object_reg; 00065 csWeakRef<iCelPlLayer> pl; 00066 00067 protected: 00068 void FirePropertyChangeCallback (int propertyId); 00069 00070 static void UpdateProperties (iObjectRegistry*) { return; } 00071 00072 void** propdata; 00073 Property* props; 00074 size_t* propcount; 00075 00076 public: 00077 celPcCommon (iObjectRegistry* object_reg); 00078 virtual ~celPcCommon (); 00079 00080 bool HavePropertyClassesChanged () 00081 { 00082 if (!propclasses_dirty) return false; 00083 propclasses_dirty = false; 00084 return true; 00085 } 00086 00087 virtual void SetTag (const char* tagname); 00088 virtual const char* GetTag () const { return tag; } 00089 00090 virtual iCelEntity* GetEntity () { return entity; } 00091 virtual void SetEntity (iCelEntity* entity); 00092 virtual bool AddPropertyChangeCallback (iCelPropertyChangeCallback* cb); 00093 virtual bool RemovePropertyChangeCallback ( 00094 iCelPropertyChangeCallback* cb); 00095 00096 virtual bool SetProperty (csStringID, long); 00097 virtual bool SetProperty (csStringID, float); 00098 virtual bool SetProperty (csStringID, bool); 00099 virtual bool SetProperty (csStringID, const char*); 00100 virtual bool SetProperty (csStringID, const csVector2&); 00101 virtual bool SetProperty (csStringID, const csVector3&); 00102 virtual bool SetProperty (csStringID, const csColor&); 00103 virtual bool SetProperty (csStringID, iCelPropertyClass* pclass); 00104 virtual bool SetProperty (csStringID, iCelEntity* entity); 00105 virtual celDataType GetPropertyOrActionType (csStringID); 00106 virtual bool IsPropertyReadOnly (csStringID); 00107 virtual long GetPropertyLong (csStringID); 00108 virtual float GetPropertyFloat (csStringID); 00109 virtual bool GetPropertyBool (csStringID); 00110 virtual const char* GetPropertyString (csStringID); 00111 virtual bool GetPropertyVector (csStringID, csVector2&); 00112 virtual bool GetPropertyVector (csStringID, csVector3&); 00113 virtual bool GetPropertyColor (csStringID, csColor&); 00114 virtual iCelPropertyClass* GetPropertyPClass (csStringID); 00115 virtual iCelEntity* GetPropertyEntity (csStringID); 00116 virtual bool PerformAction (csStringID, iCelParameterBlock*) { return false; } 00117 virtual const char* GetPropertyOrActionDescription (csStringID); 00118 virtual size_t GetPropertyAndActionCount () const; 00119 virtual csStringID GetPropertyOrActionID (size_t); 00120 virtual void PropertyClassesHaveChanged () 00121 { 00122 propclasses_dirty = true; 00123 } 00124 00125 virtual csPtr<iCelDataBuffer> SaveFirstPass () { return 0; } 00126 virtual bool LoadFirstPass (iCelDataBuffer*) { return 0; } 00127 00128 virtual csPtr<iCelDataBuffer> GetPersistentData ( 00129 celPersistenceType persistence_type) 00130 { return 0; } 00131 virtual celPersistenceResult SetPersistentData (csTicks data_time, 00132 iCelDataBuffer* data, celPersistenceType persistence_type) 00133 { return CEL_PERSIST_RESULT_OK; }; 00134 00135 // --- For iCelTimerListener ----------------------------------------- 00136 virtual void TickEveryFrame () { } 00137 virtual void TickOnce () { } 00138 }; 00139 00140 #endif // __CEL_CELTOOL_STDPC__ 00141
Generated for CEL: Crystal Entity Layer by doxygen 1.4.4