metaforce/Runtime/World/CScriptPlatform.cpp

57 lines
2.0 KiB
C++
Raw Normal View History

2016-04-20 21:44:18 +00:00
#include "CScriptPlatform.hpp"
#include "Collision/CMaterialList.hpp"
#include "Collision/CCollidableOBBTreeGroup.hpp"
2017-01-15 03:07:01 +00:00
#include "TCastTo.hpp"
2016-04-20 21:44:18 +00:00
namespace urde
{
static CMaterialList MakePlatformMaterialList()
{
CMaterialList ret;
2016-12-29 21:38:59 +00:00
ret.Add(EMaterialTypes::Solid);
ret.Add(EMaterialTypes::Immovable);
ret.Add(EMaterialTypes::Platform);
ret.Add(EMaterialTypes::Occluder);
2016-04-20 21:44:18 +00:00
return ret;
}
2017-11-13 06:19:18 +00:00
CScriptPlatform::CScriptPlatform(TUniqueId uid, std::string_view name, const CEntityInfo& info,
const zeus::CTransform& xf, CModelData&& mData, const CActorParameters& actParms,
const zeus::CAABox& aabb, float f1, bool, float f2, bool active,
const CHealthInfo& hInfo, const CDamageVulnerability& dVuln,
const rstl::optional_object<TLockedToken<CCollidableOBBTreeGroupContainer>>& dcln,
bool, u32, u32)
: CPhysicsActor(uid, active, name, info, xf, std::move(mData), MakePlatformMaterialList(), aabb, SMoverData(15000.f),
actParms, 0.3f, 0.1f)
, x28c_(hInfo)
, x294_(hInfo)
, x29c_(dVuln)
, x304_treeGroupContainer(dcln)
2016-04-20 21:44:18 +00:00
{
CActor::SetMaterialFilter(CMaterialFilter::MakeIncludeExclude(
CMaterialList(EMaterialTypes::Solid),
2017-07-23 23:45:04 +00:00
CMaterialList(EMaterialTypes::NoStaticCollision, EMaterialTypes::Twenty, EMaterialTypes::Platform)));
if (x304_treeGroupContainer)
x314_treeGroup = std::make_unique<CCollidableOBBTreeGroup>(x304_treeGroupContainer->GetObj(), x68_material);
2016-04-20 21:44:18 +00:00
}
2017-01-15 03:07:01 +00:00
void CScriptPlatform::Accept(IVisitor& visitor) { visitor.Visit(this); }
rstl::optional_object<zeus::CAABox> CScriptPlatform::GetTouchBounds() const
2017-01-15 03:07:01 +00:00
{
if (x314_treeGroup)
return {x314_treeGroup->CalculateAABox(GetTransform())};
2017-01-15 03:07:01 +00:00
return {CPhysicsActor::GetBoundingBox()};
}
bool CScriptPlatform::IsRider(TUniqueId id) const
{
for (const SRiders& rider : x318_riders)
if (rider.x0_uid == id)
return true;
return false;
}
2016-04-20 21:44:18 +00:00
}