Bomberman-OverlordEngine-x64 / BombermanGame / Prefabs / BoneObject.cpp
BoneObject.cpp
Raw
#include "stdafx.h"
#include "BoneObject.h"

BoneObject::BoneObject(BaseMaterial* pMaterial, float length)
	: m_pMaterial{ pMaterial }
	, m_Length{ length }
{

}

void BoneObject::Initialize(const SceneContext& /*gameContext*/)
{
	GameObject* pEmpty = new GameObject();
	AddChild(pEmpty);

	ModelComponent* pModel = new ModelComponent(L"Meshes/Bone.ovm");
	pModel->SetMaterial(m_pMaterial);
	pEmpty->AddComponent(pModel);

	pEmpty->GetTransform()->Rotate(0, -90.f, 0);
	pEmpty->GetTransform()->Scale(m_Length);
}

void BoneObject::AddBone(BoneObject* pBone)
{
	pBone->GetTransform()->Translate(m_Length, 0, 0);
	AddChild(pBone);
}

void BoneObject::CalculateBindPose()
{
	const DirectX::XMMATRIX world = XMLoadFloat4x4(&GetTransform()->GetWorld());
	const DirectX::XMMATRIX worldInv = XMMatrixInverse(nullptr, world);
	XMStoreFloat4x4(&m_BindPose, worldInv);

	std::vector<BoneObject*> childBones = GetChildren<BoneObject>();
	for (BoneObject* pBone : childBones)
	{
		pBone->CalculateBindPose();
	}
}