2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-12-08 23:47:42 +00:00

More particle bug fixes

This commit is contained in:
Jack Andersen
2018-05-13 13:27:47 -10:00
parent faf0ac7d27
commit 9130b9459a
10 changed files with 148 additions and 70 deletions

View File

@@ -3,6 +3,9 @@
#include "World/CLightParameters.hpp"
#include "GameGlobalObjects.hpp"
#include "Graphics/CBooRenderer.hpp"
#include "CStateManager.hpp"
#include "Character/CAssetFactory.hpp"
#include "Character/CCharacterFactory.hpp"
namespace urde
{
@@ -10,12 +13,13 @@ CScriptPlayerActor::CScriptPlayerActor(TUniqueId uid, std::string_view name, con
const zeus::CTransform& xf, const CAnimRes& animRes, CModelData&& mData,
const zeus::CAABox& aabox, bool b1, const CMaterialList& list, float mass,
float zMomentum, const CHealthInfo& hInfo, const CDamageVulnerability& dVuln,
const CActorParameters& aParams, bool loop, bool active, u32 w1, u32 w2)
const CActorParameters& aParams, bool loop, bool active, u32 flags,
CPlayerState::EBeamId beam)
: CScriptActor(uid, name, info, xf, std::move(mData), aabox, mass, zMomentum, list, hInfo, dVuln, aParams, loop, active,
0, 1.f, false, false, false, false)
, x2e8_(animRes)
, x304_(w2)
, x350_(w1)
, x2e8_suitRes(animRes)
, x304_beam(beam)
, x350_flags(flags)
{
x354_24_ = b1;
x354_29_ = true;
@@ -30,11 +34,73 @@ CScriptPlayerActor::CScriptPlayerActor(TUniqueId uid, std::string_view name, con
x2e3_24_cameraMoveIntoAlpha = true;
}
void CScriptPlayerActor::Think(float, CStateManager&)
u32 CScriptPlayerActor::GetSuitCharIdx(const CStateManager& mgr, CPlayerState::EPlayerSuit suit) const
{
if (mgr.GetPlayerState()->IsFusionEnabled())
{
switch (suit)
{
case CPlayerState::EPlayerSuit::Power:
return 4;
case CPlayerState::EPlayerSuit::Varia:
return 7;
case CPlayerState::EPlayerSuit::Gravity:
return 6;
case CPlayerState::EPlayerSuit::Phazon:
return 8;
default:
break;
}
}
return u32(suit);
}
void CScriptPlayerActor::LoadSuit(u32 charIdx)
{
if (charIdx != x310_loadedCharIdx)
{
TToken<CCharacterFactory> fac = g_CharFactoryBuilder->GetFactory(x2e8_suitRes);
const CCharacterInfo& chInfo = fac->GetCharInfo(charIdx);
x324_suitModel = g_SimplePool->GetObj({FOURCC('CMDL'), chInfo.GetModelId()});
x354_28_ = true;
x310_loadedCharIdx = charIdx;
}
}
void CScriptPlayerActor::LoadBeam(CPlayerState::EBeamId beam)
{
}
void CScriptPlayerActor::Think(float dt, CStateManager& mgr)
{
auto& pState = *mgr.GetPlayerState();
if (x354_31_)
{
x354_25_ = true;
x354_31_ = false;
x308_suit = pState.GetCurrentSuitRaw();
LoadSuit(GetSuitCharIdx(mgr, x308_suit));
}
if (x354_30_)
{
if (!(x350_flags & 0x1))
{
u32 tmpIdx = GetSuitCharIdx(mgr, pState.GetCurrentSuitRaw());
if (tmpIdx != x310_loadedCharIdx)
{
SetModelData(std::make_unique<CModelData>(CModelData::CModelDataNull()));
LoadSuit(tmpIdx);
x354_25_ = true;
}
}
LoadBeam(x304_beam != CPlayerState::EBeamId::Invalid ? x304_beam : pState.GetCurrentBeam());
}
}
void CScriptPlayerActor::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CStateManager& mgr)
{
}
@@ -47,7 +113,7 @@ void CScriptPlayerActor::SetActive(bool active)
void CScriptPlayerActor::PreRender(CStateManager& mgr, const zeus::CFrustum& frustum)
{
if (x2e8_.GetCharacterNodeId() == 3)
if (x2e8_suitRes.GetCharacterNodeId() == 3)
g_Renderer->AllocatePhazonSuitMaskTexture();
CScriptActor::PreRender(mgr, frustum);
}