//
// Created by liangshuochen on 08/06/2017.
//

#include "DisplayData.h"
#include "UserData.h"
#include "BoundingBoxData.h"

DRAGONBONES_NAMESPACE_BEGIN

void VerticesData::clear()
{
    if (!isShared && weight != nullptr)
    {
        weight->returnToPool();
    }

    isShared = false;
    inheritDeform = false;
    offset = 0;
    data = nullptr;
    weight = nullptr;
}

void VerticesData::shareFrom(const VerticesData& value)
{
    isShared = true;
    offset = value.offset;
    weight = value.weight;
}

void DisplayData::_onClear()
{
    name = "";
    path = "";
    transform.identity();
    parent = nullptr;
}

void ImageDisplayData::_onClear()
{
    DisplayData::_onClear();

    type = DisplayType::Image;
    pivot.clear();
    texture = nullptr;
}

void ArmatureDisplayData::_onClear()
{
    DisplayData::_onClear();

    for(const auto action : actions)
    {
        action->returnToPool();
    }

    type = DisplayType::Armature;
    inheritAnimation = false;
    actions.clear();
    armature = nullptr;
}

void ArmatureDisplayData::addAction(ActionData* value)
{
    actions.push_back(value);
}

void MeshDisplayData::_onClear()
{
    DisplayData::_onClear();

    type = DisplayType::Mesh;
    vertices.clear();
    texture = nullptr;
}

void BoundingBoxDisplayData::_onClear()
{
    DisplayData::_onClear();

    if(boundingBox != nullptr)
    {
        boundingBox->returnToPool();
    }

    type = DisplayType::BoundingBox;
    boundingBox = nullptr;
}

void WeightData::_onClear()
{
    count = 0;
    offset = 0;
    bones.clear();
}

void WeightData::addBone(BoneData* value)
{
    bones.push_back(value);
}

DRAGONBONES_NAMESPACE_END