Runtime: Collapse emplace_back() calls where applicable

Same behavior, but with less code.
This commit is contained in:
Lioncash 2020-03-13 16:32:24 -04:00
parent df4487bae8
commit 097d4a4422
18 changed files with 103 additions and 123 deletions

View File

@ -30,8 +30,7 @@ void CMapArea::PostConstruct() {
m_mappableObjects.reserve(x28_mappableObjCount);
for (u32 i = 0, j = 0; i < x28_mappableObjCount; ++i, j += 0x50) {
m_mappableObjects.emplace_back(x38_moStart + j);
m_mappableObjects.back().PostConstruct(x44_buf.get());
m_mappableObjects.emplace_back(x38_moStart + j).PostConstruct(x44_buf.get());
}
u8* tmp = x3c_vertexStart;
@ -45,8 +44,7 @@ void CMapArea::PostConstruct() {
std::vector<u32> index;
m_surfaces.reserve(x30_surfaceCount);
for (u32 i = 0, j = 0; i < x30_surfaceCount; ++i, j += 32) {
m_surfaces.emplace_back(x40_surfaceStart + j);
m_surfaces.back().PostConstruct(x44_buf.get(), index);
m_surfaces.emplace_back(x40_surfaceStart + j).PostConstruct(x44_buf.get(), index);
}
CGraphics::CommitResources([this, &index](boo::IGraphicsDataFactory::Context& ctx) {
@ -60,8 +58,7 @@ void CMapArea::PostConstruct() {
CMapAreaSurface& surf = m_surfaces[i];
surf.m_instances.reserve(instCount);
for (u32 inst = 0; inst < instCount; ++inst) {
surf.m_instances.emplace_back(ctx, m_vbo, m_ibo);
CMapAreaSurface::Instance& instance = surf.m_instances.back();
CMapAreaSurface::Instance& instance = surf.m_instances.emplace_back(ctx, m_vbo, m_ibo);
athena::io::MemoryReader r(surf.x1c_outlineOffset, INT_MAX);
u32 outlineCount = r.readUint32Big();

View File

@ -17,11 +17,10 @@ CMapUniverse::CMapUniverse(CInputStream& in, u32 version) : x0_hexagonId(in.read
CMapUniverse::CMapWorldData::CMapWorldData(CInputStream& in, u32 version)
: x0_label(in.readString()), x10_worldAssetId(in.readUint32Big()) {
x14_transform.read34RowMajor(in);
u32 worldCount = in.readUint32Big();
const u32 worldCount = in.readUint32Big();
x44_hexagonXfs.reserve(worldCount);
for (u32 i = 0; i < worldCount; ++i) {
x44_hexagonXfs.emplace_back();
x44_hexagonXfs.back().read34RowMajor(in);
x44_hexagonXfs.emplace_back().read34RowMajor(in);
}
if (version != 0)

View File

@ -29,14 +29,14 @@ u8* CGameAllocator::Alloc(size_t len) {
/* Pad size to allow for allocation information */
allocSz = ROUND_UP_64(allocSz + sizeof(SChunkDescription));
m_allocations.emplace_back();
m_allocations.back().memptr.reset(new u8[allocSz]);
u8* ptr = m_allocations.back().memptr.get();
m_allocations.back().allocSize = allocSz;
m_allocations.back().freeOffset += roundedLen;
auto& alloc = m_allocations.emplace_back();
alloc.memptr.reset(new u8[allocSz]);
u8* ptr = alloc.memptr.get();
alloc.allocSize = allocSz;
alloc.freeOffset += roundedLen;
SChunkDescription* chunkInfo = reinterpret_cast<SChunkDescription*>(ptr);
*chunkInfo = SChunkDescription();
chunkInfo->parent = &m_allocations.back();
chunkInfo->parent = &alloc;
chunkInfo->len = len;
return ptr + sizeof(SChunkDescription);
}

View File

@ -5,43 +5,49 @@
namespace urde {
CSaveWorld::CSaveWorld(CInputStream& in) {
in.readUint32Big();
u32 version = in.readUint32Big();
if (version > 1)
const u32 version = in.readUint32Big();
if (version > 1) {
x0_areaCount = in.readUint32Big();
if (version > 2) {
u32 cinematicCount = in.readUint32Big();
x4_cinematics.reserve(cinematicCount);
for (u32 i = 0; i < cinematicCount; ++i)
x4_cinematics.push_back(in.readUint32Big());
u32 relayCount = in.readUint32Big();
x14_relays.reserve(relayCount);
for (u32 i = 0; i < relayCount; ++i)
x14_relays.push_back(in.readUint32Big());
}
u32 layerCount = in.readUint32Big();
if (version > 2) {
const u32 cinematicCount = in.readUint32Big();
x4_cinematics.reserve(cinematicCount);
for (u32 i = 0; i < cinematicCount; ++i) {
x4_cinematics.push_back(in.readUint32Big());
}
const u32 relayCount = in.readUint32Big();
x14_relays.reserve(relayCount);
for (u32 i = 0; i < relayCount; ++i) {
x14_relays.push_back(in.readUint32Big());
}
}
const u32 layerCount = in.readUint32Big();
x24_layers.reserve(layerCount);
for (u32 i = 0; i < layerCount; ++i) {
x24_layers.emplace_back();
SLayerState& st = x24_layers.back();
SLayerState& st = x24_layers.emplace_back();
st.x0_area = in.readUint32Big();
st.x4_layer = in.readUint32Big();
}
u32 doorCount = in.readUint32Big();
const u32 doorCount = in.readUint32Big();
x34_doors.reserve(doorCount);
for (u32 i = 0; i < doorCount; ++i)
for (u32 i = 0; i < doorCount; ++i) {
x34_doors.push_back(in.readUint32Big());
if (version > 0) {
u32 scanCount = in.readUint32Big();
x44_scans.reserve(scanCount);
for (u32 i = 0; i < scanCount; ++i) {
x44_scans.emplace_back();
SScanState& st = x44_scans.back();
st.x0_id = in.readUint32Big();
st.x4_category = EScanCategory(in.readUint32Big());
}
}
if (version <= 0) {
return;
}
const u32 scanCount = in.readUint32Big();
x44_scans.reserve(scanCount);
for (u32 i = 0; i < scanCount; ++i) {
SScanState& st = x44_scans.emplace_back();
st.x0_id = in.readUint32Big();
st.x4_category = EScanCategory(in.readUint32Big());
}
}

View File

@ -49,8 +49,7 @@ void CCameraManager::RemoveCameraShaker(u32 id) {
}
int CCameraManager::AddCameraShaker(const CCameraShakeData& data, bool sfx) {
x14_shakers.emplace_back(data);
x14_shakers.back().xbc_shakerId = ++x2c_lastShakeId;
x14_shakers.emplace_back(data).xbc_shakerId = ++x2c_lastShakeId;
if (!xa0_24_pendingRumble) {
xa0_24_pendingRumble = true;
x90_rumbleCooldown = 0.5f;

View File

@ -266,8 +266,7 @@ bool CActorLights::BuildAreaLightList(const CStateManager& mgr, const CGameArea&
zeus::CSphere sphere(light.GetPosition(), light.GetRadius() * 2.f);
if (aabb.intersects(sphere)) {
/* Light passes as candidate */
valList.emplace_back();
SLightValue& value = valList.back();
SLightValue& value = valList.emplace_back();
value.x0_areaLightIdx = lightIdx;
value.x4_color = light.GetNormalIndependentLightingAtPoint(vec);
value.x4_color.a() = 0.f;

View File

@ -51,18 +51,16 @@ std::unique_ptr<float[]> RotationAndOffsetStorage::GetRotationsAndOffsets(const
}
RotationAndOffsetStorage::CRotationAndOffsetVectors::CRotationAndOffsetVectors(CInputStream& in) {
u32 quatCount = in.readUint32Big();
const u32 quatCount = in.readUint32Big();
x0_rotations.reserve(quatCount);
for (u32 i = 0; i < quatCount; ++i) {
x0_rotations.emplace_back();
x0_rotations.back().readBig(in);
x0_rotations.emplace_back().readBig(in);
}
u32 vecCount = in.readUint32Big();
const u32 vecCount = in.readUint32Big();
x10_offsets.reserve(vecCount);
for (u32 i = 0; i < vecCount; ++i) {
x10_offsets.emplace_back();
x10_offsets.back().readBig(in);
x10_offsets.emplace_back().readBig(in);
}
}

View File

@ -1721,8 +1721,7 @@ pas::EAnimationState CBSLocomotion::GetBodyStateTransition(float, CBodyControlle
CBSBiPedLocomotion::CBSBiPedLocomotion(CActor& actor) {
const CPASDatabase& pasDatabase = actor.GetModelData()->GetAnimationData()->GetCharacterInfo().GetPASDatabase();
for (int i = 0; i < 14; ++i) {
x8_anims.emplace_back();
rstl::reserved_vector<std::pair<s32, float>, 8>& innerVec = x8_anims.back();
rstl::reserved_vector<std::pair<s32, float>, 8>& innerVec = x8_anims.emplace_back();
for (int j = 0; j < 8; ++j) {
CPASAnimParmData parms(5, CPASAnimParm::FromEnum(j), CPASAnimParm::FromEnum(i));
std::pair<float, s32> best = pasDatabase.FindBestAnimation(parms, -1);

View File

@ -263,13 +263,15 @@ GeometryUniformLayout::GeometryUniformLayout(const CModel* model, const Material
}
CBooModel::ModelInstance* CBooModel::PushNewModelInstance(int sharedLayoutBuf) {
if (!x40_24_texturesLoaded && !g_DummyTextures)
if (!x40_24_texturesLoaded && !g_DummyTextures) {
return nullptr;
}
if (m_instances.size() >= 512)
if (m_instances.size() >= 512) {
Log.report(logvisor::Fatal, fmt("Model buffer overflow"));
m_instances.emplace_back();
ModelInstance& newInst = m_instances.back();
}
ModelInstance& newInst = m_instances.emplace_back();
CGraphics::CommitResources([&](boo::IGraphicsDataFactory::Context& ctx) {
/* Build geometry uniform buffer if shared not available */
@ -371,8 +373,7 @@ CBooModel::ModelInstance* CBooModel::PushNewModelInstance(int sharedLayoutBuf) {
const CModelShaders::ShaderPipelines& pipelines = m_pipelines->at(surf.m_data.matIdx);
newInst.m_shaderDataBindings.emplace_back();
std::vector<boo::ObjToken<boo::IShaderDataBinding>>& extendeds = newInst.m_shaderDataBindings.back();
std::vector<boo::ObjToken<boo::IShaderDataBinding>>& extendeds = newInst.m_shaderDataBindings.emplace_back();
extendeds.reserve(pipelines->size());
EExtendedShader idx{};
@ -1171,10 +1172,9 @@ CModel::CModel(std::unique_ptr<u8[]>&& in, u32 /* dataLen */, IObjectStore* stor
const u8* dataCur = data.get() + ROUND_UP_32(0x2c + secCount * 4);
const u32* secSizeCur = reinterpret_cast<const u32*>(data.get() + 0x2c);
for (u32 i = 0; i < matSetCount; ++i) {
u32 matSetSz = hecl::SBig(*secSizeCur);
const u32 matSetSz = hecl::SBig(*secSizeCur);
const u8* sec = MemoryFromPartData(dataCur, secSizeCur);
x18_matSets.emplace_back(i);
SShader& shader = x18_matSets.back();
SShader& shader = x18_matSets.emplace_back(i);
athena::io::MemoryReader r(sec, matSetSz);
shader.m_matSet.read(r);
CBooModel::MakeTexturesFromMats(shader.m_matSet, shader.x0_textures, *store);
@ -1217,13 +1217,12 @@ CModel::CModel(std::unique_ptr<u8[]>&& in, u32 /* dataLen */, IObjectStore* stor
return true;
} BooTrace);
u32 surfCount = hecl::SBig(*reinterpret_cast<const u32*>(surfInfo));
const u32 surfCount = hecl::SBig(*reinterpret_cast<const u32*>(surfInfo));
x8_surfaces.reserve(surfCount);
for (u32 i = 0; i < surfCount; ++i) {
u32 surfSz = hecl::SBig(*secSizeCur);
const u32 surfSz = hecl::SBig(*secSizeCur);
const u8* sec = MemoryFromPartData(dataCur, secSizeCur);
x8_surfaces.emplace_back();
CBooSurface& surf = x8_surfaces.back();
CBooSurface& surf = x8_surfaces.emplace_back();
surf.selfIdx = i;
athena::io::MemoryReader r(sec, surfSz);
surf.m_data.read(r);

View File

@ -205,8 +205,7 @@ CMoviePlayer::CMoviePlayer(const char* path, float preLoadSeconds, bool loop, bo
/* Allocate textures here (rather than at decode time) */
x80_textures.reserve(3);
for (int i = 0; i < 3; ++i) {
x80_textures.emplace_back();
CTHPTextureSet& set = x80_textures.back();
CTHPTextureSet& set = x80_textures.emplace_back();
if (deinterlace) {
/* urde addition: this way interlaced THPs don't look horrible */
set.Y[0] = ctx.newDynamicTexture(x6c_videoInfo.width, x6c_videoInfo.height / 2, boo::TextureFormat::I8,

View File

@ -31,8 +31,8 @@ CHudRadarInterface::CHudRadarInterface(CGuiFrame& baseHud, CStateManager& stateM
void CHudRadarInterface::DoDrawRadarPaint(const zeus::CVector3f& translate, float radius,
const zeus::CColor& color) const {
radius *= 4.f;
m_paintInsts.emplace_back();
CRadarPaintShader::Instance& inst = m_paintInsts.back();
CRadarPaintShader::Instance& inst = m_paintInsts.emplace_back();
inst.pos[0] = translate + zeus::CVector3f(-radius, 0.f, radius);
inst.uv[0].assign(0.f, 1.f);
inst.pos[1] = translate + zeus::CVector3f(-radius, 0.f, -radius);

View File

@ -185,8 +185,8 @@ void CTextRenderBuffer::AddCharacter(const zeus::CVector2i& offset, char16_t ch,
m_primitiveMarks.push_back({Command::CharacterRender, m_activeFontCh, chs.m_charCount++});
else {
const CGlyph* glyph = chs.m_font.GetObj()->GetGlyph(ch);
chs.m_charData.emplace_back();
CTextSupportShader::CharacterInstance& inst = chs.m_charData.back();
CTextSupportShader::CharacterInstance& inst = chs.m_charData.emplace_back();
inst.SetMetrics(*glyph, offset);
inst.m_fontColor = m_main * color;
inst.m_outlineColor = m_outline * color;

View File

@ -114,8 +114,7 @@ void CDecal::RenderQuad(CQuadDecal& decal, const SQuadDescr& desc) const {
g_instTexData.clear();
g_instTexData.reserve(1);
g_instTexData.emplace_back();
SParticleInstanceTex& inst = g_instTexData.back();
SParticleInstanceTex& inst = g_instTexData.emplace_back();
if (decal.x8_rotation == 0.f) {
inst.pos[0] = zeus::CVector3f(-size, 0.001f, size);
inst.pos[1] = zeus::CVector3f(size, 0.001f, size);
@ -142,8 +141,7 @@ void CDecal::RenderQuad(CQuadDecal& decal, const SQuadDescr& desc) const {
g_instNoTexData.clear();
g_instNoTexData.reserve(1);
g_instNoTexData.emplace_back();
SParticleInstanceNoTex& inst = g_instNoTexData.back();
SParticleInstanceNoTex& inst = g_instNoTexData.emplace_back();
if (decal.x8_rotation == 0.f) {
inst.pos[0] = zeus::CVector3f(-size, 0.001f, size);
inst.pos[1] = zeus::CVector3f(size, 0.001f, size);

View File

@ -493,17 +493,18 @@ void CElementGen::CreateNewParticles(int count) {
CParticleGlobals::instance()->m_particleAccessParameters = nullptr;
for (int i = 0; i < count; ++i) {
x30_particles.emplace_back();
CParticle& particle = x30_particles.emplace_back();
++g_ParticleAliveCount;
++x25c_activeParticleCount;
++x260_cumulativeParticles;
if (x2c_orientType == EModelOrientationType::One)
if (x2c_orientType == EModelOrientationType::One) {
x50_parentMatrices[x30_particles.size() - 1] = x1d8_orientation.buildMatrix3f();
}
CParticle& particle = x30_particles.back();
particle.x28_startFrame = x74_curFrame;
if (CIntElement* ltme = desc->x34_x28_LTME.get())
if (CIntElement* ltme = desc->x34_x28_LTME.get()) {
ltme->GetValue(0, particle.x0_endFrame);
}
CParticleGlobals::instance()->SetParticleLifetime(particle.x0_endFrame);
CParticleGlobals::instance()->UpdateParticleLifetimeTweenValues(0);
g_currentParticle = &particle;
@ -994,8 +995,7 @@ void CElementGen::RenderModels(const CActorLights* actorLights) {
switch (m_shaderClass) {
case CElementGenShaders::EShaderClass::Tex: {
g_instTexData.emplace_back();
SParticleInstanceTex& inst = g_instTexData.back();
SParticleInstanceTex& inst = g_instTexData.emplace_back();
inst.pos[0] = CGraphics::g_GXModelView * zeus::CVector3f{0.5f, 0.f, 0.5f};
inst.pos[1] = CGraphics::g_GXModelView * zeus::CVector3f{-0.5f, 0.f, 0.5f};
inst.pos[2] = CGraphics::g_GXModelView * zeus::CVector3f{0.5f, 0.f, -0.5f};
@ -1008,8 +1008,7 @@ void CElementGen::RenderModels(const CActorLights* actorLights) {
break;
}
case CElementGenShaders::EShaderClass::NoTex: {
g_instNoTexData.emplace_back();
SParticleInstanceNoTex& inst = g_instNoTexData.back();
SParticleInstanceNoTex& inst = g_instNoTexData.emplace_back();
inst.pos[0] = CGraphics::g_GXModelView * zeus::CVector3f{0.5f, 0.f, 0.5f};
inst.pos[1] = CGraphics::g_GXModelView * zeus::CVector3f{-0.5f, 0.f, 0.5f};
inst.pos[2] = CGraphics::g_GXModelView * zeus::CVector3f{0.5f, 0.f, -0.5f};
@ -1327,8 +1326,7 @@ void CElementGen::RenderParticles() {
if (0.f == particle.x30_lineWidthOrRota) {
switch (m_shaderClass) {
case CElementGenShaders::EShaderClass::Tex: {
g_instTexData.emplace_back();
SParticleInstanceTex& inst = g_instTexData.back();
SParticleInstanceTex& inst = g_instTexData.emplace_back();
inst.pos[0] = zeus::CVector4f{viewPoint.x() + size, viewPoint.y(), viewPoint.z() + size, 1.f};
inst.pos[1] = zeus::CVector4f{viewPoint.x() - size, viewPoint.y(), viewPoint.z() + size, 1.f};
inst.pos[2] = zeus::CVector4f{viewPoint.x() + size, viewPoint.y(), viewPoint.z() - size, 1.f};
@ -1341,8 +1339,7 @@ void CElementGen::RenderParticles() {
break;
}
case CElementGenShaders::EShaderClass::NoTex: {
g_instNoTexData.emplace_back();
SParticleInstanceNoTex& inst = g_instNoTexData.back();
SParticleInstanceNoTex& inst = g_instNoTexData.emplace_back();
inst.pos[0] = zeus::CVector4f{viewPoint.x() + size, viewPoint.y(), viewPoint.z() + size, 1.f};
inst.pos[1] = zeus::CVector4f{viewPoint.x() - size, viewPoint.y(), viewPoint.z() + size, 1.f};
inst.pos[2] = zeus::CVector4f{viewPoint.x() + size, viewPoint.y(), viewPoint.z() - size, 1.f};
@ -1360,8 +1357,7 @@ void CElementGen::RenderParticles() {
switch (m_shaderClass) {
case CElementGenShaders::EShaderClass::Tex: {
g_instTexData.emplace_back();
SParticleInstanceTex& inst = g_instTexData.back();
SParticleInstanceTex& inst = g_instTexData.emplace_back();
inst.pos[0] = zeus::CVector4f{viewPoint.x() + sinT + cosT, viewPoint.y(), viewPoint.z() + cosT - sinT, 1.f};
inst.pos[1] = zeus::CVector4f{viewPoint.x() + sinT - cosT, viewPoint.y(), viewPoint.z() + sinT + cosT, 1.f};
inst.pos[2] =
@ -1376,8 +1372,7 @@ void CElementGen::RenderParticles() {
break;
}
case CElementGenShaders::EShaderClass::NoTex: {
g_instNoTexData.emplace_back();
SParticleInstanceNoTex& inst = g_instNoTexData.back();
SParticleInstanceNoTex& inst = g_instNoTexData.emplace_back();
inst.pos[0] = zeus::CVector4f{viewPoint.x() + sinT + cosT, viewPoint.y(), viewPoint.z() + cosT - sinT, 1.f};
inst.pos[1] = zeus::CVector4f{viewPoint.x() + sinT - cosT, viewPoint.y(), viewPoint.z() + sinT + cosT, 1.f};
inst.pos[2] =
@ -1437,8 +1432,7 @@ void CElementGen::RenderParticles() {
switch (m_shaderClass) {
case CElementGenShaders::EShaderClass::Tex: {
g_instTexData.emplace_back();
SParticleInstanceTex& inst = g_instTexData.back();
SParticleInstanceTex& inst = g_instTexData.emplace_back();
viewPoint += rightVec * 0.5f;
inst.pos[0] = zeus::CVector4f{viewPoint + 0.5f * foreVec};
inst.pos[1] = zeus::CVector4f{viewPoint - 0.5f * foreVec};
@ -1453,8 +1447,7 @@ void CElementGen::RenderParticles() {
break;
}
case CElementGenShaders::EShaderClass::NoTex: {
g_instNoTexData.emplace_back();
SParticleInstanceNoTex& inst = g_instNoTexData.back();
SParticleInstanceNoTex& inst = g_instNoTexData.emplace_back();
viewPoint += rightVec * 0.5f;
inst.pos[0] = zeus::CVector4f{viewPoint + 0.5f * foreVec};
inst.pos[1] = zeus::CVector4f{viewPoint - 0.5f * foreVec};
@ -1521,8 +1514,7 @@ void CElementGen::RenderParticles() {
switch (m_shaderClass) {
case CElementGenShaders::EShaderClass::Tex: {
g_instTexData.emplace_back();
SParticleInstanceTex& inst = g_instTexData.back();
SParticleInstanceTex& inst = g_instTexData.emplace_back();
inst.pos[0] = zeus::CVector4f{vec2.x() + size, vec2.y(), vec2.z() + size, 1.f};
inst.pos[1] = zeus::CVector4f{vec2.x() - size, vec2.y(), vec2.z() + size, 1.f};
inst.pos[2] = zeus::CVector4f{vec2.x() + size, vec2.y(), vec2.z() - size, 1.f};
@ -1535,8 +1527,7 @@ void CElementGen::RenderParticles() {
break;
}
case CElementGenShaders::EShaderClass::NoTex: {
g_instNoTexData.emplace_back();
SParticleInstanceNoTex& inst = g_instNoTexData.back();
SParticleInstanceNoTex& inst = g_instNoTexData.emplace_back();
inst.pos[0] = zeus::CVector4f{vec2.x() + size, vec2.y(), vec2.z() + size, 1.f};
inst.pos[1] = zeus::CVector4f{vec2.x() - size, vec2.y(), vec2.z() + size, 1.f};
inst.pos[2] = zeus::CVector4f{vec2.x() + size, vec2.y(), vec2.z() - size, 1.f};
@ -1559,8 +1550,7 @@ void CElementGen::RenderParticles() {
switch (m_shaderClass) {
case CElementGenShaders::EShaderClass::Tex: {
g_instTexData.emplace_back();
SParticleInstanceTex& inst = g_instTexData.back();
SParticleInstanceTex& inst = g_instTexData.emplace_back();
inst.pos[0] = zeus::CVector4f{vec2.x() + sinT + cosT, vec2.y(), vec2.z() + cosT - sinT, 1.f};
inst.pos[1] = zeus::CVector4f{vec2.x() + sinT - cosT, vec2.y(), vec2.z() + sinT + cosT, 1.f};
inst.pos[2] = zeus::CVector4f{vec2.x() + (cosT - sinT), vec2.y(), vec2.z() + (-cosT - sinT), 1.f};
@ -1573,8 +1563,7 @@ void CElementGen::RenderParticles() {
break;
}
case CElementGenShaders::EShaderClass::NoTex: {
g_instNoTexData.emplace_back();
SParticleInstanceNoTex& inst = g_instNoTexData.back();
SParticleInstanceNoTex& inst = g_instNoTexData.emplace_back();
inst.pos[0] = zeus::CVector4f{vec2.x() + sinT + cosT, vec2.y(), vec2.z() + cosT - sinT, 1.f};
inst.pos[1] = zeus::CVector4f{vec2.x() + sinT - cosT, vec2.y(), vec2.z() + sinT + cosT, 1.f};
inst.pos[2] = zeus::CVector4f{vec2.x() + (cosT - sinT), vec2.y(), vec2.z() + (-cosT - sinT), 1.f};
@ -1718,8 +1707,7 @@ void CElementGen::RenderParticlesIndirectTexture() {
CGraphics::ResolveSpareTexture(clipRect);
g_instIndTexData.emplace_back();
SParticleInstanceIndTex& inst = g_instIndTexData.back();
SParticleInstanceIndTex& inst = g_instIndTexData.emplace_back();
inst.pos[0] = zeus::CVector4f{viewPoint.x() + size, viewPoint.y(), viewPoint.z() + size, 1.f};
inst.pos[1] = zeus::CVector4f{viewPoint.x() - size, viewPoint.y(), viewPoint.z() + size, 1.f};
inst.pos[2] = zeus::CVector4f{viewPoint.x() + size, viewPoint.y(), viewPoint.z() - size, 1.f};

View File

@ -69,8 +69,7 @@ void CGrappleArm::BuildSuitDependencyList() {
x184_grappleArm.Lock();
for (const char* name : skDependencyNames) {
TLockedToken<CDependencyGroup> dgrp = g_SimplePool->GetObj(name);
x19c_suitDeps.emplace_back();
std::vector<CToken>& depsOut = x19c_suitDeps.back();
std::vector<CToken>& depsOut = x19c_suitDeps.emplace_back();
FillTokenVector(dgrp->GetObjectTagVector(), depsOut);
}
}

View File

@ -234,11 +234,10 @@ void CGameArea::CAreaFog::DisableFog() { x0_fogMode = ERglFogMode::None; }
static std::vector<SObjectTag> ReadDependencyList(CInputStream& in) {
std::vector<SObjectTag> ret;
u32 count = in.readUint32Big();
const u32 count = in.readUint32Big();
ret.reserve(count);
for (u32 i = 0; i < count; ++i) {
ret.emplace_back();
ret.back().readMLVL(in);
ret.emplace_back().readMLVL(in);
}
return ret;
}
@ -1072,13 +1071,12 @@ void CGameArea::FillInStaticGeometry(bool textures) {
ibo = ctx.newStaticBuffer(boo::BufferUse::Index, secIt->first, 4, inst.m_hmdlMeta.indexCount);
++secIt;
u32 surfCount = hecl::SBig(*reinterpret_cast<const u32*>(secIt->first));
const u32 surfCount = hecl::SBig(*reinterpret_cast<const u32*>(secIt->first));
inst.m_surfaces.reserve(surfCount);
inst.m_shaders.reserve(surfCount);
++secIt;
for (u32 j = 0; j < surfCount; ++j) {
inst.m_surfaces.emplace_back();
CBooSurface& surf = inst.m_surfaces.back();
CBooSurface& surf = inst.m_surfaces.emplace_back();
surf.selfIdx = j;
athena::io::MemoryReader r(secIt->first, secIt->second);
surf.m_data.read(r);

View File

@ -36,8 +36,7 @@ CStateMachine::CStateMachine(CInputStream& in) {
float arg = in.readFloatBig();
CAiTrigger* newTrig;
if (k < lastTriggerIdx) {
x10_triggers.emplace_back();
newTrig = &x10_triggers.back();
newTrig = &x10_triggers.emplace_back();
} else {
newTrig = &firstTrig[j];
}

View File

@ -72,27 +72,30 @@ std::vector<CWorld::CRelay> CWorld::CRelay::ReadMemoryRelays(athena::io::MemoryR
}
void CWorldLayers::ReadWorldLayers(athena::io::MemoryReader& r, int version, CAssetId mlvlId) {
if (version <= 14)
if (version <= 14) {
return;
}
CWorldLayers ret;
u32 areaCount = r.readUint32Big();
ret.m_areas.reserve(areaCount);
for (u32 i = 0; i < areaCount; ++i) {
ret.m_areas.emplace_back();
ret.m_areas.back().m_layerCount = r.readUint32Big();
ret.m_areas.back().m_layerBits = r.readUint64Big();
auto& area = ret.m_areas.emplace_back();
area.m_layerCount = r.readUint32Big();
area.m_layerBits = r.readUint64Big();
}
u32 nameCount = r.readUint32Big();
const u32 nameCount = r.readUint32Big();
ret.m_names.reserve(nameCount);
for (u32 i = 0; i < nameCount; ++i)
for (u32 i = 0; i < nameCount; ++i) {
ret.m_names.push_back(r.readString());
}
areaCount = r.readUint32Big();
for (u32 i = 0; i < areaCount; ++i)
for (u32 i = 0; i < areaCount; ++i) {
ret.m_areas[i].m_startNameIdx = r.readUint32Big();
}
CWorldState& wldState = g_GameState->StateForWorld(mlvlId);
wldState.GetLayerState()->InitializeWorldLayers(ret.m_areas);