2016-02-13 09:02:47 +00:00
|
|
|
#ifndef __PSHAG_CPLAYERSTATE_HPP__
|
|
|
|
#define __PSHAG_CPLAYERSTATE_HPP__
|
2015-08-17 05:26:58 +00:00
|
|
|
|
2015-08-19 05:48:57 +00:00
|
|
|
#include "RetroTypes.hpp"
|
2015-08-20 02:52:07 +00:00
|
|
|
#include "CBasics.hpp"
|
2015-08-17 20:33:58 +00:00
|
|
|
#include "CStaticInterference.hpp"
|
2015-08-23 23:58:07 +00:00
|
|
|
#include "IOStreams.hpp"
|
2016-03-19 19:19:43 +00:00
|
|
|
#include "rstl.hpp"
|
2015-08-17 20:33:58 +00:00
|
|
|
|
2016-03-04 23:04:53 +00:00
|
|
|
namespace urde
|
2015-08-17 22:05:00 +00:00
|
|
|
{
|
|
|
|
|
2015-08-18 05:54:43 +00:00
|
|
|
class CPlayerState
|
2015-08-17 05:26:58 +00:00
|
|
|
{
|
2016-03-23 20:38:01 +00:00
|
|
|
public:
|
|
|
|
enum class EItemType : u32
|
|
|
|
{
|
|
|
|
PowerBeam,
|
|
|
|
IceBeam,
|
|
|
|
WaveBeam,
|
|
|
|
PlasmaBeam,
|
|
|
|
Missiles,
|
|
|
|
ScanVisor,
|
|
|
|
MorphBallBombs,
|
|
|
|
PowerBombs,
|
|
|
|
Flamethrower,
|
|
|
|
ThermalVisor,
|
|
|
|
ChargeBeam,
|
|
|
|
SuperMissile,
|
|
|
|
GrappleBeam,
|
|
|
|
XRayVisor,
|
|
|
|
IceSpreader,
|
|
|
|
SpaceJumpBoots,
|
|
|
|
MorphBall,
|
|
|
|
CombatVisor,
|
|
|
|
BoostBall,
|
|
|
|
SpiderBall,
|
|
|
|
PowerSuit,
|
|
|
|
GravitySuit,
|
|
|
|
VariaSuit,
|
|
|
|
PhazonSuit,
|
|
|
|
EnergyTanks,
|
|
|
|
UnknownItem1,
|
|
|
|
HealthRefill,
|
|
|
|
UnknownItem2,
|
|
|
|
Wavebuster,
|
|
|
|
ArtifactOfTruth,
|
|
|
|
ArtifactOfStrength,
|
|
|
|
ArtifactOfElder,
|
|
|
|
ArtifactOfWild,
|
|
|
|
ArtifactOfLifegiver,
|
|
|
|
ArtifactOfWarrior,
|
|
|
|
ArtifactOfChozo,
|
|
|
|
ArtifactOfNature,
|
|
|
|
ArtifactOfSun,
|
|
|
|
ArtifactOfWorld,
|
|
|
|
ArtifactOfSpirit,
|
|
|
|
ArtifactOfNewborn,
|
|
|
|
|
|
|
|
/* This must remain at the end of the list */
|
|
|
|
Max
|
|
|
|
};
|
|
|
|
|
|
|
|
enum class EPlayerVisor : u32
|
2015-08-17 20:33:58 +00:00
|
|
|
{
|
2016-03-23 20:38:01 +00:00
|
|
|
Combat,
|
|
|
|
XRay,
|
|
|
|
Scan,
|
|
|
|
Thermal,
|
|
|
|
|
|
|
|
/* This must remain at the end of the list */
|
|
|
|
Max
|
|
|
|
};
|
|
|
|
|
|
|
|
enum class EPlayerSuit : u32
|
|
|
|
{
|
|
|
|
Power,
|
|
|
|
Gravity,
|
|
|
|
Varia,
|
|
|
|
Phazon,
|
|
|
|
FusionPower,
|
|
|
|
FusionGravity,
|
|
|
|
FusionVaria,
|
|
|
|
FusionPhazon
|
|
|
|
};
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
static const u32 PowerUpMaxValues[41];
|
|
|
|
struct CPowerUp
|
|
|
|
{
|
|
|
|
int x0_amount = 0;
|
|
|
|
int x4_capacity = 0;
|
2015-08-20 02:52:07 +00:00
|
|
|
CPowerUp() {}
|
2016-03-23 20:38:01 +00:00
|
|
|
CPowerUp(int amount, int capacity) : x0_amount(amount), x4_capacity(capacity) {}
|
2016-03-19 19:19:43 +00:00
|
|
|
};
|
|
|
|
union
|
|
|
|
{
|
2016-03-23 20:38:01 +00:00
|
|
|
struct { bool x0_24_ : 1; bool x0_25_ : 1; bool x0_26_fusion; };
|
2016-03-19 19:19:43 +00:00
|
|
|
u32 dummy = 0;
|
2015-08-17 20:33:58 +00:00
|
|
|
};
|
2015-08-20 02:52:07 +00:00
|
|
|
|
2016-03-19 19:19:43 +00:00
|
|
|
u32 x4_ = 0;
|
2016-03-23 20:38:01 +00:00
|
|
|
u32 x8_currentBeam = 0;
|
|
|
|
float xc_currentHealth = 99.f;
|
2016-03-19 19:19:43 +00:00
|
|
|
float x10_ = 50.f;
|
2016-03-23 20:38:01 +00:00
|
|
|
EPlayerVisor x14_currentVisor = EPlayerVisor::Combat;
|
|
|
|
EPlayerVisor x18_transitioningVisor = x14_currentVisor;
|
|
|
|
float x1c_visorTransitionFactor = 0.2f;
|
|
|
|
EPlayerSuit x20_currentSuit = EPlayerSuit::Power;
|
2016-03-19 19:19:43 +00:00
|
|
|
rstl::reserved_vector<CPowerUp, 41> x24_powerups;
|
|
|
|
|
|
|
|
CStaticInterference x188_staticIntf;
|
2015-08-20 02:52:07 +00:00
|
|
|
public:
|
2016-03-23 20:38:01 +00:00
|
|
|
|
2016-03-23 21:41:41 +00:00
|
|
|
float GetBeamSwitchTime() const;
|
2016-03-23 20:38:01 +00:00
|
|
|
u32 CalculateItemCollectionRate() const;
|
|
|
|
|
|
|
|
u32 GetBaseHealthCapacityInt32() { return 99; }
|
|
|
|
void SetFusion(bool val) { x0_26_fusion = val; }
|
|
|
|
bool GetFusion() const { return x0_26_fusion; }
|
|
|
|
EPlayerSuit GetCurrentSuit() const;
|
|
|
|
bool CanVisorSeeFog(const CStateManager& stateMgr) const;
|
|
|
|
EPlayerVisor GetActiveVisor(const CStateManager& stateMgr) const;
|
|
|
|
void UpdateStaticInterference(CStateManager& stateMgr, const float& dt);
|
|
|
|
void IncreaseScanTime(u32 time, float val);
|
|
|
|
void NewScanTime(u32 time);
|
|
|
|
bool GetIsVisorTransitioning() const;
|
|
|
|
float GetVisorTransitionFactor() const;
|
|
|
|
void UpdateVisorTransition(float dt);
|
|
|
|
bool StartVisorTransition(EPlayerVisor visor);
|
|
|
|
void ResetVisor();
|
|
|
|
bool ItemEnabled(EItemType type);
|
|
|
|
void DisableItem(EItemType type);
|
|
|
|
void EnableItem(EItemType type);
|
|
|
|
bool HasPowerUp(EItemType type);
|
|
|
|
u32 GetItemCapacity(EItemType type) const;
|
|
|
|
u32 GetItemAmount(EItemType type) const;
|
|
|
|
void DecrPickup(EItemType type, s32 amount);
|
|
|
|
void IncrPickup(EItemType type, s32 amount);
|
|
|
|
void ResetAndIncrPickUp(EItemType type, s32 amount);
|
|
|
|
float GetEnergyTankCapacity() const { return 100.f; }
|
|
|
|
float GetBaseHealthCapacity() const { return 99.f; }
|
|
|
|
float CalculateHealth(u32 health);
|
|
|
|
void ReInitalizePowerUp(EItemType type, u32 capacity);
|
|
|
|
void InitializePowerUp(EItemType type, u32 capacity);
|
2016-03-19 19:19:43 +00:00
|
|
|
CPlayerState() : x188_staticIntf(5) { x0_24_ = true; }
|
|
|
|
CPlayerState(CBitStreamReader& stream);
|
2015-08-17 05:26:58 +00:00
|
|
|
};
|
2015-08-17 22:05:00 +00:00
|
|
|
}
|
|
|
|
|
2016-02-13 09:02:47 +00:00
|
|
|
#endif // __PSHAG_CPLAYERSTATE_HPP__
|