metaforce/Runtime/AutoMapper/CMapUniverse.cpp

56 lines
1.6 KiB
C++
Raw Normal View History

2016-08-02 06:19:52 +00:00
#include "CMapUniverse.hpp"
#include "GameGlobalObjects.hpp"
#include "CSimplePool.hpp"
namespace urde
{
CMapUniverse::CMapUniverse(CInputStream& in, u32 version)
: x0_hexagonId(in.readUint32Big())
{
x4_hexagonToken = g_SimplePool->GetObj({'MAPA', x0_hexagonId});
u32 count = in.readUint32Big();
x10_worldDatas.reserve(count);
for (u32 i = 0 ; i<count ; ++i)
x10_worldDatas.emplace_back(in, version);
}
CMapUniverse::CMapWorldData::CMapWorldData(CInputStream& in, u32 version)
: x0_label(in.readString()),
x10_worldAssetId(in.readUint32Big())
{
x14_transform.read34RowMajor(in);
u32 worldCount = in.readUint32Big();
2017-04-15 05:32:25 +00:00
x44_hexagonXfs.reserve(worldCount);
2016-08-02 06:19:52 +00:00
for (u32 i = 0 ; i<worldCount ; ++i)
{
2017-04-15 05:32:25 +00:00
x44_hexagonXfs.emplace_back();
x44_hexagonXfs.back().read34RowMajor(in);
2016-08-02 06:19:52 +00:00
}
if (version != 0)
x54_.readRGBABig(in);
else
x54_.fromRGBA32(255 | (x10_worldAssetId & 0xFFFFFF00));
x58_ = zeus::CColor::lerp(zeus::CColor::skWhite, x54_, 0.5f);
x5c_ = zeus::CColor::lerp(zeus::CColor::skBlack, x54_, 0.5f);
x60_ = zeus::CColor::lerp(zeus::CColor::skWhite, x5c_, 0.5f);
2017-04-15 05:32:25 +00:00
for (const zeus::CTransform& xf : x44_hexagonXfs)
x64_centerPoint += xf.origin;
2016-08-02 06:19:52 +00:00
2017-04-15 05:32:25 +00:00
x64_centerPoint *= 1.0f / float(x44_hexagonXfs.size());
2016-08-02 06:19:52 +00:00
}
2017-03-24 05:30:16 +00:00
CFactoryFnReturn FMapUniverseFactory(const SObjectTag&, CInputStream& in, const CVParamTransfer&,
CObjectReference*)
2016-08-02 06:19:52 +00:00
{
in.readUint32Big();
u32 version = in.readUint32Big();
2016-08-03 23:20:31 +00:00
return TToken<CMapUniverse>::GetIObjObjectFor(std::make_unique<CMapUniverse>(in, version));
2016-08-02 06:19:52 +00:00
}
}