cstool/collisionhelper.h
Go to the documentation of this file.00001 /* 00002 Copyright (C) 2012 Christian Van Brussel, Institute of Information 00003 and Communication Technologies, Electronics and Applied Mathematics 00004 at Universite catholique de Louvain, Belgium 00005 http://www.uclouvain.be/en-icteam.html 00006 Copyright (C) 2012 by Dominik Seifert 00007 Copyright (C) 2011 by Liu Lu 00008 00009 This library is free software; you can redistribute it and/or 00010 modify it under the terms of the GNU Library General Public 00011 License as published by the Free Software Foundation; either 00012 version 2 of the License, or (at your option) any later version. 00013 00014 This library is distributed in the hope that it will be useful, 00015 but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00017 Library General Public License for more details. 00018 00019 You should have received a copy of the GNU Library General Public 00020 License along with this library; if not, write to the Free 00021 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00022 */ 00023 #ifndef __CS_CSTOOL_COLLISIONHELPER_H 00024 #define __CS_CSTOOL_COLLISIONHELPER_H 00025 00030 #include "csutil/strhash.h" 00031 #include "csutil/scf_implementation.h" 00032 #include "iutil/strset.h" 00033 00034 struct iCollection; 00035 struct iEngine; 00036 struct iMeshFactoryWrapper; 00037 struct iMeshWrapper; 00038 struct iSector; 00039 struct iSyntaxService; 00040 struct iTriangleMesh; 00041 00042 namespace CS { 00043 namespace Physics { 00044 00045 struct iJointFactory; 00046 struct iPhysicalObjectFactory; 00047 struct iRigidBodyFactory; 00048 00049 } // namespace Physics 00050 } // namespace CS 00051 00052 namespace CS { 00053 namespace Collisions { 00054 00055 struct iCollider; 00056 struct iCollisionObjectFactory; 00057 struct iCollisionSystem; 00058 struct iConvexDecomposer; 00059 00063 class CS_CRYSTALSPACE_EXPORT CollisionHelper 00064 { 00065 iObjectRegistry* objectRegistry; 00066 csRef<iEngine> engine; 00067 csRef<CS::Collisions::iCollisionSystem> collisionSystem; 00068 csRef<CS::Collisions::iConvexDecomposer> decomposer; 00069 csRef<iSyntaxService> synldr; 00070 csStringHash xmltokens; 00071 csStringID baseID; 00072 csStringID collisionID; 00073 00074 void ReportError (const char* msg, ...); 00075 void ReportWarning (const char* msg, ...); 00076 00077 void ParseCollisionObjectProperties 00078 (iDocumentNode* node, CS::Collisions::iCollisionObjectFactory* object, 00079 iLoaderContext* loaderContext, iBase* context) const; 00080 void ParsePhysicalObjectProperties 00081 (iDocumentNode* node, CS::Physics::iPhysicalObjectFactory* object, 00082 iLoaderContext* loaderContext, iBase* context) const; 00083 bool ParseJointConstraint 00084 (iDocumentNode *node, bool& x, bool& y, bool& z, csVector3& min, csVector3& max) const; 00085 00086 public: 00088 bool Initialize (iObjectRegistry* objectRegistry, 00089 CS::Collisions::iCollisionSystem* collisionSystem = nullptr, 00090 CS::Collisions::iConvexDecomposer* decomposer = nullptr); 00091 00093 void InitializeCollisionObjects (iEngine* engine, 00094 iCollection* collection = nullptr) const; 00095 00097 void InitializeCollisionObjects (iSector* sector, 00098 iCollection* collection = nullptr) const; 00099 00101 void InitializeCollisionObjects (iSector* sector, 00102 iMeshWrapper* mesh) const; 00103 00108 iTriangleMesh* FindCollisionMesh (iMeshWrapper* mesh) const; 00109 00114 iTriangleMesh* FindCollisionMesh (iMeshFactoryWrapper* meshFactory) const; 00115 00116 // TODO: find coll/physical factory 00117 00122 void DecomposeConcaveMesh (iTriangleMesh* mesh, CS::Collisions::iCollider* collider, 00123 CS::Collisions::iConvexDecomposer* decomposer) const; 00124 00131 void DecomposeConcaveMesh (iMeshWrapper* mesh, CS::Collisions::iCollider* collider, 00132 CS::Collisions::iConvexDecomposer* decomposer) const; 00133 00134 // TODO: CollisionParser? 00135 // TODO: Document me 00136 csPtr<CS::Collisions::iCollider> ParseCollider 00137 (iDocumentNode* node, csTransform& transform, iLoaderContext* loaderContext, 00138 iBase* context) const; 00139 csPtr<CS::Collisions::iCollisionObjectFactory> ParseCollisionObjectFactory 00140 (iDocumentNode* node, iLoaderContext* loaderContext, iBase* context) const; 00141 csPtr<CS::Collisions::iCollisionObjectFactory> ParseCollisionObjectSimpleFactory 00142 (iDocumentNode* node, iLoaderContext* loaderContext, iBase* context) const; 00143 csPtr<CS::Collisions::iCollisionObjectFactory> ParseCollisionObjectGhostFactory 00144 (iDocumentNode* node, iLoaderContext* loaderContext, iBase* context) const; 00145 csPtr<CS::Physics::iRigidBodyFactory> ParseRigidBodyFactory 00146 (iDocumentNode* node, iLoaderContext* loaderContext, iBase* context) const; 00147 csPtr<CS::Physics::iJointFactory> ParseJointFactory 00148 (iDocumentNode* node, iLoaderContext* loaderContext, iBase* context) const; 00149 }; 00150 00151 } // namespace Collisions 00152 } // namespace CS 00153 00154 #endif // __CS_CSTOOL_COLLISIONHELPER_H
Generated for Crystal Space 2.1 by doxygen 1.6.1
