mirror of https://github.com/AxioDL/metaforce.git
CSnakeWeedSwarm: Initialize bitfields; some more cleanup
This commit is contained in:
parent
046fbe7760
commit
f064bc2f7b
|
@ -15,8 +15,7 @@
|
||||||
|
|
||||||
namespace urde {
|
namespace urde {
|
||||||
|
|
||||||
static CMaterialFilter matFilter =
|
static constexpr CMaterialFilter matFilter = CMaterialFilter::MakeInclude({EMaterialTypes::Solid});
|
||||||
CMaterialFilter::MakeInclude(CMaterialList(EMaterialTypes::Solid, EMaterialTypes::Character));
|
|
||||||
|
|
||||||
CSnakeWeedSwarm::CSnakeWeedSwarm(TUniqueId uid, bool active, std::string_view name, const CEntityInfo& info,
|
CSnakeWeedSwarm::CSnakeWeedSwarm(TUniqueId uid, bool active, std::string_view name, const CEntityInfo& info,
|
||||||
const zeus::CVector3f& pos, const zeus::CVector3f& scale, const CAnimRes& animRes,
|
const zeus::CVector3f& pos, const zeus::CVector3f& scale, const CAnimRes& animRes,
|
||||||
|
@ -41,6 +40,9 @@ CSnakeWeedSwarm::CSnakeWeedSwarm(TUniqueId uid, bool active, std::string_view na
|
||||||
, x120_(f12)
|
, x120_(f12)
|
||||||
, x124_(f13)
|
, x124_(f13)
|
||||||
, x128_(f14)
|
, x128_(f14)
|
||||||
|
, x140_24_hasGround(false)
|
||||||
|
, x140_25_modelAssetDirty(false)
|
||||||
|
, x140_26_playerTouching(false)
|
||||||
, x15c_damageInfo(dInfo)
|
, x15c_damageInfo(dInfo)
|
||||||
, x1c8_boidPositions(std::make_unique<std::vector<zeus::CVector3f>>())
|
, x1c8_boidPositions(std::make_unique<std::vector<zeus::CVector3f>>())
|
||||||
, x1cc_boidPlacement(std::make_unique<std::vector<EBoidPlacement>>())
|
, x1cc_boidPlacement(std::make_unique<std::vector<EBoidPlacement>>())
|
||||||
|
@ -153,7 +155,7 @@ void CSnakeWeedSwarm::AddToRenderer(const zeus::CFrustum& frustum, const CStateM
|
||||||
|
|
||||||
u32 posesToBuild = -1;
|
u32 posesToBuild = -1;
|
||||||
for (u32 i = 0; i < x134_boids.size(); ++i)
|
for (u32 i = 0; i < x134_boids.size(); ++i)
|
||||||
RenderBoid(i, &x134_boids[i], posesToBuild);
|
RenderBoid(i, x134_boids[i], posesToBuild);
|
||||||
CGraphics::DisableAllLights();
|
CGraphics::DisableAllLights();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -208,7 +210,7 @@ void CSnakeWeedSwarm::Think(float dt, CStateManager& mgr) {
|
||||||
if (!x140_24_hasGround)
|
if (!x140_24_hasGround)
|
||||||
FindGround(mgr);
|
FindGround(mgr);
|
||||||
if (x140_24_hasGround && x1c8_boidPositions && !x1c8_boidPositions->empty()) {
|
if (x140_24_hasGround && x1c8_boidPositions && !x1c8_boidPositions->empty()) {
|
||||||
int n = (u64)(dt * x1cc_boidPlacement->size()) >> 0x20; // TODO ?
|
int n = (u64)(dt * x1cc_boidPlacement->size()) >> 0x20;
|
||||||
CreateBoids(mgr, n + 1);
|
CreateBoids(mgr, n + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -352,12 +354,12 @@ bool CSnakeWeedSwarm::CreateBoid(const zeus::CVector3f& vec, CStateManager& mgr)
|
||||||
|
|
||||||
float CSnakeWeedSwarm::GetBoidOffsetY(const zeus::CVector3f& pos) {
|
float CSnakeWeedSwarm::GetBoidOffsetY(const zeus::CVector3f& pos) {
|
||||||
float f = 2.4729404f * pos.y() + 0.3478602f * pos.x() * pos.x();
|
float f = 2.4729404f * pos.y() + 0.3478602f * pos.x() * pos.x();
|
||||||
return xfc_ * (2.f * std::abs(f - (int)f) - 1.f);
|
return xfc_ * (2.f * std::abs(f - std::trunc(f)) - 1.f);
|
||||||
}
|
}
|
||||||
|
|
||||||
float CSnakeWeedSwarm::GetBoidOffsetX(const zeus::CVector3f& pos) {
|
float CSnakeWeedSwarm::GetBoidOffsetX(const zeus::CVector3f& pos) {
|
||||||
float f = 8.21395f * pos.x() + 0.112869f * pos.y() * pos.y();
|
float f = 8.21395f * pos.x() + 0.112869f * pos.y() * pos.y();
|
||||||
return xfc_ * (2.f * std::abs(f - (int)f) - 1.f);
|
return xfc_ * (2.f * std::abs(f - std::trunc(f)) - 1.f);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSnakeWeedSwarm::AddBoidPosition(const zeus::CVector3f& pos) {
|
void CSnakeWeedSwarm::AddBoidPosition(const zeus::CVector3f& pos) {
|
||||||
|
@ -406,20 +408,20 @@ void CSnakeWeedSwarm::EmitParticles2(const zeus::CVector3f& pos) {
|
||||||
x1f4_particleGen2->SetParticleEmission(false);
|
x1f4_particleGen2->SetParticleEmission(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSnakeWeedSwarm::RenderBoid(u32 p1, const CBoid* boid, u32& posesToBuild) const {
|
void CSnakeWeedSwarm::RenderBoid(u32 idx, const CBoid& boid, u32& posesToBuild) const {
|
||||||
u32 modelIdx = p1 & 3;
|
const u32 modelIdx = idx & 3;
|
||||||
auto modelData = x1b0_modelData[modelIdx];
|
auto modelData = x1b0_modelData[modelIdx];
|
||||||
CSkinnedModel& model = modelData->PickAnimatedModel(x1c4_which);
|
CSkinnedModel& model = modelData->PickAnimatedModel(x1c4_which);
|
||||||
CModelFlags useFlags(0, 0, 3, zeus::skWhite);
|
const CModelFlags useFlags(0, 0, 3, zeus::skWhite);
|
||||||
if ((posesToBuild & 1 << modelIdx) != 0) {
|
if (posesToBuild & 1 << modelIdx) {
|
||||||
posesToBuild &= ~(1 << modelIdx);
|
posesToBuild &= ~(1 << modelIdx);
|
||||||
modelData->GetAnimationData()->BuildPose();
|
modelData->GetAnimationData()->BuildPose();
|
||||||
model.Calculate(modelData->GetAnimationData()->GetPose(), useFlags, {}, nullptr);
|
model.Calculate(modelData->GetAnimationData()->GetPose(), useFlags, {}, nullptr);
|
||||||
}
|
}
|
||||||
// printf("rendering boid with x14 %f\n", boid->Get_x14());
|
// printf("rendering boid with x14 %f\n", boid->Get_x14());
|
||||||
const zeus::CTransform& xf =
|
const zeus::CTransform& xf =
|
||||||
zeus::CTransform::Translate(boid->GetPosition() /*- zeus::CVector3f(0.f, 0.f, boid->Get_x14())*/) *
|
zeus::CTransform::Translate(boid.GetPosition() /*- zeus::CVector3f(0.f, 0.f, boid.Get_x14())*/) *
|
||||||
zeus::CTransform::Scale(boid->Get_x20());
|
zeus::CTransform::Scale(boid.Get_x20());
|
||||||
g_Renderer->SetModelMatrix(xf);
|
g_Renderer->SetModelMatrix(xf);
|
||||||
model.Draw(useFlags);
|
model.Draw(useFlags);
|
||||||
}
|
}
|
||||||
|
@ -433,7 +435,7 @@ void CSnakeWeedSwarm::ApplyRadiusDamage(const zeus::CVector3f& pos, const CDamag
|
||||||
std::optional<zeus::CAABox> CSnakeWeedSwarm::GetTouchBounds() const {
|
std::optional<zeus::CAABox> CSnakeWeedSwarm::GetTouchBounds() const {
|
||||||
if (x140_24_hasGround)
|
if (x140_24_hasGround)
|
||||||
return x144_touchBounds;
|
return x144_touchBounds;
|
||||||
return {};
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace urde
|
} // namespace urde
|
||||||
|
|
|
@ -72,7 +72,7 @@ private:
|
||||||
bool x140_26_playerTouching : 1;
|
bool x140_26_playerTouching : 1;
|
||||||
zeus::CAABox x144_touchBounds = zeus::skInvertedBox;
|
zeus::CAABox x144_touchBounds = zeus::skInvertedBox;
|
||||||
CDamageInfo x15c_damageInfo;
|
CDamageInfo x15c_damageInfo;
|
||||||
// x178_ / x19c_: vectors of CSkinnedModel, not needed
|
// x178_ / x19c_: vectors of CSkinnedModel*, not needed
|
||||||
rstl::reserved_vector<std::shared_ptr<CModelData>, 4> x1b0_modelData;
|
rstl::reserved_vector<std::shared_ptr<CModelData>, 4> x1b0_modelData;
|
||||||
CModelData::EWhichModel x1c4_which;
|
CModelData::EWhichModel x1c4_which;
|
||||||
std::unique_ptr<std::vector<zeus::CVector3f>> x1c8_boidPositions;
|
std::unique_ptr<std::vector<zeus::CVector3f>> x1c8_boidPositions;
|
||||||
|
@ -120,6 +120,6 @@ private:
|
||||||
void CalculateTouchBounds();
|
void CalculateTouchBounds();
|
||||||
void EmitParticles1(const zeus::CVector3f& pos);
|
void EmitParticles1(const zeus::CVector3f& pos);
|
||||||
void EmitParticles2(const zeus::CVector3f& pos);
|
void EmitParticles2(const zeus::CVector3f& pos);
|
||||||
void RenderBoid(u32 p1, const CBoid* boid, u32& posesToBuild) const;
|
void RenderBoid(u32 idx, const CBoid& boid, u32& posesToBuild) const;
|
||||||
};
|
};
|
||||||
} // namespace urde
|
} // namespace urde
|
||||||
|
|
Loading…
Reference in New Issue