CSnakeWeedSwarm: Fix lighting

This commit is contained in:
Luke Street 2020-03-01 03:05:16 -05:00
parent 17b9813b3e
commit 12393d4c4d
2 changed files with 17 additions and 18 deletions

View File

@ -104,11 +104,11 @@ void CSnakeWeedSwarm::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId id, CS
void CSnakeWeedSwarm::PreRender(CStateManager& mgr, const zeus::CFrustum& frustum) { void CSnakeWeedSwarm::PreRender(CStateManager& mgr, const zeus::CFrustum& frustum) {
if (!frustum.aabbFrustumTest(x144_touchBounds)) { if (!frustum.aabbFrustumTest(x144_touchBounds)) {
SetCalculateLighting(true); xe4_30_outOfFrustum = true;
return; return;
} }
SetCalculateLighting(false); xe4_30_outOfFrustum = false;
for (const auto& modelData : x1b0_modelData) { for (const auto& modelData : x1b0_modelData) {
modelData->GetAnimationData()->PreRender(); modelData->GetAnimationData()->PreRender();
} }
@ -225,16 +225,16 @@ void CSnakeWeedSwarm::Think(float dt, CStateManager& mgr) {
int raisedBoids = 0; int raisedBoids = 0;
for (auto& boid : x134_boids) { for (auto& boid : x134_boids) {
const zeus::CVector3f& pos = boid.GetPosition(); const zeus::CVector3f& pos = boid.GetPosition();
EBoidState state = boid.GetState(); const EBoidState state = boid.GetState();
if (state == EBoidState::Raised) { if (state == EBoidState::Raised) {
raisedBoids++; raisedBoids++;
if (x1f4_particleGen2 && emitParticle) { if (x1f4_particleGen2 && emitParticle) {
EmitParticles2(pos); EmitParticles2(pos);
} }
} else if (state == EBoidState::Raising) { } else if (state == EBoidState::Raising) {
boid.Set_x14(boid.Get_x14() - dt * boid.Get_x18()); boid.SetYOffset(boid.GetYOffset() - dt * boid.Get_x18());
if (boid.Get_x14() <= 0.f) { if (boid.GetYOffset() <= 0.f) {
boid.Set_x14(0.f); boid.SetYOffset(0.f);
boid.SetState(EBoidState::Raised); boid.SetState(EBoidState::Raised);
} }
} else if (state == EBoidState::x2) { } else if (state == EBoidState::x2) {
@ -245,12 +245,11 @@ void CSnakeWeedSwarm::Think(float dt, CStateManager& mgr) {
EmitParticles1(pos); EmitParticles1(pos);
} }
} else if (state == EBoidState::x3) { } else if (state == EBoidState::x3) {
boid.Set_x14(dt * boid.Get_x18() + boid.Get_x14()); boid.SetYOffset(dt * boid.Get_x18() + boid.GetYOffset());
float max = x110_ * boid.Get_x20(); const float max = x110_ * boid.Get_x20();
if (boid.Get_x14() >= max) { if (boid.GetYOffset() >= max) {
boid.Set_x14(max); boid.SetYOffset(max);
float random = mgr.GetActiveRandom()->Float(); boid.Set_x10(x10c_ * mgr.GetActiveRandom()->Float() + x108_);
boid.Set_x10(x10c_ * random + x108_);
boid.SetState(EBoidState::x2); boid.SetState(EBoidState::x2);
} }
} }
@ -412,7 +411,7 @@ void CSnakeWeedSwarm::RenderBoid(u32 idx, const CBoid& boid, u32& posesToBuild)
model.Calculate(modelData->GetAnimationData()->GetPose(), useFlags, {}, nullptr); model.Calculate(modelData->GetAnimationData()->GetPose(), useFlags, {}, nullptr);
} }
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.GetYOffset())) *
zeus::CTransform::Scale(boid.Get_x20()); zeus::CTransform::Scale(boid.Get_x20());
CGraphics::SetModelMatrix(xf); CGraphics::SetModelMatrix(xf);
modelData->GetAnimationData()->Render(model, useFlags, {}, nullptr); modelData->GetAnimationData()->Render(model, useFlags, {}, nullptr);

View File

@ -28,24 +28,24 @@ public:
zeus::CVector3f x0_pos; zeus::CVector3f x0_pos;
EBoidState xc_state; EBoidState xc_state;
float x10_ = 0.f; // some timer float x10_ = 0.f; // some timer
float x14_; // height? float x14_yOffset;
float x18_; float x18_;
float x1c_ = 0.f; float x1c_ = 0.f;
float x20_; float x20_;
public: public:
constexpr CBoid(const zeus::CVector3f& pos, float f1, float f2, float f3) constexpr CBoid(const zeus::CVector3f& pos, float f1, float f2, float f3)
: x0_pos(pos), xc_state(EBoidState::Raising), x14_(f1), x18_(f2), x20_(f3) {} : x0_pos(pos), xc_state(EBoidState::Raising), x14_yOffset(f1), x18_(f2), x20_(f3) {}
constexpr const zeus::CVector3f& GetPosition() const { return x0_pos; } constexpr const zeus::CVector3f& GetPosition() const { return x0_pos; }
constexpr EBoidState GetState() const { return xc_state; } constexpr EBoidState GetState() const { return xc_state; }
constexpr float Get_x10() const { return x10_; } constexpr float Get_x10() const { return x10_; }
constexpr float Get_x14() const { return x14_; } constexpr float GetYOffset() const { return x14_yOffset; }
constexpr float Get_x18() const { return x18_; } constexpr float Get_x18() const { return x18_; }
constexpr float Get_x20() const { return x20_; } constexpr float Get_x20() const { return x20_; }
void SetState(EBoidState v) { xc_state = v; fmt::print(fmt("Setting boid state {}"), v); } constexpr void SetState(EBoidState v) { xc_state = v; }
constexpr void Set_x10(float v) { x10_ = v; } constexpr void Set_x10(float v) { x10_ = v; }
constexpr void Set_x14(float v) { x14_ = v; } constexpr void SetYOffset(float v) { x14_yOffset = v; }
constexpr void Set_x18(float v) { x18_ = v; } constexpr void Set_x18(float v) { x18_ = v; }
}; };