#ifndef _URDF2BULLET_H
#define _URDF2BULLET_H
#include "LinearMath/btAlignedObjectArray.h"
#include "LinearMath/btTransform.h"
#include <string>
#include "URDFJointTypes.h"  //for UrdfMaterialColor cache

class btVector3;
class btTransform;
class btMultiBodyDynamicsWorld;
class btTransform;

class URDFImporterInterface;
class MultiBodyCreationInterface;

//manually sync with eURDF_Flags in SharedMemoryPublic.h!
enum ConvertURDFFlags
{
	CUF_USE_SDF = 1,
	// Use inertia values in URDF instead of recomputing them from collision shape.
	CUF_USE_URDF_INERTIA = 2,
	CUF_USE_MJCF = 4,
	CUF_USE_SELF_COLLISION = 8,
	CUF_USE_SELF_COLLISION_EXCLUDE_PARENT = 16,
	CUF_USE_SELF_COLLISION_EXCLUDE_ALL_PARENTS = 32,
	CUF_RESERVED = 64,
	CUF_USE_IMPLICIT_CYLINDER = 128,
	CUF_GLOBAL_VELOCITIES_MB = 256,
	CUF_MJCF_COLORS_FROM_FILE = 512,
	CUF_ENABLE_CACHED_GRAPHICS_SHAPES = 1024,
	CUF_ENABLE_SLEEPING = 2048,
	CUF_INITIALIZE_SAT_FEATURES = 4096,
	CUF_USE_SELF_COLLISION_INCLUDE_PARENT = 8192,
};

struct UrdfVisualShapeCache
{
	btAlignedObjectArray<UrdfMaterialColor> m_cachedUrdfLinkColors;
	btAlignedObjectArray<int> m_cachedUrdfLinkVisualShapeIndices;
};

void ConvertURDF2Bullet(const URDFImporterInterface& u2b,
						MultiBodyCreationInterface& creationCallback,
						const btTransform& rootTransformInWorldSpace,
						btMultiBodyDynamicsWorld* world,
						bool createMultiBody,
						const char* pathPrefix,
						int flags = 0,
						UrdfVisualShapeCache* cachedLinkGraphicsShapes = 0);

#endif  //_URDF2BULLET_H
