metaforce/Runtime/CScannableObjectInfo.cpp

61 lines
1.8 KiB
C++
Raw Normal View History

2016-08-03 16:20:31 -07:00
#include "CScannableObjectInfo.hpp"
#include "GameGlobalObjects.hpp"
namespace urde
{
2017-01-31 03:21:45 -08:00
CScannableObjectInfo::CScannableObjectInfo(CInputStream& in, ResId resId) : x0_scannableObjectId(resId)
2016-08-03 16:20:31 -07:00
{
u32 version = in.readUint32Big();
Load(in, version);
}
2017-01-31 03:21:45 -08:00
ResId CScannableObjectInfo::GetScannableObjectId() const { return x0_scannableObjectId; }
2016-08-03 16:20:31 -07:00
2017-01-31 03:21:45 -08:00
ResId CScannableObjectInfo::GetStringTableId() const { return x4_stringId; }
2016-08-03 16:20:31 -07:00
2017-01-31 03:21:45 -08:00
float CScannableObjectInfo::GetTotalDownloadTime() const { return x8_totalDownloadTime; }
2016-08-03 16:20:31 -07:00
2017-01-31 03:21:45 -08:00
const CScannableObjectInfo::SBucket& CScannableObjectInfo::GetBucket(s32 idx) const { return x14_buckets[idx]; }
2016-08-03 16:20:31 -07:00
void CScannableObjectInfo::Load(CInputStream& in, u32 version)
{
in.readUint32Big();
in.readUint32Big();
x4_stringId = in.readUint32Big();
if (version < 4)
x8_totalDownloadTime = in.readFloatBig();
else
{
u32 scanSpeed = in.readUint32Big();
x8_totalDownloadTime = g_tweakGui->GetScanSpeed(scanSpeed);
}
xc_category = in.readUint32Big();
if (version > 4)
x10_important = in.readBool();
2017-01-31 03:21:45 -08:00
for (u32 i = 0; i < 4; i++)
2016-08-03 16:20:31 -07:00
x14_buckets.emplace_back(in, version);
}
CScannableObjectInfo::SBucket::SBucket(CInputStream& in, u32 version)
{
x0_texture = in.readUint32Big();
x4_appearanceRange = in.readFloatBig();
x8_imagePos = in.readUint32Big();
if (version > 1)
{
xc_size.x = in.readUint32Big();
xc_size.y = in.readUint32Big();
x14_interval = in.readFloatBig();
if (version >= 3)
x18_fadeDuration = in.readFloatBig();
}
}
2017-01-31 03:21:45 -08:00
CFactoryFnReturn FScannableObjectInfoFactory(const SObjectTag& tag, CInputStream& in, const CVParamTransfer&,
CObjectReference* selfRef)
2016-08-03 16:20:31 -07:00
{
return TToken<CScannableObjectInfo>::GetIObjObjectFor(std::make_unique<CScannableObjectInfo>(in, tag.id));
}
}