mirror of https://github.com/AxioDL/metaforce.git
84 lines
2.3 KiB
C++
84 lines
2.3 KiB
C++
#include "CActor.hpp"
|
|
#include "CActorParameters.hpp"
|
|
#include "CStateManager.hpp"
|
|
#include "Collision/CMaterialList.hpp"
|
|
|
|
namespace urde
|
|
{
|
|
|
|
static CMaterialList MakeActorMaterialList(const CMaterialList& materialList, const CActorParameters& params)
|
|
{
|
|
CMaterialList ret = materialList;
|
|
if (params.GetVisorParameters().x0_28_b3)
|
|
ret.Add(EMaterialTypes::Fourteen);
|
|
if (params.GetVisorParameters().x0_29_b4)
|
|
ret.Add(EMaterialTypes::Fifteen);
|
|
return ret;
|
|
}
|
|
|
|
CActor::CActor(TUniqueId uid, bool active, const std::string& name, const CEntityInfo& info,
|
|
const zeus::CTransform&, CModelData&& mData, const CMaterialList& list,
|
|
const CActorParameters& params, TUniqueId)
|
|
: CEntity(uid, info, active, name),
|
|
x68_(MakeActorMaterialList(list, params)),
|
|
x70_(CMaterialFilter::MakeIncludeExclude({EMaterialTypes::Nineteen}, {EMaterialTypes::Zero}))
|
|
{
|
|
if (mData.x1c_normalModel)
|
|
x64_modelData = std::make_unique<CModelData>(std::move(mData));
|
|
}
|
|
|
|
void CActor::RemoveMaterial(EMaterialTypes t1, EMaterialTypes t2, EMaterialTypes t3, EMaterialTypes t4, CStateManager& mgr)
|
|
{
|
|
x68_.Remove(t1);
|
|
RemoveMaterial(t2, t3, t4, mgr);
|
|
}
|
|
|
|
void CActor::RemoveMaterial(EMaterialTypes t1, EMaterialTypes t2, EMaterialTypes t3, CStateManager & mgr)
|
|
{
|
|
x68_.Remove(t1);
|
|
RemoveMaterial(t2, t3, mgr);
|
|
}
|
|
|
|
void CActor::RemoveMaterial(EMaterialTypes t1, EMaterialTypes t2, CStateManager& mgr)
|
|
{
|
|
x68_.Remove(t1);
|
|
}
|
|
|
|
void CActor::RemoveMaterial(EMaterialTypes t, CStateManager& mgr)
|
|
{
|
|
x68_.Remove(t);
|
|
mgr.UpdateObjectInLists(*this);
|
|
}
|
|
|
|
void CActor::AddMaterial(EMaterialTypes t1, EMaterialTypes t2, EMaterialTypes t3, EMaterialTypes t4, EMaterialTypes t5, CStateManager& mgr)
|
|
{
|
|
x68_.Add(t1);
|
|
AddMaterial(t2, t3, t4, t5, mgr);
|
|
}
|
|
|
|
void CActor::AddMaterial(EMaterialTypes t1, EMaterialTypes t2, EMaterialTypes t3, EMaterialTypes t4, CStateManager& mgr)
|
|
{
|
|
x68_.Add(t1);
|
|
AddMaterial(t2, t3, t4, mgr);
|
|
}
|
|
|
|
void CActor::AddMaterial(EMaterialTypes t1, EMaterialTypes t2, EMaterialTypes t3, CStateManager& mgr)
|
|
{
|
|
x68_.Add(t1);
|
|
AddMaterial(t2, t3, mgr);
|
|
}
|
|
|
|
void CActor::AddMaterial(EMaterialTypes t1, EMaterialTypes t2, CStateManager& mgr)
|
|
{
|
|
x68_.Add(t1);
|
|
AddMaterial(t2, mgr);
|
|
}
|
|
|
|
void CActor::AddMaterial(EMaterialTypes type, CStateManager& mgr)
|
|
{
|
|
x68_.Add(type);
|
|
mgr.UpdateObjectInLists(*this);
|
|
}
|
|
|
|
}
|