mirror of https://github.com/AxioDL/metaforce.git
CMappableObject: Make use of std::array where applicable
Same behavior, but also allows eliminating hardcoded array sizes.
This commit is contained in:
parent
1279be5e56
commit
755529b67a
|
@ -8,9 +8,11 @@
|
||||||
#include "Runtime/Graphics/CTexture.hpp"
|
#include "Runtime/Graphics/CTexture.hpp"
|
||||||
|
|
||||||
namespace urde {
|
namespace urde {
|
||||||
zeus::CVector3f CMappableObject::skDoorVerts[8] = {};
|
std::array<zeus::CVector3f, 8> CMappableObject::skDoorVerts{};
|
||||||
|
|
||||||
static const u32 DoorIndices[] = {6, 4, 2, 0, 3, 1, 7, 5, 1, 0, 5, 4, 7, 6, 3, 2, 3, 2, 1, 0, 5, 4, 7, 6};
|
constexpr std::array<u32, 24> DoorIndices{
|
||||||
|
6, 4, 2, 0, 3, 1, 7, 5, 1, 0, 5, 4, 7, 6, 3, 2, 3, 2, 1, 0, 5, 4, 7, 6,
|
||||||
|
};
|
||||||
|
|
||||||
CMappableObject::CMappableObject(const void* buf) {
|
CMappableObject::CMappableObject(const void* buf) {
|
||||||
athena::io::MemoryReader r(buf, 64);
|
athena::io::MemoryReader r(buf, 64);
|
||||||
|
@ -168,13 +170,13 @@ void CMappableObject::Draw(int curArea, const CMapWorldInfo& mwInfo, float alpha
|
||||||
m_texQuadFilter.emplace(EFilterType::Add, tex, CTexturedQuadFilter::ZTest::GEqual);
|
m_texQuadFilter.emplace(EFilterType::Add, tex, CTexturedQuadFilter::ZTest::GEqual);
|
||||||
}
|
}
|
||||||
|
|
||||||
const CTexturedQuadFilter::Vert verts[4] = {
|
const std::array<CTexturedQuadFilter::Vert, 4> verts{{
|
||||||
{{-2.6f, 0.f, 2.6f}, {0.f, 1.f}},
|
{{-2.6f, 0.f, 2.6f}, {0.f, 1.f}},
|
||||||
{{-2.6f, 0.f, -2.6f}, {0.f, 0.f}},
|
{{-2.6f, 0.f, -2.6f}, {0.f, 0.f}},
|
||||||
{{2.6f, 0.f, 2.6f}, {1.f, 1.f}},
|
{{2.6f, 0.f, 2.6f}, {1.f, 1.f}},
|
||||||
{{2.6f, 0.f, -2.6f}, {1.f, 0.f}},
|
{{2.6f, 0.f, -2.6f}, {1.f, 0.f}},
|
||||||
};
|
}};
|
||||||
m_texQuadFilter->drawVerts(iconColor, verts);
|
m_texQuadFilter->drawVerts(iconColor, verts.data());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -239,9 +241,10 @@ boo::ObjToken<boo::IGraphicsBufferS> CMappableObject::g_doorIbo;
|
||||||
|
|
||||||
void CMappableObject::ReadAutoMapperTweaks(const ITweakAutoMapper& tweaks) {
|
void CMappableObject::ReadAutoMapperTweaks(const ITweakAutoMapper& tweaks) {
|
||||||
const zeus::CVector3f& center = tweaks.GetDoorCenter();
|
const zeus::CVector3f& center = tweaks.GetDoorCenter();
|
||||||
zeus::simd_floats centerF(center.mSimd);
|
const zeus::simd_floats centerF(center.mSimd);
|
||||||
zeus::CVector3f* doorVerts = CMappableObject::skDoorVerts;
|
|
||||||
/* Wrap door verts around -Z to build surface */
|
// Wrap door verts around -Z to build surface
|
||||||
|
auto& doorVerts = skDoorVerts;
|
||||||
doorVerts[0].assign(-centerF[2], -centerF[1], 0.f);
|
doorVerts[0].assign(-centerF[2], -centerF[1], 0.f);
|
||||||
doorVerts[1].assign(-centerF[2], -centerF[1], 2.f * centerF[0]);
|
doorVerts[1].assign(-centerF[2], -centerF[1], 2.f * centerF[0]);
|
||||||
doorVerts[2].assign(-centerF[2], centerF[1], 0.f);
|
doorVerts[2].assign(-centerF[2], centerF[1], 0.f);
|
||||||
|
@ -252,8 +255,8 @@ void CMappableObject::ReadAutoMapperTweaks(const ITweakAutoMapper& tweaks) {
|
||||||
doorVerts[7].assign(.2f * -centerF[2], centerF[1], 2.f * centerF[0]);
|
doorVerts[7].assign(.2f * -centerF[2], centerF[1], 2.f * centerF[0]);
|
||||||
|
|
||||||
CGraphics::CommitResources([](boo::IGraphicsDataFactory::Context& ctx) {
|
CGraphics::CommitResources([](boo::IGraphicsDataFactory::Context& ctx) {
|
||||||
g_doorVbo = ctx.newStaticBuffer(boo::BufferUse::Vertex, skDoorVerts, 16, 8);
|
g_doorVbo = ctx.newStaticBuffer(boo::BufferUse::Vertex, skDoorVerts.data(), 16, skDoorVerts.size());
|
||||||
g_doorIbo = ctx.newStaticBuffer(boo::BufferUse::Index, DoorIndices, 4, 24);
|
g_doorIbo = ctx.newStaticBuffer(boo::BufferUse::Index, DoorIndices.data, 4, DoorIndices.size());
|
||||||
return true;
|
return true;
|
||||||
} BooTrace);
|
} BooTrace);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <array>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
|
@ -52,7 +53,7 @@ public:
|
||||||
enum class EVisMode { Always, MapStationOrVisit, Visit, Never, MapStationOrVisit2 };
|
enum class EVisMode { Always, MapStationOrVisit, Visit, Never, MapStationOrVisit2 };
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static zeus::CVector3f skDoorVerts[8];
|
static std::array<zeus::CVector3f, 8> skDoorVerts;
|
||||||
|
|
||||||
EMappableObjectType x0_type;
|
EMappableObjectType x0_type;
|
||||||
EVisMode x4_visibilityMode;
|
EVisMode x4_visibilityMode;
|
||||||
|
|
Loading…
Reference in New Issue