Skip to content

File SkeletonSetupManager.hpp

File List > api > cppSDK > SDKBase > SkeletonSetupManager.hpp

Go to the documentation of this file

#ifndef __SKELETONSETUPMANAGER_SDK_HPP__
#define __SKELETONSETUPMANAGER_SDK_HPP__

struct Vertex;
struct Triangle;

struct SkeletonSetupInfo;
struct NodeSetup;
struct ChainSetup;

struct SkeletonSetupArraySizes;
struct MeshSetupInfo;
struct ColliderSetup;

namespace ManusSDK
{
    class SkeletonSetup;
    class SkeletonSetupManager
    {
    public:
        ~SkeletonSetupManager();


        // Skeletons
        SDKReturnCode CreateSkeletonSetup(const SkeletonSetupInfo& p_Skeleton, uint32_t& p_SkeletonSetupIndex);
        SDKReturnCode AddNodeToSkeletonSetup(uint32_t p_SkeletonSetupIndex, const NodeSetup& p_Node);
        SDKReturnCode OverwriteSkeletonSetup(uint32_t p_SkeletonSetupIndex, const SkeletonSetupInfo& p_Skeleton);
        SDKReturnCode OverwriteChainToSkeletonSetup(uint32_t p_SkeletonSetupIndex, const ChainSetup& p_Chain);
        SDKReturnCode OverwriteNodeToSkeletonSetup(uint32_t p_SkeletonSetupIndex, const NodeSetup& p_Node);
        SDKReturnCode AddChainToSkeletonSetup(uint32_t p_SkeletonSetupIndex, const ChainSetup& p_Chain);


        SDKReturnCode AddColliderToSkeletonSetup(uint32_t p_SkeletonSetupIndex, const ColliderSetup& p_Collider);
        SDKReturnCode AddMeshSetupToSkeletonSetup(uint32_t p_SkeletonSetupIndex, uint32_t p_NodeId, uint32_t& p_MeshSetupIndex);
        SDKReturnCode AddVertexToMeshSetup(uint32_t p_SkeletonSetupIndex, uint32_t p_MeshSetupIndex, const Vertex& p_Vertex);
        SDKReturnCode AddTriangleToMeshSetup(uint32_t p_SkeletonSetupIndex, uint32_t p_MeshSetupIndex, const Triangle& p_Triangle);
        SDKReturnCode GetMeshSetupInfo(uint32_t p_SkeletonSetupIndex, uint32_t p_MeshSetupIndex, MeshSetupInfo& p_MeshSetupInfo);
        SDKReturnCode GetVertexData(uint32_t p_SkeletonSetupIndex, uint32_t p_MeshSetupIndex, uint32_t p_VertexIndex, Vertex& p_Vertex);
        SDKReturnCode GetTriangleData(uint32_t p_SkeletonSetupIndex, uint32_t p_MeshSetupIndex, uint32_t p_TriangleIndex, Triangle& p_Triangle);

        SkeletonSetup* GetSkeletonSetup(uint32_t p_SkeletonSetupIndex);
        void ClearSkeletonSetup(uint32_t p_SkeletonSetupIndex);
        void InsertSkeletonSetup(uint32_t p_SkeletonSetupIndex, SkeletonSetup* p_LocalSkl);

        void ClearAllTemporarySkeletonsFromBuffer();

        SDKReturnCode GetSkeletonSetupInfo(uint32_t p_SkeletonSetupIndex, SkeletonSetupInfo* p_SDK);
        SDKReturnCode GetSkeletonSetupArraySizes(uint32_t p_SkeletonSetupIndex, SkeletonSetupArraySizes& p_SkeletonInfo);
        SDKReturnCode GetSkeletonChains(uint32_t p_SkeletonSetupIndex, ChainSetup* p_SDK);
        SDKReturnCode GetSkeletonChains(uint32_t p_SkeletonSetupIndex, ChainSetup* p_ChainSetupArray, uint32_t p_ArraySize);
        SDKReturnCode GetSkeletonNodes(uint32_t p_SkeletonSetupIndex, NodeSetup* p_SDK);
        SDKReturnCode GetSkeletonNodes(uint32_t p_SkeletonSetupIndex, NodeSetup* p_NodeSetupArray, uint32_t p_ArraySize);
        SDKReturnCode GetSkeletonColliders(uint32_t p_SkeletonSetupIndex, ColliderSetup* p_SDK);

        std::mutex& GetSkeletonSetupMutex();
        size_t GetSkeletonSetupBufferSize();

    protected:


        // Skeleton chains.
        std::mutex m_SkeletonSetupMutex;

        void IfEmptyClearSkeletonSetupBuffer();
        std::vector<SkeletonSetup*> m_SkeletonSetupBuffer;

        std::atomic<bool> m_IsRunning = false;

    };
}
#endif