/*
 * Copyright (c) 2008-2015, NVIDIA CORPORATION.  All rights reserved.
 *
 * NVIDIA CORPORATION and its licensors retain all intellectual property
 * and proprietary rights in and to this software, related documentation
 * and any modifications thereto.  Any use, reproduction, disclosure or
 * distribution of this software and related documentation without an express
 * license agreement from NVIDIA CORPORATION is strictly prohibited.
 */


// This file was generated by NxParameterized/scripts/GenParameterized.pl
// Created: 2015.10.22 17:26:30

#include "ClothingActorParam_0p13.h"
#include <string.h>
#include <stdlib.h>

using namespace NxParameterized;

namespace physx
{
namespace apex
{

using namespace ClothingActorParam_0p13NS;

const char* const ClothingActorParam_0p13Factory::vptr =
    NxParameterized::getVptr<ClothingActorParam_0p13, ClothingActorParam_0p13::ClassAlignment>();

const physx::PxU32 NumParamDefs = 78;
static NxParameterized::DefinitionImpl* ParamDefTable; // now allocated in buildTree [NumParamDefs];


static const size_t ParamLookupChildrenTable[] =
{
	1, 2, 3, 8, 9, 10, 11, 12, 13, 14, 15, 20, 23, 26, 27, 29, 40, 56, 59, 60, 61, 63,
	65, 67, 68, 69, 70, 71, 72, 74, 75, 76, 77, 4, 5, 6, 7, 16, 17, 18, 19, 21, 22, 24,
	25, 28, 30, 31, 32, 37, 38, 39, 33, 34, 35, 36, 41, 47, 48, 53, 54, 55, 42, 43, 44,
	45, 46, 49, 50, 51, 52, 57, 58, 62, 64, 66, 73,
};

#define TENUM(type) physx::##type
#define CHILDREN(index) &ParamLookupChildrenTable[index]
static const NxParameterized::ParamLookupNode ParamLookupTable[NumParamDefs] =
{
	{ TYPE_STRUCT, false, 0, CHILDREN(0), 33 },
	{ TYPE_MAT44, false, (size_t)(&((ParametersStruct*)0)->globalPose), NULL, 0 }, // globalPose
	{ TYPE_BOOL, false, (size_t)(&((ParametersStruct*)0)->useHardwareCloth), NULL, 0 }, // useHardwareCloth
	{ TYPE_STRUCT, false, (size_t)(&((ParametersStruct*)0)->flags), CHILDREN(33), 4 }, // flags
	{ TYPE_BOOL, false, (size_t)(&((ClothingActorFlags_Type*)0)->ParallelCpuSkinning), NULL, 0 }, // flags.ParallelCpuSkinning
	{ TYPE_BOOL, false, (size_t)(&((ClothingActorFlags_Type*)0)->RecomputeNormals), NULL, 0 }, // flags.RecomputeNormals
	{ TYPE_BOOL, false, (size_t)(&((ClothingActorFlags_Type*)0)->Visualize), NULL, 0 }, // flags.Visualize
	{ TYPE_BOOL, false, (size_t)(&((ClothingActorFlags_Type*)0)->CorrectSimulationNormals), NULL, 0 }, // flags.CorrectSimulationNormals
	{ TYPE_BOOL, false, (size_t)(&((ParametersStruct*)0)->fallbackSkinning), NULL, 0 }, // fallbackSkinning
	{ TYPE_BOOL, false, (size_t)(&((ParametersStruct*)0)->slowStart), NULL, 0 }, // slowStart
	{ TYPE_BOOL, false, (size_t)(&((ParametersStruct*)0)->useInternalBoneOrder), NULL, 0 }, // useInternalBoneOrder
	{ TYPE_BOOL, false, (size_t)(&((ParametersStruct*)0)->updateStateWithGlobalMatrices), NULL, 0 }, // updateStateWithGlobalMatrices
	{ TYPE_U32, false, (size_t)(&((ParametersStruct*)0)->uvChannelForTangentUpdate), NULL, 0 }, // uvChannelForTangentUpdate
	{ TYPE_F32, false, (size_t)(&((ParametersStruct*)0)->maxDistanceBlendTime), NULL, 0 }, // maxDistanceBlendTime
	{ TYPE_U32, false, (size_t)(&((ParametersStruct*)0)->clothingMaterialIndex), NULL, 0 }, // clothingMaterialIndex
	{ TYPE_STRUCT, false, (size_t)(&((ParametersStruct*)0)->lodWeights), CHILDREN(37), 4 }, // lodWeights
	{ TYPE_F32, false, (size_t)(&((LODWeights_Type*)0)->maxDistance), NULL, 0 }, // lodWeights.maxDistance
	{ TYPE_F32, false, (size_t)(&((LODWeights_Type*)0)->distanceWeight), NULL, 0 }, // lodWeights.distanceWeight
	{ TYPE_F32, false, (size_t)(&((LODWeights_Type*)0)->bias), NULL, 0 }, // lodWeights.bias
	{ TYPE_F32, false, (size_t)(&((LODWeights_Type*)0)->benefitsBias), NULL, 0 }, // lodWeights.benefitsBias
	{ TYPE_STRUCT, false, (size_t)(&((ParametersStruct*)0)->windParams), CHILDREN(41), 2 }, // windParams
	{ TYPE_VEC3, false, (size_t)(&((WindParameters_Type*)0)->Velocity), NULL, 0 }, // windParams.Velocity
	{ TYPE_F32, false, (size_t)(&((WindParameters_Type*)0)->Adaption), NULL, 0 }, // windParams.Adaption
	{ TYPE_STRUCT, false, (size_t)(&((ParametersStruct*)0)->maxDistanceScale), CHILDREN(43), 2 }, // maxDistanceScale
	{ TYPE_F32, false, (size_t)(&((MaxDistanceScale_Type*)0)->Scale), NULL, 0 }, // maxDistanceScale.Scale
	{ TYPE_BOOL, false, (size_t)(&((MaxDistanceScale_Type*)0)->Multipliable), NULL, 0 }, // maxDistanceScale.Multipliable
	{ TYPE_U64, false, (size_t)(&((ParametersStruct*)0)->userData), NULL, 0 }, // userData
	{ TYPE_ARRAY, true, (size_t)(&((ParametersStruct*)0)->boneMatrices), CHILDREN(45), 1 }, // boneMatrices
	{ TYPE_MAT44, false, 1 * sizeof(physx::PxMat44), NULL, 0 }, // boneMatrices[]
	{ TYPE_STRUCT, false, (size_t)(&((ParametersStruct*)0)->clothDescTemplate), CHILDREN(46), 6 }, // clothDescTemplate
	{ TYPE_F32, false, (size_t)(&((ClothDescTemplate_Type*)0)->collisionResponseCoefficient), NULL, 0 }, // clothDescTemplate.collisionResponseCoefficient
	{ TYPE_U16, false, (size_t)(&((ClothDescTemplate_Type*)0)->collisionGroup), NULL, 0 }, // clothDescTemplate.collisionGroup
	{ TYPE_STRUCT, false, (size_t)(&((ClothDescTemplate_Type*)0)->groupsMask), CHILDREN(52), 4 }, // clothDescTemplate.groupsMask
	{ TYPE_U32, false, (size_t)(&((GroupsMask_Type*)0)->bits0), NULL, 0 }, // clothDescTemplate.groupsMask.bits0
	{ TYPE_U32, false, (size_t)(&((GroupsMask_Type*)0)->bits1), NULL, 0 }, // clothDescTemplate.groupsMask.bits1
	{ TYPE_U32, false, (size_t)(&((GroupsMask_Type*)0)->bits2), NULL, 0 }, // clothDescTemplate.groupsMask.bits2
	{ TYPE_U32, false, (size_t)(&((GroupsMask_Type*)0)->bits3), NULL, 0 }, // clothDescTemplate.groupsMask.bits3
	{ TYPE_BOUNDS3, false, (size_t)(&((ClothDescTemplate_Type*)0)->validBounds), NULL, 0 }, // clothDescTemplate.validBounds
	{ TYPE_U64, false, (size_t)(&((ClothDescTemplate_Type*)0)->compartment), NULL, 0 }, // clothDescTemplate.compartment
	{ TYPE_U64, false, (size_t)(&((ClothDescTemplate_Type*)0)->userData), NULL, 0 }, // clothDescTemplate.userData
	{ TYPE_STRUCT, false, (size_t)(&((ParametersStruct*)0)->shapeDescTemplate), CHILDREN(56), 6 }, // shapeDescTemplate
	{ TYPE_STRUCT, false, (size_t)(&((ShapeDescTemplate_Type*)0)->flags), CHILDREN(62), 5 }, // shapeDescTemplate.flags
	{ TYPE_BOOL, false, (size_t)(&((ShapeDescFlags_Type*)0)->NX_SF_VISUALIZATION), NULL, 0 }, // shapeDescTemplate.flags.NX_SF_VISUALIZATION
	{ TYPE_BOOL, false, (size_t)(&((ShapeDescFlags_Type*)0)->NX_SF_DISABLE_COLLISION), NULL, 0 }, // shapeDescTemplate.flags.NX_SF_DISABLE_COLLISION
	{ TYPE_BOOL, false, (size_t)(&((ShapeDescFlags_Type*)0)->NX_SF_DISABLE_RAYCASTING), NULL, 0 }, // shapeDescTemplate.flags.NX_SF_DISABLE_RAYCASTING
	{ TYPE_BOOL, false, (size_t)(&((ShapeDescFlags_Type*)0)->NX_SF_DYNAMIC_DYNAMIC_CCD), NULL, 0 }, // shapeDescTemplate.flags.NX_SF_DYNAMIC_DYNAMIC_CCD
	{ TYPE_BOOL, false, (size_t)(&((ShapeDescFlags_Type*)0)->NX_SF_DISABLE_SCENE_QUERIES), NULL, 0 }, // shapeDescTemplate.flags.NX_SF_DISABLE_SCENE_QUERIES
	{ TYPE_U16, false, (size_t)(&((ShapeDescTemplate_Type*)0)->collisionGroup), NULL, 0 }, // shapeDescTemplate.collisionGroup
	{ TYPE_STRUCT, false, (size_t)(&((ShapeDescTemplate_Type*)0)->groupsMask), CHILDREN(67), 4 }, // shapeDescTemplate.groupsMask
	{ TYPE_U32, false, (size_t)(&((GroupsMask_Type*)0)->bits0), NULL, 0 }, // shapeDescTemplate.groupsMask.bits0
	{ TYPE_U32, false, (size_t)(&((GroupsMask_Type*)0)->bits1), NULL, 0 }, // shapeDescTemplate.groupsMask.bits1
	{ TYPE_U32, false, (size_t)(&((GroupsMask_Type*)0)->bits2), NULL, 0 }, // shapeDescTemplate.groupsMask.bits2
	{ TYPE_U32, false, (size_t)(&((GroupsMask_Type*)0)->bits3), NULL, 0 }, // shapeDescTemplate.groupsMask.bits3
	{ TYPE_U16, false, (size_t)(&((ShapeDescTemplate_Type*)0)->materialIndex), NULL, 0 }, // shapeDescTemplate.materialIndex
	{ TYPE_U64, false, (size_t)(&((ShapeDescTemplate_Type*)0)->userData), NULL, 0 }, // shapeDescTemplate.userData
	{ TYPE_U64, false, (size_t)(&((ShapeDescTemplate_Type*)0)->name), NULL, 0 }, // shapeDescTemplate.name
	{ TYPE_STRUCT, false, (size_t)(&((ParametersStruct*)0)->actorDescTemplate), CHILDREN(71), 2 }, // actorDescTemplate
	{ TYPE_U64, false, (size_t)(&((ActorDescTemplate_Type*)0)->userData), NULL, 0 }, // actorDescTemplate.userData
	{ TYPE_U64, false, (size_t)(&((ActorDescTemplate_Type*)0)->name), NULL, 0 }, // actorDescTemplate.name
	{ TYPE_F32, false, (size_t)(&((ParametersStruct*)0)->actorScale), NULL, 0 }, // actorScale
	{ TYPE_REF, false, (size_t)(&((ParametersStruct*)0)->runtimeCooked), NULL, 0 }, // runtimeCooked
	{ TYPE_ARRAY, true, (size_t)(&((ParametersStruct*)0)->morphDisplacements), CHILDREN(73), 1 }, // morphDisplacements
	{ TYPE_VEC3, false, 1 * sizeof(physx::PxVec3), NULL, 0 }, // morphDisplacements[]
	{ TYPE_ARRAY, true, (size_t)(&((ParametersStruct*)0)->morphPhysicalMeshNewPositions), CHILDREN(74), 1 }, // morphPhysicalMeshNewPositions
	{ TYPE_VEC3, false, 1 * sizeof(physx::PxVec3), NULL, 0 }, // morphPhysicalMeshNewPositions[]
	{ TYPE_ARRAY, true, (size_t)(&((ParametersStruct*)0)->morphGraphicalMeshNewPositions), CHILDREN(75), 1 }, // morphGraphicalMeshNewPositions
	{ TYPE_VEC3, false, 1 * sizeof(physx::PxVec3), NULL, 0 }, // morphGraphicalMeshNewPositions[]
	{ TYPE_BOOL, false, (size_t)(&((ParametersStruct*)0)->allowAdaptiveTargetFrequency), NULL, 0 }, // allowAdaptiveTargetFrequency
	{ TYPE_BOOL, false, (size_t)(&((ParametersStruct*)0)->useVelocityClamping), NULL, 0 }, // useVelocityClamping
	{ TYPE_BOUNDS3, false, (size_t)(&((ParametersStruct*)0)->vertexVelocityClamp), NULL, 0 }, // vertexVelocityClamp
	{ TYPE_F32, false, (size_t)(&((ParametersStruct*)0)->pressure), NULL, 0 }, // pressure
	{ TYPE_BOOL, false, (size_t)(&((ParametersStruct*)0)->multiplyGlobalPoseIntoBones), NULL, 0 }, // multiplyGlobalPoseIntoBones
	{ TYPE_ARRAY, true, (size_t)(&((ParametersStruct*)0)->overrideMaterialNames), CHILDREN(76), 1 }, // overrideMaterialNames
	{ TYPE_STRING, false, 1 * sizeof(NxParameterized::DummyStringStruct), NULL, 0 }, // overrideMaterialNames[]
	{ TYPE_ENUM, false, (size_t)(&((ParametersStruct*)0)->simulationBackend), NULL, 0 }, // simulationBackend
	{ TYPE_BOOL, false, (size_t)(&((ParametersStruct*)0)->useStiffSolver), NULL, 0 }, // useStiffSolver
	{ TYPE_BOOL, false, (size_t)(&((ParametersStruct*)0)->freezeByLOD), NULL, 0 }, // freezeByLOD
	{ TYPE_BOOL, false, (size_t)(&((ParametersStruct*)0)->localSpaceSim), NULL, 0 }, // localSpaceSim
};


bool ClothingActorParam_0p13::mBuiltFlag = false;
NxParameterized::MutexType ClothingActorParam_0p13::mBuiltFlagMutex;

ClothingActorParam_0p13::ClothingActorParam_0p13(NxParameterized::Traits* traits, void* buf, PxI32* refCount) :
	NxParameters(traits, buf, refCount)
{
	//mParameterizedTraits->registerFactory(className(), &ClothingActorParam_0p13FactoryInst);

	if (!buf) //Do not init data if it is inplace-deserialized
	{
		initDynamicArrays();
		initStrings();
		initReferences();
		initDefaults();
	}
}

ClothingActorParam_0p13::~ClothingActorParam_0p13()
{
	freeStrings();
	freeReferences();
	freeDynamicArrays();
}

void ClothingActorParam_0p13::destroy()
{
	// We cache these fields here to avoid overwrite in destructor
	bool doDeallocateSelf = mDoDeallocateSelf;
	NxParameterized::Traits* traits = mParameterizedTraits;
	physx::PxI32* refCount = mRefCount;
	void* buf = mBuffer;

	this->~ClothingActorParam_0p13();

	NxParameters::destroy(this, traits, doDeallocateSelf, refCount, buf);
}

const NxParameterized::DefinitionImpl* ClothingActorParam_0p13::getParameterDefinitionTree(void)
{
	if (!mBuiltFlag) // Double-checked lock
	{
		NxParameterized::MutexType::ScopedLock lock(mBuiltFlagMutex);
		if (!mBuiltFlag)
		{
			buildTree();
		}
	}

	return(&ParamDefTable[0]);
}

const NxParameterized::DefinitionImpl* ClothingActorParam_0p13::getParameterDefinitionTree(void) const
{
	ClothingActorParam_0p13* tmpParam = const_cast<ClothingActorParam_0p13*>(this);

	if (!mBuiltFlag) // Double-checked lock
	{
		NxParameterized::MutexType::ScopedLock lock(mBuiltFlagMutex);
		if (!mBuiltFlag)
		{
			tmpParam->buildTree();
		}
	}

	return(&ParamDefTable[0]);
}

NxParameterized::ErrorType ClothingActorParam_0p13::getParameterHandle(const char* long_name, Handle& handle) const
{
	ErrorType Ret = NxParameters::getParameterHandle(long_name, handle);
	if (Ret != ERROR_NONE)
	{
		return(Ret);
	}

	size_t offset;
	void* ptr;

	getVarPtr(handle, ptr, offset);

	if (ptr == NULL)
	{
		return(ERROR_INDEX_OUT_OF_RANGE);
	}

	return(ERROR_NONE);
}

NxParameterized::ErrorType ClothingActorParam_0p13::getParameterHandle(const char* long_name, Handle& handle)
{
	ErrorType Ret = NxParameters::getParameterHandle(long_name, handle);
	if (Ret != ERROR_NONE)
	{
		return(Ret);
	}

	size_t offset;
	void* ptr;

	getVarPtr(handle, ptr, offset);

	if (ptr == NULL)
	{
		return(ERROR_INDEX_OUT_OF_RANGE);
	}

	return(ERROR_NONE);
}

void ClothingActorParam_0p13::getVarPtr(const Handle& handle, void*& ptr, size_t& offset) const
{
	ptr = getVarPtrHelper(&ParamLookupTable[0], const_cast<ClothingActorParam_0p13::ParametersStruct*>(&parameters()), handle, offset);
}


/* Dynamic Handle Indices */
/* [0] - overrideMaterialNames (not an array of structs) */

void ClothingActorParam_0p13::freeParameterDefinitionTable(NxParameterized::Traits* traits)
{
	if (!traits)
	{
		return;
	}

	if (!mBuiltFlag) // Double-checked lock
	{
		return;
	}

	NxParameterized::MutexType::ScopedLock lock(mBuiltFlagMutex);

	if (!mBuiltFlag)
	{
		return;
	}

	for (physx::PxU32 i = 0; i < NumParamDefs; ++i)
	{
		ParamDefTable[i].~DefinitionImpl();
	}

	traits->free(ParamDefTable);

	mBuiltFlag = false;
}

#define PDEF_PTR(index) (&ParamDefTable[index])

void ClothingActorParam_0p13::buildTree(void)
{

	physx::PxU32 allocSize = sizeof(NxParameterized::DefinitionImpl) * NumParamDefs;
	ParamDefTable = (NxParameterized::DefinitionImpl*)(mParameterizedTraits->alloc(allocSize));
	memset(static_cast<void*>(ParamDefTable), 0, allocSize);

	for (physx::PxU32 i = 0; i < NumParamDefs; ++i)
	{
		NX_PARAM_PLACEMENT_NEW(ParamDefTable + i, NxParameterized::DefinitionImpl)(*mParameterizedTraits);
	}

	// Initialize DefinitionImpl node: nodeIndex=0, longName=""
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[0];
		ParamDef->init("", TYPE_STRUCT, "STRUCT", true);






	}

	// Initialize DefinitionImpl node: nodeIndex=1, longName="globalPose"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[1];
		ParamDef->init("globalPose", TYPE_MAT44, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("editorDisplay", "false", true);
		ParamDefTable[1].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#else

		static HintImpl HintTable[2];
		static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], };
		HintTable[0].init("editorDisplay", "false", true);
		HintTable[1].init("shortDescription", "The pose where the clothing asset will be put into the scene", true);
		ParamDefTable[1].setHints((const NxParameterized::Hint**)HintPtrTable, 2);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=2, longName="useHardwareCloth"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[2];
		ParamDef->init("useHardwareCloth", TYPE_BOOL, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "Turns on hardware acceleration for the cloth simulation", true);
		ParamDefTable[2].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=3, longName="flags"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[3];
		ParamDef->init("flags", TYPE_STRUCT, "ClothingActorFlags", true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "A selection of flags, can be updated at runtime.", true);
		ParamDefTable[3].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=4, longName="flags.ParallelCpuSkinning"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[4];
		ParamDef->init("ParallelCpuSkinning", TYPE_BOOL, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[2];
		static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], };
		HintTable[0].init("longDescription", "All graphical vertices without correspondence to physical vertices or\ntriangles are skinned normally. This flag specifies whether this happens\nduring Physics scene simulation, or after.\nNote: If this flag is set, an inconsistency can arise when calling\nNxClothingActor::updateRenderResource in between NxApexScene::simulate\nand NxApexScene::fetchResults. As a workaround, you should only call\nNxClothingActor::updateRenderResources _after_ NxApexScene::fetchResults\nhas terminated.\n", true);
		HintTable[1].init("shortDescription", "Determines whether or not to perform CPU skinning in parallel", true);
		ParamDefTable[4].setHints((const NxParameterized::Hint**)HintPtrTable, 2);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=5, longName="flags.RecomputeNormals"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[5];
		ParamDef->init("RecomputeNormals", TYPE_BOOL, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[2];
		static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], };
		HintTable[0].init("longDescription", "This usually leads to better looking results, but is more expensive to\ncompute. Default is off.\n", true);
		HintTable[1].init("shortDescription", "Fully recomputes the normals on the final mesh.", true);
		ParamDefTable[5].setHints((const NxParameterized::Hint**)HintPtrTable, 2);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=6, longName="flags.Visualize"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[6];
		ParamDef->init("Visualize", TYPE_BOOL, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "Determines whether or not to display debug visualization for this clothing actor", true);
		ParamDefTable[6].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=7, longName="flags.CorrectSimulationNormals"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[7];
		ParamDef->init("CorrectSimulationNormals", TYPE_BOOL, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[2];
		static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], };
		HintTable[0].init("longDescription", "The MaxDistance=0 vertices can have a perturbed simulation normal. This usually\nhappens only for meshes where the MaxDistance=0 vertices are somewhere in the\nmiddle separating a simulated and non-simulated region. The normal for those\nvertices will be computed only by the simulated triangles which can lead to\nwrong results.\nThis solution will use the normals from the original simulation mesh and skin\nthem with respect to the local pose.\n", true);
		HintTable[1].init("shortDescription", "", true);
		ParamDefTable[7].setHints((const NxParameterized::Hint**)HintPtrTable, 2);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=8, longName="fallbackSkinning"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[8];
		ParamDef->init("fallbackSkinning", TYPE_BOOL, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[2];
		static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], };
		HintTable[0].init("longDescription", "Performs the regular boneweighted skinning on the CPU before giving the\ndata out through the rendering API.\n", true);
		HintTable[1].init("shortDescription", "Performs skinning in software", true);
		ParamDefTable[8].setHints((const NxParameterized::Hint**)HintPtrTable, 2);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=9, longName="slowStart"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[9];
		ParamDef->init("slowStart", TYPE_BOOL, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[2];
		static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], };
		HintTable[0].init("longDescription", "The first time a NxClothingActor starts to be simulated is with full max\ndistance. This prevents starting with full max distance and instead blending\nin as it will do the second time.\n", true);
		HintTable[1].init("shortDescription", "Prevents from having full max distance right from the start", true);
		ParamDefTable[9].setHints((const NxParameterized::Hint**)HintPtrTable, 2);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=10, longName="useInternalBoneOrder"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[10];
		ParamDef->init("useInternalBoneOrder", TYPE_BOOL, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("editorDisplay", "false", true);
		ParamDefTable[10].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#else

		static HintImpl HintTable[3];
		static Hint* HintPtrTable[3] = { &HintTable[0], &HintTable[1], &HintTable[2], };
		HintTable[0].init("editorDisplay", "false", true);
		HintTable[1].init("longDescription", "If this is set to true the bone buffers in updateState and the actor\ndescriptor have to be given in the same order as the bones are stored\ninternally in the asset. This can be queried using\nNxClothingAsset::getNumUsedBones and NxClothingAsset::getBoneName or\nNxClothingAsset::getBoneMapping.\n\nIf this is set to false, the bone buffers can be provided in the order as\nthey are stored in the application. This is either the bone order at\nauthoring time, or NxClothingAsset::remapBoneIndex can be called for each\nbone to let APEX know about the current ordering in the game. Note that\nthis is only recommended if the application already uses physx::PxMat44\n(or something binary equivalent) and does not have to convert the matrices.\n", true);
		HintTable[2].init("shortDescription", "Expect internally ordered bone arrays in updateState call.", true);
		ParamDefTable[10].setHints((const NxParameterized::Hint**)HintPtrTable, 3);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=11, longName="updateStateWithGlobalMatrices"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[11];
		ParamDef->init("updateStateWithGlobalMatrices", TYPE_BOOL, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[2];
		static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], };
		HintTable[0].init("longDescription", "Depending on what matrices are present, the state can be updated using\nglobal world or object space bone matrices or composite matrices. The\ncomposite matrix can be generated by multiplying the world or object space\nmatrix by the inverse bone bine pose.\n\nNote: If there are problems which might be caused by bind poses being\ndifferent in the ClothingAsset and in the game's animation system, changing\nthis to true (and thus providing global pose matrices) might fix the problem.\n", true);
		HintTable[1].init("shortDescription", "Use world space matrices instead of composite (relative to bind pose) in NxClothingActor::updateState().", true);
		ParamDefTable[11].setHints((const NxParameterized::Hint**)HintPtrTable, 2);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=12, longName="uvChannelForTangentUpdate"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[12];
		ParamDef->init("uvChannelForTangentUpdate", TYPE_U32, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[2];
		static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], };
		HintTable[0].init("longDescription", "Tangent update is done based on one UV channel. This allows selection of what\nUV channel is being used.\n", true);
		HintTable[1].init("shortDescription", "This UV channel is used for updating tangent space", true);
		ParamDefTable[12].setHints((const NxParameterized::Hint**)HintPtrTable, 2);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=13, longName="maxDistanceBlendTime"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[13];
		ParamDef->init("maxDistanceBlendTime", TYPE_F32, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[2];
		static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], };
		HintTable[0].init("longDescription", "Note: This also influences how quickly different physical LoDs can be switched", true);
		HintTable[1].init("shortDescription", "Time in seconds how long it takes to go from zero maxDistance to full maxDistance", true);
		ParamDefTable[13].setHints((const NxParameterized::Hint**)HintPtrTable, 2);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=14, longName="clothingMaterialIndex"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[14];
		ParamDef->init("clothingMaterialIndex", TYPE_U32, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "Use this material from the assets material library", true);
		ParamDefTable[14].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=15, longName="lodWeights"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[15];
		ParamDef->init("lodWeights", TYPE_STRUCT, "LODWeights", true);






	}

	// Initialize DefinitionImpl node: nodeIndex=16, longName="lodWeights.maxDistance"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[16];
		ParamDef->init("maxDistance", TYPE_F32, NULL, true);






	}

	// Initialize DefinitionImpl node: nodeIndex=17, longName="lodWeights.distanceWeight"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[17];
		ParamDef->init("distanceWeight", TYPE_F32, NULL, true);






	}

	// Initialize DefinitionImpl node: nodeIndex=18, longName="lodWeights.bias"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[18];
		ParamDef->init("bias", TYPE_F32, NULL, true);






	}

	// Initialize DefinitionImpl node: nodeIndex=19, longName="lodWeights.benefitsBias"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[19];
		ParamDef->init("benefitsBias", TYPE_F32, NULL, true);






	}

	// Initialize DefinitionImpl node: nodeIndex=20, longName="windParams"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[20];
		ParamDef->init("windParams", TYPE_STRUCT, "WindParameters", true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "The per-actor wind parameters", true);
		ParamDefTable[20].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=21, longName="windParams.Velocity"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[21];
		ParamDef->init("Velocity", TYPE_VEC3, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "The target velocity each vertex tries to achieve.", true);
		ParamDefTable[21].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=22, longName="windParams.Adaption"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[22];
		ParamDef->init("Adaption", TYPE_F32, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[2];
		static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], };
		HintTable[0].init("longDescription", "This is roughly the inverse of the time in seconds it takes to adapt to the wind velocity.", true);
		HintTable[1].init("shortDescription", "The rate of adaption. The higher this value, the faster the cloth reaches the wind velocity. Set to 0 to turn off wind.", true);
		ParamDefTable[22].setHints((const NxParameterized::Hint**)HintPtrTable, 2);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=23, longName="maxDistanceScale"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[23];
		ParamDef->init("maxDistanceScale", TYPE_STRUCT, "MaxDistanceScale", true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "", true);
		ParamDefTable[23].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=24, longName="maxDistanceScale.Scale"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[24];
		ParamDef->init("Scale", TYPE_F32, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "", true);
		ParamDefTable[24].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=25, longName="maxDistanceScale.Multipliable"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[25];
		ParamDef->init("Multipliable", TYPE_BOOL, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "", true);
		ParamDefTable[25].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=26, longName="userData"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[26];
		ParamDef->init("userData", TYPE_U64, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("editorDisplay", "false", true);
		ParamDefTable[26].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#else

		static HintImpl HintTable[2];
		static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], };
		HintTable[0].init("editorDisplay", "false", true);
		HintTable[1].init("shortDescription", "Optional user data pointer associated with the clothing actor", true);
		ParamDefTable[26].setHints((const NxParameterized::Hint**)HintPtrTable, 2);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=27, longName="boneMatrices"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[27];
		ParamDef->init("boneMatrices", TYPE_ARRAY, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("editorDisplay", "false", true);
		ParamDefTable[27].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#else

		static HintImpl HintTable[3];
		static Hint* HintPtrTable[3] = { &HintTable[0], &HintTable[1], &HintTable[2], };
		HintTable[0].init("editorDisplay", "false", true);
		HintTable[1].init("longDescription", "These matrices are sometimes referred to as composite matrices. They are the\nmultiplication of the current world space bone pose with the inverse bind\npose in world space.\nNote: If \'updateStateWithGlobalMatrices\' is set to true, these must be\nglobal poses instead.\n", true);
		HintTable[2].init("shortDescription", "An Array of matrices with the full transform for each bone", true);
		ParamDefTable[27].setHints((const NxParameterized::Hint**)HintPtrTable, 3);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */




		ParamDef->setArraySize(-1);
	}

	// Initialize DefinitionImpl node: nodeIndex=28, longName="boneMatrices[]"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[28];
		ParamDef->init("boneMatrices", TYPE_MAT44, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("editorDisplay", "false", true);
		ParamDefTable[28].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#else

		static HintImpl HintTable[3];
		static Hint* HintPtrTable[3] = { &HintTable[0], &HintTable[1], &HintTable[2], };
		HintTable[0].init("editorDisplay", "false", true);
		HintTable[1].init("longDescription", "These matrices are sometimes referred to as composite matrices. They are the\nmultiplication of the current world space bone pose with the inverse bind\npose in world space.\nNote: If \'updateStateWithGlobalMatrices\' is set to true, these must be\nglobal poses instead.\n", true);
		HintTable[2].init("shortDescription", "An Array of matrices with the full transform for each bone", true);
		ParamDefTable[28].setHints((const NxParameterized::Hint**)HintPtrTable, 3);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=29, longName="clothDescTemplate"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[29];
		ParamDef->init("clothDescTemplate", TYPE_STRUCT, "ClothDescTemplate", true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "Contains the parameters the application can override on the NxClothDesc when created", true);
		ParamDefTable[29].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=30, longName="clothDescTemplate.collisionResponseCoefficient"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[30];
		ParamDef->init("collisionResponseCoefficient", TYPE_F32, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[2];
		static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], };
		HintTable[0].init("longDescription", "This is only needed if the twoway interaction flag is set in the clothing asset.", true);
		HintTable[1].init("shortDescription", "Defines a factor for the impulse transfer from cloth to colliding rigid bodies.", true);
		ParamDefTable[30].setHints((const NxParameterized::Hint**)HintPtrTable, 2);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=31, longName="clothDescTemplate.collisionGroup"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[31];
		ParamDef->init("collisionGroup", TYPE_U16, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "Sets which collision group this cloth is part of.", true);
		ParamDefTable[31].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=32, longName="clothDescTemplate.groupsMask"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[32];
		ParamDef->init("groupsMask", TYPE_STRUCT, "GroupsMask", true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "Sets the 128-bit mask used for collision filtering.", true);
		ParamDefTable[32].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=33, longName="clothDescTemplate.groupsMask.bits0"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[33];
		ParamDef->init("bits0", TYPE_U32, NULL, true);






	}

	// Initialize DefinitionImpl node: nodeIndex=34, longName="clothDescTemplate.groupsMask.bits1"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[34];
		ParamDef->init("bits1", TYPE_U32, NULL, true);






	}

	// Initialize DefinitionImpl node: nodeIndex=35, longName="clothDescTemplate.groupsMask.bits2"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[35];
		ParamDef->init("bits2", TYPE_U32, NULL, true);






	}

	// Initialize DefinitionImpl node: nodeIndex=36, longName="clothDescTemplate.groupsMask.bits3"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[36];
		ParamDef->init("bits3", TYPE_U32, NULL, true);






	}

	// Initialize DefinitionImpl node: nodeIndex=37, longName="clothDescTemplate.validBounds"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[37];
		ParamDef->init("validBounds", TYPE_BOUNDS3, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[2];
		static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], };
		HintTable[0].init("longDescription", "Only works if the flag NX_CLF_VALIDBOUNDS is set.", true);
		HintTable[1].init("shortDescription", "Defines the volume outside of which cloth particle are automatically removed from the simulation. ", true);
		ParamDefTable[37].setHints((const NxParameterized::Hint**)HintPtrTable, 2);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=38, longName="clothDescTemplate.compartment"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[38];
		ParamDef->init("compartment", TYPE_U64, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("editorDisplay", "false", true);
		ParamDefTable[38].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#else

		static HintImpl HintTable[3];
		static Hint* HintPtrTable[3] = { &HintTable[0], &HintTable[1], &HintTable[2], };
		HintTable[0].init("editorDisplay", "false", true);
		HintTable[1].init("longDescription", "Must be either a pointer to an NxCompartment of type NX_SCT_CLOTH or\nNX_SCT_SOFTBODY, or NULL. A NULL compartment means creating NX_CLF_HARDWARE\ncloth in the first available cloth compartment (a default cloth compartment\nis created if none exists). Software cloth with a NULL compartment is\ncreated in the scene proper.\n", true);
		HintTable[2].init("shortDescription", "The compartment to place the cloth in.", true);
		ParamDefTable[38].setHints((const NxParameterized::Hint**)HintPtrTable, 3);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=39, longName="clothDescTemplate.userData"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[39];
		ParamDef->init("userData", TYPE_U64, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("editorDisplay", "false", true);
		ParamDefTable[39].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#else

		static HintImpl HintTable[2];
		static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], };
		HintTable[0].init("editorDisplay", "false", true);
		HintTable[1].init("shortDescription", "Optional user data pointer.", true);
		ParamDefTable[39].setHints((const NxParameterized::Hint**)HintPtrTable, 2);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=40, longName="shapeDescTemplate"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[40];
		ParamDef->init("shapeDescTemplate", TYPE_STRUCT, "ShapeDescTemplate", true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "Contains the parameters the application can override on any actor shapes created", true);
		ParamDefTable[40].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=41, longName="shapeDescTemplate.flags"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[41];
		ParamDef->init("flags", TYPE_STRUCT, "ShapeDescFlags", true);






	}

	// Initialize DefinitionImpl node: nodeIndex=42, longName="shapeDescTemplate.flags.NX_SF_VISUALIZATION"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[42];
		ParamDef->init("NX_SF_VISUALIZATION", TYPE_BOOL, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "Enable debug renderer for this shape", true);
		ParamDefTable[42].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=43, longName="shapeDescTemplate.flags.NX_SF_DISABLE_COLLISION"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[43];
		ParamDef->init("NX_SF_DISABLE_COLLISION", TYPE_BOOL, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "Disable collision detection for this shape (counterpart of NX_AF_DISABLE_COLLISION)", true);
		ParamDefTable[43].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=44, longName="shapeDescTemplate.flags.NX_SF_DISABLE_RAYCASTING"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[44];
		ParamDef->init("NX_SF_DISABLE_RAYCASTING", TYPE_BOOL, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "Disable raycasting for this shape", true);
		ParamDefTable[44].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=45, longName="shapeDescTemplate.flags.NX_SF_DYNAMIC_DYNAMIC_CCD"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[45];
		ParamDef->init("NX_SF_DYNAMIC_DYNAMIC_CCD", TYPE_BOOL, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "Enable dynamic-dynamic CCD for this shape. Used only when CCD is globally enabled and shape have a CCD skeleton.", true);
		ParamDefTable[45].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=46, longName="shapeDescTemplate.flags.NX_SF_DISABLE_SCENE_QUERIES"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[46];
		ParamDef->init("NX_SF_DISABLE_SCENE_QUERIES", TYPE_BOOL, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[2];
		static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], };
		HintTable[0].init("longDescription", "Setting this to true will make the non-compartment CPU cloth not work.", true);
		HintTable[1].init("shortDescription", "Disable participation in ray casts, overlap tests and sweeps.", true);
		ParamDefTable[46].setHints((const NxParameterized::Hint**)HintPtrTable, 2);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=47, longName="shapeDescTemplate.collisionGroup"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[47];
		ParamDef->init("collisionGroup", TYPE_U16, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[2];
		static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], };
		HintTable[0].init("longDescription", "Default group is 0. Maximum possible group is 31. Collision groups are sets\nof shapes which may or may not be set to collision detect with each other;\nthis can be set using NxScene::setGroupCollisionFlag()\nSleeping: Does NOT wake the associated actor up automatically.\n", true);
		HintTable[1].init("shortDescription", "Sets which collision group this shape is part of.", true);
		ParamDefTable[47].setHints((const NxParameterized::Hint**)HintPtrTable, 2);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=48, longName="shapeDescTemplate.groupsMask"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[48];
		ParamDef->init("groupsMask", TYPE_STRUCT, "GroupsMask", true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "Sets the 128-bit mask used for collision filtering.", true);
		ParamDefTable[48].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=49, longName="shapeDescTemplate.groupsMask.bits0"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[49];
		ParamDef->init("bits0", TYPE_U32, NULL, true);






	}

	// Initialize DefinitionImpl node: nodeIndex=50, longName="shapeDescTemplate.groupsMask.bits1"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[50];
		ParamDef->init("bits1", TYPE_U32, NULL, true);






	}

	// Initialize DefinitionImpl node: nodeIndex=51, longName="shapeDescTemplate.groupsMask.bits2"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[51];
		ParamDef->init("bits2", TYPE_U32, NULL, true);






	}

	// Initialize DefinitionImpl node: nodeIndex=52, longName="shapeDescTemplate.groupsMask.bits3"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[52];
		ParamDef->init("bits3", TYPE_U32, NULL, true);






	}

	// Initialize DefinitionImpl node: nodeIndex=53, longName="shapeDescTemplate.materialIndex"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[53];
		ParamDef->init("materialIndex", TYPE_U16, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "The material index of the shape.", true);
		ParamDefTable[53].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=54, longName="shapeDescTemplate.userData"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[54];
		ParamDef->init("userData", TYPE_U64, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("editorDisplay", "false", true);
		ParamDefTable[54].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#else

		static HintImpl HintTable[2];
		static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], };
		HintTable[0].init("editorDisplay", "false", true);
		HintTable[1].init("shortDescription", "Optional user data pointer", true);
		ParamDefTable[54].setHints((const NxParameterized::Hint**)HintPtrTable, 2);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=55, longName="shapeDescTemplate.name"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[55];
		ParamDef->init("name", TYPE_U64, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("editorDisplay", "false", true);
		ParamDefTable[55].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#else

		static HintImpl HintTable[2];
		static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], };
		HintTable[0].init("editorDisplay", "false", true);
		HintTable[1].init("shortDescription", "Name of the shapes; must be set by the application and must be a persistent pointer.", true);
		ParamDefTable[55].setHints((const NxParameterized::Hint**)HintPtrTable, 2);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=56, longName="actorDescTemplate"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[56];
		ParamDef->init("actorDescTemplate", TYPE_STRUCT, "ActorDescTemplate", true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "Contains the parameters the application can override on any actors created", true);
		ParamDefTable[56].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=57, longName="actorDescTemplate.userData"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[57];
		ParamDef->init("userData", TYPE_U64, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("editorDisplay", "false", true);
		ParamDefTable[57].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#else

		static HintImpl HintTable[2];
		static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], };
		HintTable[0].init("editorDisplay", "false", true);
		HintTable[1].init("shortDescription", "Optional user data pointer", true);
		ParamDefTable[57].setHints((const NxParameterized::Hint**)HintPtrTable, 2);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=58, longName="actorDescTemplate.name"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[58];
		ParamDef->init("name", TYPE_U64, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("editorDisplay", "false", true);
		ParamDefTable[58].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#else

		static HintImpl HintTable[2];
		static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], };
		HintTable[0].init("editorDisplay", "false", true);
		HintTable[1].init("shortDescription", "Optional name string for the shape; must be set by the application and must be a persistent pointer.", true);
		ParamDefTable[58].setHints((const NxParameterized::Hint**)HintPtrTable, 2);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=59, longName="actorScale"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[59];
		ParamDef->init("actorScale", TYPE_F32, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "Scale the actor differently than the asset.", true);
		ParamDefTable[59].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=60, longName="runtimeCooked"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[60];
		ParamDef->init("runtimeCooked", TYPE_REF, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("INCLUDED", physx::PxU64(1), true);
		ParamDefTable[60].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#else

		static HintImpl HintTable[2];
		static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], };
		HintTable[0].init("INCLUDED", physx::PxU64(1), true);
		HintTable[1].init("shortDescription", "Data cooked at runtime", true);
		ParamDefTable[60].setHints((const NxParameterized::Hint**)HintPtrTable, 2);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */


		static const char* const RefVariantVals[] = { "ClothingCookedParam" };
		ParamDefTable[60].setRefVariantVals((const char**)RefVariantVals, 1);



	}

	// Initialize DefinitionImpl node: nodeIndex=61, longName="morphDisplacements"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[61];
		ParamDef->init("morphDisplacements", TYPE_ARRAY, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "Displacements according to the current morph target.", true);
		ParamDefTable[61].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */




		ParamDef->setArraySize(-1);
	}

	// Initialize DefinitionImpl node: nodeIndex=62, longName="morphDisplacements[]"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[62];
		ParamDef->init("morphDisplacements", TYPE_VEC3, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "Displacements according to the current morph target.", true);
		ParamDefTable[62].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=63, longName="morphPhysicalMeshNewPositions"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[63];
		ParamDef->init("morphPhysicalMeshNewPositions", TYPE_ARRAY, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "New positions for the physical meshes and convex collision volumes.", true);
		ParamDefTable[63].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */




		ParamDef->setArraySize(-1);
	}

	// Initialize DefinitionImpl node: nodeIndex=64, longName="morphPhysicalMeshNewPositions[]"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[64];
		ParamDef->init("morphPhysicalMeshNewPositions", TYPE_VEC3, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "New positions for the physical meshes and convex collision volumes.", true);
		ParamDefTable[64].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=65, longName="morphGraphicalMeshNewPositions"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[65];
		ParamDef->init("morphGraphicalMeshNewPositions", TYPE_ARRAY, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "New positions of all submeshes of all graphical meshes.", true);
		ParamDefTable[65].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */




		ParamDef->setArraySize(-1);
	}

	// Initialize DefinitionImpl node: nodeIndex=66, longName="morphGraphicalMeshNewPositions[]"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[66];
		ParamDef->init("morphGraphicalMeshNewPositions", TYPE_VEC3, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "New positions of all submeshes of all graphical meshes.", true);
		ParamDefTable[66].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=67, longName="allowAdaptiveTargetFrequency"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[67];
		ParamDef->init("allowAdaptiveTargetFrequency", TYPE_BOOL, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "Slightly modifies gravity to avoid high frequency jittering due to variable time steps.", true);
		ParamDefTable[67].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=68, longName="useVelocityClamping"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[68];
		ParamDef->init("useVelocityClamping", TYPE_BOOL, NULL, true);






	}

	// Initialize DefinitionImpl node: nodeIndex=69, longName="vertexVelocityClamp"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[69];
		ParamDef->init("vertexVelocityClamp", TYPE_BOUNDS3, NULL, true);






	}

	// Initialize DefinitionImpl node: nodeIndex=70, longName="pressure"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[70];
		ParamDef->init("pressure", TYPE_F32, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "Set pressure of cloth, only works on closed meshes.", true);
		ParamDefTable[70].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=71, longName="multiplyGlobalPoseIntoBones"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[71];
		ParamDef->init("multiplyGlobalPoseIntoBones", TYPE_BOOL, NULL, true);






	}

	// Initialize DefinitionImpl node: nodeIndex=72, longName="overrideMaterialNames"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[72];
		ParamDef->init("overrideMaterialNames", TYPE_ARRAY, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "Replacement material names for the ones provided by the render mesh asset inside the clothing asset.", true);
		ParamDefTable[72].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */




		ParamDef->setArraySize(-1);
		static const physx::PxU8 dynHandleIndices[1] = { 0, };
		ParamDef->setDynamicHandleIndicesMap(dynHandleIndices, 1);

	}

	// Initialize DefinitionImpl node: nodeIndex=73, longName="overrideMaterialNames[]"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[73];
		ParamDef->init("overrideMaterialNames", TYPE_STRING, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "Replacement material names for the ones provided by the render mesh asset inside the clothing asset.", true);
		ParamDefTable[73].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=74, longName="simulationBackend"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[74];
		ParamDef->init("simulationBackend", TYPE_ENUM, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "Select which backend should be used. 'ForceNative' will only work when running with the 2.8.x PhysX SDK", true);
		ParamDefTable[74].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */

		static const char* const EnumVals[] = { "Default", "ForceNative", "ForceEmbedded" };
		ParamDefTable[74].setEnumVals((const char**)EnumVals, 3);




	}

	// Initialize DefinitionImpl node: nodeIndex=75, longName="useStiffSolver"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[75];
		ParamDef->init("useStiffSolver", TYPE_BOOL, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "Disables stiff (semi-implicit) solver for vertical fibers.", true);
		ParamDefTable[75].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=76, longName="freezeByLOD"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[76];
		ParamDef->init("freezeByLOD", TYPE_BOOL, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[1];
		static Hint* HintPtrTable[1] = { &HintTable[0], };
		HintTable[0].init("shortDescription", "Cloth state frozen when LoD turns off simulation of the actor, instead of returning to the animated state.", true);
		ParamDefTable[76].setHints((const NxParameterized::Hint**)HintPtrTable, 1);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// Initialize DefinitionImpl node: nodeIndex=77, longName="localSpaceSim"
	{
		NxParameterized::DefinitionImpl* ParamDef = &ParamDefTable[77];
		ParamDef->init("localSpaceSim", TYPE_BOOL, NULL, true);

#ifdef NX_PARAMETERIZED_HIDE_DESCRIPTIONS

#else

		static HintImpl HintTable[2];
		static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], };
		HintTable[0].init("longDescription", "If this flag is enabled the simulation is done at origin, however the cloth is rendered at its global position.\nThe simulation of the actor is transformed such that the root bone ends up at origin. The scale of the actor is maintained during the simulation.\nIf a 3.x physX simulation backend is used, it is possible to add the inertia effects to the simulation, through\nthe inertiaScale parameter of the clothing material. So with an inertiaScale of 1.0 there should be no visible\ndifference between local space and global space simulation.\nKnown issues:\n- Currently there's simulation issues when this feature is used in 3.x (DE4076)\n- PhysX 2.8.4 does not support inertiaScale (it corresponds to inertiaScale=0.0f). So if localSpaceSim is enabled there's no inertia effect when the global pose of the clothing actor changes.\n- With 2.8.4 this only works for clothing on 1 character, without world collision. This is because collision volumes would interfere with the cloth that is simulated at origin.\nThis is not a problem in 3.x because there collision only happens with the collision volumes specifically defined for the clothing actor.\n", true);
		HintTable[1].init("shortDescription", "Do simulation in local space.", true);
		ParamDefTable[77].setHints((const NxParameterized::Hint**)HintPtrTable, 2);

#endif /* NX_PARAMETERIZED_HIDE_DESCRIPTIONS */





	}

	// SetChildren for: nodeIndex=0, longName=""
	{
		static Definition* Children[33];
		Children[0] = PDEF_PTR(1);
		Children[1] = PDEF_PTR(2);
		Children[2] = PDEF_PTR(3);
		Children[3] = PDEF_PTR(8);
		Children[4] = PDEF_PTR(9);
		Children[5] = PDEF_PTR(10);
		Children[6] = PDEF_PTR(11);
		Children[7] = PDEF_PTR(12);
		Children[8] = PDEF_PTR(13);
		Children[9] = PDEF_PTR(14);
		Children[10] = PDEF_PTR(15);
		Children[11] = PDEF_PTR(20);
		Children[12] = PDEF_PTR(23);
		Children[13] = PDEF_PTR(26);
		Children[14] = PDEF_PTR(27);
		Children[15] = PDEF_PTR(29);
		Children[16] = PDEF_PTR(40);
		Children[17] = PDEF_PTR(56);
		Children[18] = PDEF_PTR(59);
		Children[19] = PDEF_PTR(60);
		Children[20] = PDEF_PTR(61);
		Children[21] = PDEF_PTR(63);
		Children[22] = PDEF_PTR(65);
		Children[23] = PDEF_PTR(67);
		Children[24] = PDEF_PTR(68);
		Children[25] = PDEF_PTR(69);
		Children[26] = PDEF_PTR(70);
		Children[27] = PDEF_PTR(71);
		Children[28] = PDEF_PTR(72);
		Children[29] = PDEF_PTR(74);
		Children[30] = PDEF_PTR(75);
		Children[31] = PDEF_PTR(76);
		Children[32] = PDEF_PTR(77);

		ParamDefTable[0].setChildren(Children, 33);
	}

	// SetChildren for: nodeIndex=3, longName="flags"
	{
		static Definition* Children[4];
		Children[0] = PDEF_PTR(4);
		Children[1] = PDEF_PTR(5);
		Children[2] = PDEF_PTR(6);
		Children[3] = PDEF_PTR(7);

		ParamDefTable[3].setChildren(Children, 4);
	}

	// SetChildren for: nodeIndex=15, longName="lodWeights"
	{
		static Definition* Children[4];
		Children[0] = PDEF_PTR(16);
		Children[1] = PDEF_PTR(17);
		Children[2] = PDEF_PTR(18);
		Children[3] = PDEF_PTR(19);

		ParamDefTable[15].setChildren(Children, 4);
	}

	// SetChildren for: nodeIndex=20, longName="windParams"
	{
		static Definition* Children[2];
		Children[0] = PDEF_PTR(21);
		Children[1] = PDEF_PTR(22);

		ParamDefTable[20].setChildren(Children, 2);
	}

	// SetChildren for: nodeIndex=23, longName="maxDistanceScale"
	{
		static Definition* Children[2];
		Children[0] = PDEF_PTR(24);
		Children[1] = PDEF_PTR(25);

		ParamDefTable[23].setChildren(Children, 2);
	}

	// SetChildren for: nodeIndex=27, longName="boneMatrices"
	{
		static Definition* Children[1];
		Children[0] = PDEF_PTR(28);

		ParamDefTable[27].setChildren(Children, 1);
	}

	// SetChildren for: nodeIndex=29, longName="clothDescTemplate"
	{
		static Definition* Children[6];
		Children[0] = PDEF_PTR(30);
		Children[1] = PDEF_PTR(31);
		Children[2] = PDEF_PTR(32);
		Children[3] = PDEF_PTR(37);
		Children[4] = PDEF_PTR(38);
		Children[5] = PDEF_PTR(39);

		ParamDefTable[29].setChildren(Children, 6);
	}

	// SetChildren for: nodeIndex=32, longName="clothDescTemplate.groupsMask"
	{
		static Definition* Children[4];
		Children[0] = PDEF_PTR(33);
		Children[1] = PDEF_PTR(34);
		Children[2] = PDEF_PTR(35);
		Children[3] = PDEF_PTR(36);

		ParamDefTable[32].setChildren(Children, 4);
	}

	// SetChildren for: nodeIndex=40, longName="shapeDescTemplate"
	{
		static Definition* Children[6];
		Children[0] = PDEF_PTR(41);
		Children[1] = PDEF_PTR(47);
		Children[2] = PDEF_PTR(48);
		Children[3] = PDEF_PTR(53);
		Children[4] = PDEF_PTR(54);
		Children[5] = PDEF_PTR(55);

		ParamDefTable[40].setChildren(Children, 6);
	}

	// SetChildren for: nodeIndex=41, longName="shapeDescTemplate.flags"
	{
		static Definition* Children[5];
		Children[0] = PDEF_PTR(42);
		Children[1] = PDEF_PTR(43);
		Children[2] = PDEF_PTR(44);
		Children[3] = PDEF_PTR(45);
		Children[4] = PDEF_PTR(46);

		ParamDefTable[41].setChildren(Children, 5);
	}

	// SetChildren for: nodeIndex=48, longName="shapeDescTemplate.groupsMask"
	{
		static Definition* Children[4];
		Children[0] = PDEF_PTR(49);
		Children[1] = PDEF_PTR(50);
		Children[2] = PDEF_PTR(51);
		Children[3] = PDEF_PTR(52);

		ParamDefTable[48].setChildren(Children, 4);
	}

	// SetChildren for: nodeIndex=56, longName="actorDescTemplate"
	{
		static Definition* Children[2];
		Children[0] = PDEF_PTR(57);
		Children[1] = PDEF_PTR(58);

		ParamDefTable[56].setChildren(Children, 2);
	}

	// SetChildren for: nodeIndex=61, longName="morphDisplacements"
	{
		static Definition* Children[1];
		Children[0] = PDEF_PTR(62);

		ParamDefTable[61].setChildren(Children, 1);
	}

	// SetChildren for: nodeIndex=63, longName="morphPhysicalMeshNewPositions"
	{
		static Definition* Children[1];
		Children[0] = PDEF_PTR(64);

		ParamDefTable[63].setChildren(Children, 1);
	}

	// SetChildren for: nodeIndex=65, longName="morphGraphicalMeshNewPositions"
	{
		static Definition* Children[1];
		Children[0] = PDEF_PTR(66);

		ParamDefTable[65].setChildren(Children, 1);
	}

	// SetChildren for: nodeIndex=72, longName="overrideMaterialNames"
	{
		static Definition* Children[1];
		Children[0] = PDEF_PTR(73);

		ParamDefTable[72].setChildren(Children, 1);
	}

	mBuiltFlag = true;

}
void ClothingActorParam_0p13::initStrings(void)
{
}

void ClothingActorParam_0p13::initDynamicArrays(void)
{
	boneMatrices.buf = NULL;
	boneMatrices.isAllocated = true;
	boneMatrices.elementSize = sizeof(physx::PxMat44);
	boneMatrices.arraySizes[0] = 0;
	morphDisplacements.buf = NULL;
	morphDisplacements.isAllocated = true;
	morphDisplacements.elementSize = sizeof(physx::PxVec3);
	morphDisplacements.arraySizes[0] = 0;
	morphPhysicalMeshNewPositions.buf = NULL;
	morphPhysicalMeshNewPositions.isAllocated = true;
	morphPhysicalMeshNewPositions.elementSize = sizeof(physx::PxVec3);
	morphPhysicalMeshNewPositions.arraySizes[0] = 0;
	morphGraphicalMeshNewPositions.buf = NULL;
	morphGraphicalMeshNewPositions.isAllocated = true;
	morphGraphicalMeshNewPositions.elementSize = sizeof(physx::PxVec3);
	morphGraphicalMeshNewPositions.arraySizes[0] = 0;
	overrideMaterialNames.buf = NULL;
	overrideMaterialNames.isAllocated = true;
	overrideMaterialNames.elementSize = sizeof(NxParameterized::DummyStringStruct);
	overrideMaterialNames.arraySizes[0] = 0;
}

void ClothingActorParam_0p13::initDefaults(void)
{

	freeStrings();
	freeReferences();
	freeDynamicArrays();
	globalPose = physx::PxMat44(physx::PxVec4(1.0f));
	useHardwareCloth = bool(true);
	flags.ParallelCpuSkinning = bool(true);
	flags.RecomputeNormals = bool(false);
	flags.Visualize = bool(true);
	flags.CorrectSimulationNormals = bool(true);
	fallbackSkinning = bool(false);
	slowStart = bool(true);
	useInternalBoneOrder = bool(false);
	updateStateWithGlobalMatrices = bool(false);
	uvChannelForTangentUpdate = physx::PxU32(0);
	maxDistanceBlendTime = physx::PxF32(1.0);
	clothingMaterialIndex = physx::PxU32(0);
	lodWeights.maxDistance = physx::PxF32(2000);
	lodWeights.distanceWeight = physx::PxF32(1);
	lodWeights.bias = physx::PxF32(0);
	lodWeights.benefitsBias = physx::PxF32(0);
	windParams.Velocity = physx::PxVec3(0.0f);
	windParams.Adaption = physx::PxF32(0.0f);
	maxDistanceScale.Scale = physx::PxF32(1.0f);
	maxDistanceScale.Multipliable = bool(false);
	userData = physx::PxU64(0);
	clothDescTemplate.collisionResponseCoefficient = physx::PxF32(0.2);
	clothDescTemplate.collisionGroup = physx::PxU16(0);
	clothDescTemplate.groupsMask.bits0 = physx::PxU32(0);
	clothDescTemplate.groupsMask.bits1 = physx::PxU32(0);
	clothDescTemplate.groupsMask.bits2 = physx::PxU32(0);
	clothDescTemplate.groupsMask.bits3 = physx::PxU32(0);
	clothDescTemplate.validBounds = physx::PxBounds3(physx::PxVec3(PX_MAX_F32), physx::PxVec3(-PX_MAX_F32));
	clothDescTemplate.compartment = physx::PxU64(0);
	shapeDescTemplate.flags.NX_SF_VISUALIZATION = bool(true);
	shapeDescTemplate.flags.NX_SF_DISABLE_COLLISION = bool(false);
	shapeDescTemplate.flags.NX_SF_DISABLE_RAYCASTING = bool(true);
	shapeDescTemplate.flags.NX_SF_DYNAMIC_DYNAMIC_CCD = bool(false);
	shapeDescTemplate.flags.NX_SF_DISABLE_SCENE_QUERIES = bool(false);
	shapeDescTemplate.collisionGroup = physx::PxU16(0);
	shapeDescTemplate.groupsMask.bits0 = physx::PxU32(0);
	shapeDescTemplate.groupsMask.bits1 = physx::PxU32(0);
	shapeDescTemplate.groupsMask.bits2 = physx::PxU32(0);
	shapeDescTemplate.groupsMask.bits3 = physx::PxU32(0);
	shapeDescTemplate.materialIndex = physx::PxU16(0);
	shapeDescTemplate.userData = physx::PxU64(0);
	shapeDescTemplate.name = physx::PxU64(0);
	actorDescTemplate.userData = physx::PxU64(0);
	actorDescTemplate.name = physx::PxU64(0);
	actorScale = physx::PxF32(1.0);
	allowAdaptiveTargetFrequency = bool(true);
	useVelocityClamping = bool(false);
	vertexVelocityClamp = physx::PxBounds3(physx::PxVec3(-PX_MAX_F32), physx::PxVec3(PX_MAX_F32));
	pressure = physx::PxF32(-1.0);
	multiplyGlobalPoseIntoBones = bool(true);
	simulationBackend = (const char*)"Default";
	useStiffSolver = bool(false);
	freezeByLOD = bool(false);
	localSpaceSim = bool(false);

	initDynamicArrays();
	initStrings();
	initReferences();
}

void ClothingActorParam_0p13::initReferences(void)
{
	runtimeCooked = NULL;

}

void ClothingActorParam_0p13::freeDynamicArrays(void)
{
	if (boneMatrices.isAllocated && boneMatrices.buf)
	{
		mParameterizedTraits->free(boneMatrices.buf);
	}
	if (morphDisplacements.isAllocated && morphDisplacements.buf)
	{
		mParameterizedTraits->free(morphDisplacements.buf);
	}
	if (morphPhysicalMeshNewPositions.isAllocated && morphPhysicalMeshNewPositions.buf)
	{
		mParameterizedTraits->free(morphPhysicalMeshNewPositions.buf);
	}
	if (morphGraphicalMeshNewPositions.isAllocated && morphGraphicalMeshNewPositions.buf)
	{
		mParameterizedTraits->free(morphGraphicalMeshNewPositions.buf);
	}
	if (overrideMaterialNames.isAllocated && overrideMaterialNames.buf)
	{
		mParameterizedTraits->free(overrideMaterialNames.buf);
	}
}

void ClothingActorParam_0p13::freeStrings(void)
{

	for (int i = 0; i < overrideMaterialNames.arraySizes[0]; ++i)
	{
		if (overrideMaterialNames.buf[i].isAllocated && overrideMaterialNames.buf[i].buf)
		{
			mParameterizedTraits->strfree((char*)overrideMaterialNames.buf[i].buf);
		}
	}
}

void ClothingActorParam_0p13::freeReferences(void)
{
	if (runtimeCooked)
	{
		runtimeCooked->destroy();
	}

}

} // namespace apex
} // namespace physx
