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

#pragma once

#include "glmCoreAPI.h"
#include "glmRTTI.h"
#include "glmGolaemCharacterInterface.h"

namespace glm
{
    struct AssetManagerV3;
    struct GenericSpecificConverterMappingV5;
    class CharacterUserDataV0;

    struct GolaemCharacterV0;
    struct GolaemCharacterV1;
    struct GolaemCharacterV2;
    struct GolaemCharacterV3;

    struct GLM_CORE_API GolaemCharacterV4 : public GolaemCharacterInterface
    {
        GLM_VIRTUAL_RTTI("ae8b6c59-cf19-4208-921a-a6faa3e5a7ca", glm::GolaemCharacterV4, addAttributes);

    public:
        GLM_CLASS_STAT_ID( glm::MemoryStatIds::Simulation)

        AssetManagerV3* _assetManager;

        GenericSpecificConverterMappingV5* _converterMapping; // animation data
        CharacterUserDataV0* _characterUserData;              // additional user data

        GolaemCharacterV4();
        ~GolaemCharacterV4();

        /**
		* \brief V0 backwards compatibility
		*/
        void createFromV0(GolaemCharacterV0& characterV0);

        /**
		* \brief V1 backwards compatibility
		*/
        void createFromV1(GolaemCharacterV1& characterV1);

        /**
		* \brief V2 backwards compatibility
		*/
        void createFromV2(GolaemCharacterV2& characterV2);

        /**
		* \brief V3 backwards compatibility
		* \note Addition of Shader Groups
		*/
        void createFromV3(GolaemCharacterV3& characterV3);

    private:
        GLM_DISALLOW_COPY_AND_ASSIGN(GolaemCharacterV4);
        static void addAttributes();
    };
} // namespace glm
