Fixed corona appearing in wrong world position

This commit is contained in:
Boondorl 2024-12-31 23:31:27 -05:00 committed by Nash Muhandes
commit d3fe5a1946
2 changed files with 6 additions and 5 deletions

View file

@ -832,7 +832,7 @@ void HWDrawInfo::RenderPortal(HWPortal *p, FRenderState &state, bool usestencil)
}
void HWDrawInfo::DrawCorona(FRenderState& state, AActor* corona, float coronaFade, double dist)
void HWDrawInfo::DrawCorona(FRenderState& state, AActor* corona, float coronaFade, const DVector3& pos, double dist)
{
spriteframe_t* sprframe = &SpriteFrames[sprites[corona->sprite].spriteframes + (size_t)corona->SpawnState->GetFrame()];
FTextureID patch = sprframe->Texture[0];
@ -841,7 +841,7 @@ void HWDrawInfo::DrawCorona(FRenderState& state, AActor* corona, float coronaFad
if (!tex || !tex->isValid()) return;
// Project the corona sprite center
FVector4 worldPos((float)corona->X(), (float)corona->Z(), (float)corona->Y(), 1.0f);
FVector4 worldPos((float)pos.X, (float)pos.Z, (float)pos.Y, 1.0f);
FVector4 viewPos, clipPos;
VPUniforms.mViewMatrix.multMatrixPoint(&worldPos[0], &viewPos[0]);
VPUniforms.mProjectionMatrix.multMatrixPoint(&viewPos[0], &clipPos[0]);
@ -1045,7 +1045,8 @@ void HWDrawInfo::DrawCoronas(FRenderState& state)
for (AActor* corona : Coronas)
{
auto& coronaFade = corona->specialf1;
DVector3 direction = Viewpoint.Pos - corona->PosRelative(Viewpoint.sector);
DVector3 realPos = corona->PosRelative(Viewpoint.sector);
DVector3 direction = Viewpoint.Pos - realPos;
double dist = direction.Length();
// skip coronas that are too far
@ -1066,7 +1067,7 @@ void HWDrawInfo::DrawCoronas(FRenderState& state)
}
if (coronaFade > 0.0f)
DrawCorona(state, corona, (float)coronaFade, dist);
DrawCorona(state, corona, (float)coronaFade, realPos, dist);
}
state.AlphaFunc(Alpha_Greater, 0.f);

View file

@ -328,7 +328,7 @@ public:
void DrawDecals(FRenderState &state, TArray<HWDecal *> &decals);
void DrawPlayerSprites(bool hudModelStep, FRenderState &state);
void DrawCoronas(FRenderState& state);
void DrawCorona(FRenderState& state, AActor* corona, float coronaFade, double dist);
void DrawCorona(FRenderState& state, AActor* corona, float coronaFade, const DVector3& pos, double dist);
void SetDitherTransFlags(AActor* actor);