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:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user