/***************************************************************************
*                                                                          *
*  Copyright (C) Golaem S.A.  All Rights Reserved.                         *
*                                                                          *
***************************************************************************/

#pragma once

#include "glmSDKAPI.h"
#include "glmMotionDefinitions.h"
#include <glmRTTI.h>

namespace glm
{
	struct GenericSkeletonV3;

	struct GLM_SDK_API GenericPostureV4
	{
		GLM_RTTI("e29b0376-3a28-42b7-8a76-d7a963209346", glm::GenericPostureV4, addAttributes);
	public:

		GLM_CLASS_STAT_ID( glm::MemoryStatIds::Simulation)

		GenericPostureV4();
		~GenericPostureV4();

		void finish() ;

	private:
		/**
		* \brief register the inspectable attributes to the class RTTI
		*/
		static void addAttributes() ;

	public:
		//************************************************************
		//! @name Data
		//************************************************************
		//@{
		const GenericSkeletonV3* _genericSkeleton;

		Vector3		_pelvisNormalizedPosition;
		Vector3		_pelvisWorldPosition;
		Quaternion	_pelvisOrientation;
		Vector3		_movingDirection;

		glm::Array<Quaternion>	_restRelativeOriArray;
		glm::PODArray<Angle>	_ikNormalOffsetArray;
		glm::PODArray<float>	_lengthRatioArray;
		glm::Array<Quaternion>	_restRelativeEOBOriArray;
		glm::PODArray<float>		_squashStretchRatioArray;
		glm::PODArray<float>		_squashStretchEOBRatioArray;
		int			_skeletonBonesSize;

		glm::PODArray<float>		_blendShapes;
		float		_skeletonScale;
		//@}
	};
}
