mirror of https://github.com/PrimeDecomp/prime.git
Add almost matching CFaceplateDecoration
This commit is contained in:
parent
0254fd4f68
commit
0a0483489c
|
@ -236,7 +236,7 @@ LIBS = [
|
||||||
["MetroidPrime/ScriptObjects/CScriptSteam", False],
|
["MetroidPrime/ScriptObjects/CScriptSteam", False],
|
||||||
["MetroidPrime/ScriptObjects/CScriptRipple", False],
|
["MetroidPrime/ScriptObjects/CScriptRipple", False],
|
||||||
"MetroidPrime/CBoneTracking",
|
"MetroidPrime/CBoneTracking",
|
||||||
"MetroidPrime/Player/CFaceplateDecoration",
|
["MetroidPrime/Player/CFaceplateDecoration", False],
|
||||||
"MetroidPrime/BodyState/CBSCover",
|
"MetroidPrime/BodyState/CBSCover",
|
||||||
"MetroidPrime/ScriptObjects/CScriptBallTrigger",
|
"MetroidPrime/ScriptObjects/CScriptBallTrigger",
|
||||||
"MetroidPrime/Weapons/CPlasmaProjectile",
|
"MetroidPrime/Weapons/CPlasmaProjectile",
|
||||||
|
|
|
@ -26,6 +26,8 @@ public:
|
||||||
mA = a;
|
mA = a;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CColor(CColor rgb, float a) : mRgba((rgb.GetColor_u32() & 0xffffff00) | CCast::ToUint8(a * 255.f)) {}
|
||||||
|
|
||||||
void Set(float r, float g, float b, float a);
|
void Set(float r, float g, float b, float a);
|
||||||
void Set(uchar r, uchar g, uchar b, uchar a = 255) {
|
void Set(uchar r, uchar g, uchar b, uchar a = 255) {
|
||||||
mR = r;
|
mR = r;
|
||||||
|
|
|
@ -43,6 +43,7 @@ public:
|
||||||
void DisableFilter(float time);
|
void DisableFilter(float time);
|
||||||
|
|
||||||
static void DrawWideScreen(const CColor& color, const CTexture* tex, float v);
|
static void DrawWideScreen(const CColor& color, const CTexture* tex, float v);
|
||||||
|
static void DrawFilter(EFilterType type, EFilterShape shape, const CColor& color, const CTexture* tex, float lod);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
EFilterType x0_curType;
|
EFilterType x0_curType;
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
#ifndef _CFACEPLATEDECORATION
|
||||||
|
#define _CFACEPLATEDECORATION
|
||||||
|
|
||||||
|
#include "Kyoto/TToken.hpp"
|
||||||
|
|
||||||
|
#include "rstl/optional_object.hpp"
|
||||||
|
|
||||||
|
class CTexture;
|
||||||
|
class CStateManager;
|
||||||
|
|
||||||
|
class CFaceplateDecoration {
|
||||||
|
CAssetId x0_id;
|
||||||
|
rstl::optional_object< TToken< CTexture > > x4_tex;
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit CFaceplateDecoration(CStateManager& stateMgr);
|
||||||
|
void Update(float dt, const CStateManager& stateMgr);
|
||||||
|
void Draw(const CStateManager& stateMgr) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _CFACEPLATEDECORATION
|
|
@ -29,6 +29,32 @@ enum EPlayerMovementState {
|
||||||
};
|
};
|
||||||
|
|
||||||
class CPlayer : public CPhysicsActor {
|
class CPlayer : public CPhysicsActor {
|
||||||
|
struct CVisorSteam {
|
||||||
|
float x0_curTargetAlpha;
|
||||||
|
float x4_curAlphaInDur;
|
||||||
|
float x8_curAlphaOutDur;
|
||||||
|
CAssetId xc_tex;
|
||||||
|
float x10_nextTargetAlpha;
|
||||||
|
float x14_nextAlphaInDur;
|
||||||
|
float x18_nextAlphaOutDur;
|
||||||
|
CAssetId x1c_txtr;
|
||||||
|
float x20_alpha;
|
||||||
|
float x24_delayTimer;
|
||||||
|
bool x28_affectsThermal;
|
||||||
|
|
||||||
|
public:
|
||||||
|
CVisorSteam(float targetAlpha, float alphaInDur, float alphaOutDur, CAssetId tex)
|
||||||
|
: x0_curTargetAlpha(targetAlpha)
|
||||||
|
, x4_curAlphaInDur(alphaInDur)
|
||||||
|
, x8_curAlphaOutDur(alphaOutDur)
|
||||||
|
, xc_tex(tex) {}
|
||||||
|
CAssetId GetTextureId() const { return xc_tex; }
|
||||||
|
void SetSteam(float targetAlpha, float alphaInDur, float alphaOutDur, CAssetId txtr,
|
||||||
|
bool affectsThermal);
|
||||||
|
void Update(float dt);
|
||||||
|
float GetAlpha() const { return x20_alpha; }
|
||||||
|
bool AffectsThermal() const { return x28_affectsThermal; }
|
||||||
|
};
|
||||||
public:
|
public:
|
||||||
enum EPlayerOrbitState {
|
enum EPlayerOrbitState {
|
||||||
kOS_NoOrbit,
|
kOS_NoOrbit,
|
||||||
|
@ -188,6 +214,7 @@ public:
|
||||||
|
|
||||||
void Teleport(const CTransform4f& xf, CStateManager& mgr, bool resetBallCam);
|
void Teleport(const CTransform4f& xf, CStateManager& mgr, bool resetBallCam);
|
||||||
void SetSpawnedMorphBallState(EPlayerMorphBallState state, CStateManager& mgr);
|
void SetSpawnedMorphBallState(EPlayerMorphBallState state, CStateManager& mgr);
|
||||||
|
const CVisorSteam& GetVisorSteam() const { return x7a0_visorSteam; }
|
||||||
void SetVisorSteam(float targetAlpha, float alphaInDur, float alphaOutDir, CAssetId txtr, bool affectsThermal);
|
void SetVisorSteam(float targetAlpha, float alphaInDur, float alphaOutDir, CAssetId txtr, bool affectsThermal);
|
||||||
|
|
||||||
CVector3f GetDampedClampedVelocityWR() const;
|
CVector3f GetDampedClampedVelocityWR() const;
|
||||||
|
@ -195,32 +222,6 @@ public:
|
||||||
float GetGravity() const;
|
float GetGravity() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct CVisorSteam {
|
|
||||||
float x0_curTargetAlpha;
|
|
||||||
float x4_curAlphaInDur;
|
|
||||||
float x8_curAlphaOutDur;
|
|
||||||
CAssetId xc_tex;
|
|
||||||
float x10_nextTargetAlpha;
|
|
||||||
float x14_nextAlphaInDur;
|
|
||||||
float x18_nextAlphaOutDur;
|
|
||||||
CAssetId x1c_txtr;
|
|
||||||
float x20_alpha;
|
|
||||||
float x24_delayTimer;
|
|
||||||
bool x28_affectsThermal;
|
|
||||||
|
|
||||||
public:
|
|
||||||
CVisorSteam(float targetAlpha, float alphaInDur, float alphaOutDur, CAssetId tex)
|
|
||||||
: x0_curTargetAlpha(targetAlpha)
|
|
||||||
, x4_curAlphaInDur(alphaInDur)
|
|
||||||
, x8_curAlphaOutDur(alphaOutDur)
|
|
||||||
, xc_tex(tex) {}
|
|
||||||
CAssetId GetTextureId() const;
|
|
||||||
void SetSteam(float targetAlpha, float alphaInDur, float alphaOutDur, CAssetId txtr,
|
|
||||||
bool affectsThermal);
|
|
||||||
void Update(float dt);
|
|
||||||
float GetAlpha() const { return x20_alpha; }
|
|
||||||
bool AffectsThermal() const { return x28_affectsThermal; }
|
|
||||||
};
|
|
||||||
|
|
||||||
NPlayer::EPlayerMovementState x258_movementState;
|
NPlayer::EPlayerMovementState x258_movementState;
|
||||||
rstl::vector< CToken > x25c_ballTransitionsRes;
|
rstl::vector< CToken > x25c_ballTransitionsRes;
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
#include "MetroidPrime/Player/CFaceplateDecoration.hpp"
|
||||||
|
|
||||||
|
#include "MetroidPrime/CStateManager.hpp"
|
||||||
|
#include "MetroidPrime/Player/CPlayer.hpp"
|
||||||
|
|
||||||
|
#include "Kyoto/Math/CloseEnough.hpp"
|
||||||
|
#include "Kyoto/SObjectTag.hpp"
|
||||||
|
|
||||||
|
CFaceplateDecoration::CFaceplateDecoration(CStateManager& stateMgr) : x0_id(kInvalidAssetId) {}
|
||||||
|
|
||||||
|
void CFaceplateDecoration::Update(float dt, const CStateManager& stateMgr) {
|
||||||
|
CAssetId txtrId = stateMgr.GetPlayer()->GetVisorSteam().GetTextureId();
|
||||||
|
if (txtrId == kInvalidAssetId && x4_tex.valid()) {
|
||||||
|
x4_tex->Unlock();
|
||||||
|
x0_id = txtrId;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (txtrId != x0_id && txtrId != kInvalidAssetId) {
|
||||||
|
x0_id = txtrId;
|
||||||
|
x4_tex = gpSimplePool->GetObj(SObjectTag('TXTR', x0_id));
|
||||||
|
if (x4_tex.valid()) {
|
||||||
|
x4_tex->Lock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CFaceplateDecoration::Draw(const CStateManager& stateMgr) const {
|
||||||
|
if (x4_tex.valid() && x4_tex->IsLoaded()) {
|
||||||
|
CTexture* texture = TToken< CTexture >(*x4_tex).GetT();
|
||||||
|
float alpha = stateMgr.GetPlayer()->GetVisorSteam().GetAlpha();
|
||||||
|
if (!close_enough(alpha, 0.f)) {
|
||||||
|
CColor color(CColor::White(), alpha);
|
||||||
|
CCameraFilterPass::DrawFilter(CCameraFilterPass::kFT_Blend,
|
||||||
|
CCameraFilterPass::kFS_FullscreenQuarters, color, texture, 1.f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,5 +5,7 @@ path=$1
|
||||||
|
|
||||||
sed -i "s/std::string_view/const rstl::string\&/g" "$path"
|
sed -i "s/std::string_view/const rstl::string\&/g" "$path"
|
||||||
sed -i "s/zeus::CTransform/CTransform4f/g" "$path"
|
sed -i "s/zeus::CTransform/CTransform4f/g" "$path"
|
||||||
|
sed -i "s/zeus::skPurple/CColor::Purple()/g" "$path"
|
||||||
|
sed -i "s/zeus::skWhite/CColor::White()/g" "$path"
|
||||||
sed -i "s/zeus:://g" "$path"
|
sed -i "s/zeus:://g" "$path"
|
||||||
sed -i "s/visitor.Visit(this)/visitor.Visit(*this)/g" "$path"
|
sed -i "s/visitor.Visit(this)/visitor.Visit(*this)/g" "$path"
|
||||||
|
|
Loading…
Reference in New Issue