2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-12-11 08:27:43 +00:00

Fix an insane number of things with hsh refactoring

This commit is contained in:
2020-10-07 20:03:07 -04:00
parent 3c9816af12
commit 036e769210
41 changed files with 255 additions and 198 deletions

View File

@@ -8,7 +8,7 @@
#include "Runtime/Graphics/CTexture.hpp"
namespace urde {
std::array<CMappableObject::Vert, 8> CMappableObject::skDoorVerts{};
std::array<CMapSurfaceShader::Vert, 8> CMappableObject::skDoorVerts{};
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,
@@ -118,10 +118,10 @@ void CMappableObject::Draw(int curArea, const CMapWorldInfo& mwInfo, float alpha
CLineRenderer& line = ds.m_outline;
const u32* baseIdx = &DoorIndices[s * 4];
line.Reset();
line.AddVertex(skDoorVerts[baseIdx[0]].m_pos, colors.second, 1.f);
line.AddVertex(skDoorVerts[baseIdx[1]].m_pos, colors.second, 1.f);
line.AddVertex(skDoorVerts[baseIdx[3]].m_pos, colors.second, 1.f);
line.AddVertex(skDoorVerts[baseIdx[2]].m_pos, colors.second, 1.f);
line.AddVertex(skDoorVerts[baseIdx[0]].pos, colors.second, 1.f);
line.AddVertex(skDoorVerts[baseIdx[1]].pos, colors.second, 1.f);
line.AddVertex(skDoorVerts[baseIdx[3]].pos, colors.second, 1.f);
line.AddVertex(skDoorVerts[baseIdx[2]].pos, colors.second, 1.f);
line.Render();
}
} else {
@@ -188,10 +188,10 @@ void CMappableObject::DrawDoorSurface(int curArea, const CMapWorldInfo& mwInfo,
CLineRenderer& line = ds.m_outline;
const u32* baseIdx = &DoorIndices[surfIdx * 4];
line.Reset();
line.AddVertex(skDoorVerts[baseIdx[0]].m_pos, colors.second, 1.f);
line.AddVertex(skDoorVerts[baseIdx[1]].m_pos, colors.second, 1.f);
line.AddVertex(skDoorVerts[baseIdx[3]].m_pos, colors.second, 1.f);
line.AddVertex(skDoorVerts[baseIdx[2]].m_pos, colors.second, 1.f);
line.AddVertex(skDoorVerts[baseIdx[0]].pos, colors.second, 1.f);
line.AddVertex(skDoorVerts[baseIdx[1]].pos, colors.second, 1.f);
line.AddVertex(skDoorVerts[baseIdx[3]].pos, colors.second, 1.f);
line.AddVertex(skDoorVerts[baseIdx[2]].pos, colors.second, 1.f);
line.Render();
}
@@ -236,7 +236,7 @@ bool CMappableObject::IsVisibleToAutoMapper(bool worldVis, const CMapWorldInfo&
}
}
hsh::owner<hsh::vertex_buffer<CMappableObject::Vert>> CMappableObject::g_doorVbo;
hsh::owner<hsh::vertex_buffer<CMapSurfaceShader::Vert>> CMappableObject::g_doorVbo;
hsh::owner<hsh::index_buffer<u32>> CMappableObject::g_doorIbo;
void CMappableObject::ReadAutoMapperTweaks(const ITweakAutoMapper& tweaks) {
@@ -245,14 +245,14 @@ void CMappableObject::ReadAutoMapperTweaks(const ITweakAutoMapper& tweaks) {
// Wrap door verts around -Z to build surface
auto& doorVerts = skDoorVerts;
doorVerts[0].assign(-centerF[2], -centerF[1], 0.f);
doorVerts[1].assign(-centerF[2], -centerF[1], 2.f * centerF[0]);
doorVerts[2].assign(-centerF[2], centerF[1], 0.f);
doorVerts[3].assign(-centerF[2], centerF[1], 2.f * centerF[0]);
doorVerts[4].assign(.2f * -centerF[2], -centerF[1], 0.f);
doorVerts[5].assign(.2f * -centerF[2], -centerF[1], 2.f * centerF[0]);
doorVerts[6].assign(.2f * -centerF[2], centerF[1], 0.f);
doorVerts[7].assign(.2f * -centerF[2], centerF[1], 2.f * centerF[0]);
doorVerts[0] = {-centerF[2], -centerF[1], 0.f};
doorVerts[1] = {-centerF[2], -centerF[1], 2.f * centerF[0]};
doorVerts[2] = {-centerF[2], centerF[1], 0.f};
doorVerts[3] = {-centerF[2], centerF[1], 2.f * centerF[0]};
doorVerts[4] = {.2f * -centerF[2], -centerF[1], 0.f};
doorVerts[5] = {.2f * -centerF[2], -centerF[1], 2.f * centerF[0]};
doorVerts[6] = {.2f * -centerF[2], centerF[1], 0.f};
doorVerts[7] = {.2f * -centerF[2], centerF[1], 2.f * centerF[0]};
g_doorVbo = hsh::create_vertex_buffer(skDoorVerts);
g_doorIbo = hsh::create_index_buffer(DoorIndices);

View File

@@ -19,13 +19,7 @@ class CStateManager;
class CMappableObject {
public:
struct Vert {
hsh::float3 m_pos;
void assign(float x, float y, float z) {
m_pos = hsh::float3(x, y, z);
}
};
static hsh::owner<hsh::vertex_buffer<Vert>> g_doorVbo;
static hsh::owner<hsh::vertex_buffer<CMapSurfaceShader::Vert>> g_doorVbo;
static hsh::owner<hsh::index_buffer<u32>> g_doorIbo;
enum class EMappableObjectType {
@@ -59,7 +53,7 @@ public:
enum class EVisMode { Always, MapStationOrVisit, Visit, Never, MapStationOrVisit2 };
private:
static std::array<CMappableObject::Vert, 8> skDoorVerts;
static std::array<CMapSurfaceShader::Vert, 8> skDoorVerts;
EMappableObjectType x0_type;
EVisMode x4_visibilityMode;