CEL

Public API Reference

celtool/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 bool SetProperty (csStringID, iBase* ibase);
00106   virtual celDataType GetPropertyOrActionType (csStringID);
00107   virtual bool IsPropertyReadOnly (csStringID);
00108   virtual long GetPropertyLong (csStringID);
00109   virtual float GetPropertyFloat (csStringID);
00110   virtual bool GetPropertyBool (csStringID);
00111   virtual const char* GetPropertyString (csStringID);
00112   virtual bool GetPropertyVector (csStringID, csVector2&);
00113   virtual bool GetPropertyVector (csStringID, csVector3&);
00114   virtual bool GetPropertyColor (csStringID, csColor&);
00115   virtual iCelPropertyClass* GetPropertyPClass (csStringID);
00116   virtual iCelEntity* GetPropertyEntity (csStringID);
00117   virtual iBase* GetPropertyIBase (csStringID);
00118   virtual bool PerformAction (csStringID, iCelParameterBlock*, celData& ret)
00119   { return false; }
00120   virtual const char* GetPropertyOrActionDescription (csStringID);
00121   virtual size_t GetPropertyAndActionCount () const;
00122   virtual csStringID GetPropertyOrActionID (size_t);
00123   virtual void PropertyClassesHaveChanged ()
00124   {
00125     propclasses_dirty = true;
00126   }
00127 
00128   virtual csPtr<iCelDataBuffer> SaveFirstPass () { return 0; }
00129   virtual bool LoadFirstPass (iCelDataBuffer*) { return 0; }
00130 
00131   virtual csPtr<iCelDataBuffer> GetPersistentData (
00132         celPersistenceType persistence_type)
00133     { return 0; }
00134   virtual celPersistenceResult SetPersistentData (csTicks data_time, 
00135         iCelDataBuffer* data, celPersistenceType persistence_type)
00136     { return CEL_PERSIST_RESULT_OK; };
00137 
00138   // --- For iCelTimerListener -----------------------------------------
00139   virtual void TickEveryFrame () { }
00140   virtual void TickOnce () { }
00141 };
00142 
00143 #endif // __CEL_CELTOOL_STDPC__
00144 

Generated for CEL: Crystal Entity Layer by doxygen 1.4.7