propclass/dynworld.h
00001 /* 00002 Crystal Space Entity Layer 00003 Copyright (C) 2011 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00018 */ 00019 00020 #ifndef __CEL_PF_DYNWORLD__ 00021 #define __CEL_PF_DYNWORLD__ 00022 00023 #include "csutil/scf.h" 00024 00025 #define NEW_PHYSICS 0 00026 00027 #if NEW_PHYSICS 00028 #include "ivaria/physics.h" 00029 #include "ivaria/bodytype.h" 00030 #else 00031 00032 #include "ivaria/dynamics.h" 00033 struct iDynamicSystem; 00034 00035 #endif 00036 00037 class csBox3; 00038 class csVector3; 00039 class csReversibleTransform; 00040 class csOrthoTransform; 00041 struct iCamera; 00042 struct iSector; 00043 struct iRigidBody; 00044 struct iString; 00045 struct iMeshWrapper; 00046 struct iELCM; 00047 struct iCelParameterBlock; 00048 struct iCelEntity; 00049 struct iCelEntityTemplate; 00050 struct iDataBuffer; 00051 struct iDynamicCell; 00052 struct iDecalTemplate; 00053 00059 struct iGeometryGenerator : public virtual iBase 00060 { 00061 SCF_INTERFACE(iGeometryGenerator,0,0,1); 00062 00063 virtual void GenerateGeometry (iMeshWrapper* mesh) = 0; 00064 }; 00065 00072 struct iDynamicCellCreator : public virtual iBase 00073 { 00074 SCF_INTERFACE(iDynamicCellCreator,0,0,1); 00075 00084 virtual iDynamicCell* CreateCell (const char* name) = 0; 00085 00089 virtual void FillCell (iDynamicCell* cell) = 0; 00090 }; 00091 00095 struct celBodyInfo 00096 { 00097 csColliderGeometryType type; 00098 csVector3 offset; 00099 float mass; 00100 float radius; // Only for cylinder and sphere. 00101 float length; // Only for cylinder. 00102 csVector3 size; // Only for box. 00103 }; 00104 00111 class DynFactJointDefinition 00112 { 00113 public: 00114 csOrthoTransform trans; 00115 bool transX, transY, transZ; 00116 csVector3 mindist, maxdist; 00117 bool rotX, rotY, rotZ; 00118 csVector3 minrot, maxrot; 00119 csVector3 bounce; 00120 csVector3 maxforce; 00121 00122 public: 00123 DynFactJointDefinition () 00124 { 00125 SetTransConstraints (false, false, false); 00126 SetRotConstraints (false, false, false); 00127 SetMinMaxDistance (csVector3 (0), csVector3 (1000.0f)); 00128 SetMinMaxAngle (csVector3 (-100.0f), csVector3 (100.0f)); 00129 SetBounce (csVector3 (0)); 00130 SetMaxForce (csVector3 (0.1f)); 00131 } 00132 00136 void SetTransform (const csOrthoTransform& trans) { this->trans = trans; } 00137 const csOrthoTransform& GetTransform () const { return trans; } 00138 00142 void SetTransConstraints (bool x, bool y, bool z) 00143 { 00144 transX = x; 00145 transY = y; 00146 transZ = z; 00147 } 00148 bool IsXTransConstrained () const { return transX; } 00149 bool IsYTransConstrained () const { return transY; } 00150 bool IsZTransConstrained () const { return transZ; } 00151 00155 void SetMinMaxDistance (const csVector3& min, const csVector3& max) 00156 { 00157 mindist = min; 00158 maxdist = max; 00159 } 00160 const csVector3& GetMinimumDistance () const { return mindist; } 00161 const csVector3& GetMaximumDistance () const { return maxdist; } 00162 00166 void SetRotConstraints (bool x, bool y, bool z) 00167 { 00168 rotX = x; 00169 rotY = y; 00170 rotZ = z; 00171 } 00172 bool IsXRotConstrained () const { return rotX; } 00173 bool IsYRotConstrained () const { return rotY; } 00174 bool IsZRotConstrained () const { return rotZ; } 00175 00179 void SetMinMaxAngle (const csVector3& min, const csVector3& max) 00180 { 00181 minrot = min; 00182 maxrot = max; 00183 } 00184 const csVector3& GetMinimumAngle () const { return minrot; } 00185 const csVector3& GetMaximumAngle () const { return maxrot; } 00186 00191 void SetBounce (const csVector3& bounce) { this->bounce = bounce; } 00192 const csVector3& GetBounce () const { return bounce; } 00193 00197 void SetMaxForce (const csVector3& maxforce) { this->maxforce = maxforce; } 00198 const csVector3& GetMaxForce () const { return maxforce; } 00199 }; 00200 00204 struct iAttributeIterator : public virtual iBase 00205 { 00206 SCF_INTERFACE(iAttributeIterator,0,0,1); 00207 00208 virtual bool HasNext () const = 0; 00210 virtual csStringID Next () = 0; 00211 }; 00212 00216 struct iDynamicFactory : public virtual iBase 00217 { 00218 SCF_INTERFACE(iDynamicFactory,0,0,1); 00219 00220 virtual const char* GetName () const = 0; 00221 00222 virtual iObject* QueryObject () = 0; 00223 00228 virtual bool IsLogicFactory () const = 0; 00229 00234 virtual bool IsLightFactory () const = 0; 00235 00241 virtual void SetDefaultEntityTemplate (const char* tmpName) = 0; 00242 00246 virtual const char* GetDefaultEntityTemplate () const = 0; 00247 00252 virtual void SetGeometryGenerator (iGeometryGenerator* gen) = 0; 00253 virtual iGeometryGenerator* GetGeometryGenerator () const = 0; 00254 00259 virtual size_t GetObjectCount () const = 0; 00260 00264 virtual void SetAttribute (csStringID nameID, const char* value) = 0; 00265 virtual void SetAttribute (const char* name, const char* value) = 0; 00266 00270 virtual void ClearAttribute (csStringID nameID) = 0; 00271 virtual void ClearAttribute (const char* name) = 0; 00272 00276 virtual const char* GetAttribute (csStringID nameID) const = 0; 00277 virtual const char* GetAttribute (const char* name) const = 0; 00278 00282 virtual csPtr<iAttributeIterator> GetAttributes () const = 0; 00283 00287 virtual float GetMaximumRadiusRelative () const = 0; 00288 virtual void SetMaximumRadiusRelative (float r) = 0; 00289 00294 virtual float GetImposterRadius () const = 0; 00295 virtual void SetImposterRadius (float r) = 0; 00296 00301 virtual const csBox3& GetBBox () const = 0; 00302 00308 virtual const csBox3& GetPhysicsBBox () const = 0; 00309 00310 // ------------------------------------------------------------------------ 00311 00317 virtual void AddRigidBox (const csVector3& offset, const csVector3& size, 00318 float mass, size_t idx = csArrayItemNotFound) = 0; 00319 00325 virtual void AddRigidSphere (float radius, const csVector3& offset, 00326 float mass, size_t idx = csArrayItemNotFound) = 0; 00327 00333 virtual void AddRigidCylinder (float radius, float length, 00334 const csVector3& offset, float mass, size_t idx = csArrayItemNotFound) = 0; 00335 00341 virtual void AddRigidCapsule (float radius, float length, 00342 const csVector3& offset, float mass, size_t idx = csArrayItemNotFound) = 0; 00343 00349 virtual void AddRigidMesh (const csVector3& offset, float mass, 00350 size_t idx = csArrayItemNotFound) = 0; 00351 00357 virtual void AddRigidConvexMesh (const csVector3& offset, float mass, 00358 size_t idx = csArrayItemNotFound) = 0; 00359 00363 virtual size_t GetBodyCount () const = 0; 00364 00368 virtual celBodyInfo GetBody (size_t idx) const = 0; 00369 00373 virtual void DeleteBody (size_t idx) = 0; 00374 00378 virtual void DeleteBodies () = 0; 00379 00385 virtual void SetColliderEnabled (bool e) = 0; 00386 virtual bool IsColliderEnabled () const = 0; 00387 00388 // ------------------------------------------------------------------------ 00389 00394 virtual DynFactJointDefinition& CreateJoint () = 0; 00395 00399 virtual size_t GetJointCount () const = 0; 00400 00405 virtual DynFactJointDefinition& GetJoint (size_t idx) = 0; 00406 00410 virtual void SetJoint (size_t idx, const DynFactJointDefinition& def) = 0; 00411 00415 virtual void RemoveJoint (size_t idx) = 0; 00416 00420 virtual void RemoveJoints () = 0; 00421 00422 // ------------------------------------------------------------------------ 00423 00428 virtual bool CreatePivotJoint (const csVector3& objpos) = 0; 00429 00433 virtual size_t GetPivotJointCount () const = 0; 00434 00438 virtual csVector3 GetPivotJointPosition (size_t idx) = 0; 00439 00443 virtual void SetPivotJointPosition (size_t idx, const csVector3& objpos) = 0; 00444 00448 virtual void RemovePivotJoint (size_t idx) = 0; 00449 00453 virtual void RemovePivotJoints () = 0; 00454 }; 00455 00459 struct iDynamicObject : public virtual iBase 00460 { 00461 SCF_INTERFACE(iDynamicObject,0,0,1); 00462 00466 virtual uint GetID () const = 0; 00467 00471 virtual iDynamicFactory* GetFactory () const = 0; 00472 00476 virtual iDynamicCell* GetCell () const = 0; 00477 00481 virtual void MakeStatic () = 0; 00482 00486 virtual void MakeDynamic () = 0; 00487 00491 virtual void MakeKinematic () = 0; 00492 00496 virtual void UndoKinematic () = 0; 00497 00501 virtual bool IsStatic () const = 0; 00502 00506 virtual void SetHilight (bool hi) = 0; 00507 00511 virtual bool IsHilight () const = 0; 00512 00518 virtual iMeshWrapper* GetMesh () const = 0; 00519 00525 virtual iLight* GetLight () const = 0; 00526 00531 #if NEW_PHYSICS 00532 virtual CS::Physics::iRigidBody* GetBody () const = 0; 00533 #else 00534 virtual iRigidBody* GetBody () const = 0; 00535 #endif 00536 00541 virtual bool RecreatePivotJoints () = 0; 00542 00547 virtual bool CreatePivotJoint (const csVector3& worldpos) = 0; 00548 00552 virtual size_t GetPivotJointCount () const = 0; 00553 00557 virtual csVector3 GetPivotJointPosition (size_t idx) = 0; 00558 00562 virtual void SetPivotJointPosition (size_t idx, const csVector3& worldpos) = 0; 00563 00567 virtual void RemovePivotJoint (size_t idx) = 0; 00568 00572 virtual void RemovePivotJoints () = 0; 00573 00580 virtual bool Connect (size_t jointIdx, iDynamicObject* obj) = 0; 00581 00586 virtual void RecreateJoints () = 0; 00587 00593 virtual iDynamicObject* GetConnectedObject (size_t jointIdx) = 0; 00594 00598 virtual void RefreshColliders () = 0; 00599 00603 virtual const csReversibleTransform& GetTransform () = 0; 00604 00610 virtual void SetTransform (const csReversibleTransform& trans) = 0; 00611 00617 virtual bool SetEntity (const char* entityName, const char* entityTplName, iCelParameterBlock* params) = 0; 00618 00622 virtual void SetEntityName (const char* name) = 0; 00623 00627 virtual const char* GetEntityName () const = 0; 00628 00632 virtual void LinkEntity (iCelEntity* entity) = 0; 00633 00638 virtual void UnlinkEntity () = 0; 00639 00643 virtual iCelEntityTemplate* GetEntityTemplate () const = 0; 00644 00649 virtual iCelParameterBlock* GetEntityParameters () const = 0; 00650 00655 virtual iCelEntity* GetEntity () const = 0; 00656 00660 virtual iCelEntity* ForceEntity () = 0; 00661 00665 virtual csPtr<iString> GetDescription () const = 0; 00666 00672 virtual size_t AddDecal (const char* decalTplName, const csVector3& position, 00673 const csVector3& up, const csVector3& normal, float width, float height) = 0; 00674 00678 virtual void RemoveDecal (size_t id) = 0; 00679 }; 00680 00684 struct iDynamicCellIterator : public virtual iBase 00685 { 00686 SCF_INTERFACE(iDynamicCellIterator,0,0,1); 00687 00688 virtual bool HasNext () const = 0; 00689 virtual iDynamicCell* NextCell () = 0; 00690 }; 00691 00695 struct iDynamicCell : public virtual iBase 00696 { 00697 SCF_INTERFACE(iDynamicCell,0,0,1); 00698 00699 virtual const char* GetName () const = 0; 00700 00705 virtual iDynamicObject* AddObject (const char* factory, 00706 const csReversibleTransform& trans) = 0; 00707 00711 virtual size_t GetObjectCount () const = 0; 00712 00716 virtual iDynamicObject* GetObject (size_t i) const = 0; 00717 00721 virtual void DeleteObject (iDynamicObject* dynobj) = 0; 00725 virtual void DeleteObjects () = 0; 00726 00730 virtual void Save (iDocumentNode* node) = 0; 00734 virtual csRef<iString> Load (iDocumentNode* node) = 0; 00735 00739 virtual void MarkBaseline () = 0; 00740 00744 virtual iSector* GetSector () const = 0; 00745 00746 #if NEW_PHYSICS 00747 00750 virtual CS::Physics::iPhysicalSector* GetDynamicSector () const = 0; 00751 #else 00752 00755 virtual iDynamicSystem* GetDynamicSystem () const = 0; 00756 #endif 00757 }; 00758 00765 struct iPcDynamicWorld : public virtual iBase 00766 { 00767 SCF_INTERFACE(iPcDynamicWorld,0,0,1); 00768 00772 virtual void SetELCM (iELCM* elcm) = 0; 00773 00779 virtual void InhibitEntities (bool e) = 0; 00780 00784 virtual bool IsInhibitEntities () const = 0; 00785 00791 virtual void EnableGameMode (bool e) = 0; 00792 virtual bool IsGameMode () const = 0; 00793 00801 virtual void EnablePhysics (bool e) = 0; 00802 virtual bool IsPhysicsEnabled () const = 0; 00803 00804 //------------------------------------------------------------------------------ 00805 00806 #if NEW_PHYSICS 00807 00812 virtual iDynamicCell* AddCell (const char* name, iSector* sector, 00813 CS::Physics::iPhysicalSector* dynSector = 0) = 0; 00814 #else 00815 00820 virtual iDynamicCell* AddCell (const char* name, iSector* sector, 00821 iDynamicSystem* dynSys = 0) = 0; 00822 #endif 00823 00827 virtual iDynamicCell* FindCell (const char* name) = 0; 00828 00832 virtual void RemoveCell (iDynamicCell* cell) = 0; 00833 00837 virtual void SetCurrentCell (iDynamicCell* cell) = 0; 00838 00842 virtual iDynamicCell* GetCurrentCell () const = 0; 00843 00847 virtual csPtr<iDynamicCellIterator> GetCells () const = 0; 00848 00853 virtual void SetDynamicCellCreator (iDynamicCellCreator* creator) = 0; 00854 00855 //------------------------------------------------------------------------------ 00856 00862 virtual void RegisterDecalTemplate (const char* name, iDecalTemplate* tpl) = 0; 00863 00867 virtual size_t GetDecalTemplateCount () const = 0; 00868 00872 virtual iDecalTemplate* GetDecalTemplate (size_t index) const = 0; 00873 00877 virtual iDecalTemplate* FindDecalTemplate (const char* name) = 0; 00878 00882 virtual void RemoveDecalTemplate (const char* name) = 0; 00883 00887 virtual void RemoveDecalTemplates () = 0; 00888 00889 //------------------------------------------------------------------------------ 00890 00901 virtual iDynamicFactory* AddFactory (const char* factory, float maxradius, 00902 float imposterradius) = 0; 00903 00909 virtual iDynamicFactory* AddLogicFactory (const char* factory, float maxradius, 00910 float imposterradius, const csBox3& box) = 0; 00911 00919 virtual iDynamicFactory* AddLightFactory (const char* factory, float maxradius) = 0; 00920 00924 virtual void RemoveFactory (iDynamicFactory* factory) = 0; 00925 00927 virtual void DeleteFactories () = 0; 00928 00932 virtual size_t GetFactoryCount () const = 0; 00933 00937 virtual iDynamicFactory* GetFactory (size_t index) const = 0; 00938 00942 virtual iDynamicFactory* FindFactory (const char* name) const = 0; 00943 00944 //------------------------------------------------------------------------------ 00945 00952 virtual void UpdateObject (iDynamicObject* dynobj) = 0; 00953 00957 virtual void UpdateObjects (iDynamicCell* cell) = 0; 00958 00962 virtual void UpdateObjects (iDynamicFactory* factory) = 0; 00963 00964 //------------------------------------------------------------------------------ 00965 00970 virtual void ForceVisible (iDynamicObject* dynobj) = 0; 00971 00976 virtual void ForceInvisible (iDynamicObject* dynobj) = 0; 00977 00981 virtual void DeleteAll () = 0; 00982 00986 virtual void SetRadius (float radius) = 0; 00987 00991 virtual float GetRadius () const = 0; 00992 00996 virtual void PrepareView (iCamera* camera, float elapsed_time) = 0; 00997 01003 virtual void ForceView (iCamera* camera) = 0; 01004 01008 virtual iDynamicObject* FindObject (iCelEntity* entity) const = 0; 01012 #if NEW_PHYSICS 01013 virtual iDynamicObject* FindObject (CS::Physics::iRigidBody* body) const = 0; 01014 #else 01015 virtual iDynamicObject* FindObject (iRigidBody* body) const = 0; 01016 #endif 01017 01020 virtual iDynamicObject* FindObject (iMeshWrapper* mesh) const = 0; 01025 virtual iDynamicObject* FindObject (const char* name) const = 0; 01029 virtual iDynamicObject* FindObject (uint id) const = 0; 01030 01034 virtual void Save (iDocumentNode* node) = 0; 01035 01040 virtual csRef<iString> Load (iDocumentNode* node) = 0; 01041 01045 virtual void MarkBaseline () = 0; 01046 01050 virtual csPtr<iDataBuffer> SaveModifications () = 0; 01051 01055 virtual void RestoreModifications (iDataBuffer* buf) = 0; 01056 01060 virtual void Dump () = 0; 01061 }; 01062 01063 #endif // __CEL_PF_DYNWORLD__ 01064
Generated for CEL: Crystal Entity Layer 2.1 by doxygen 1.6.1
