mirror of
https://github.com/PrimeDecomp/prime.git
synced 2025-12-18 10:05:22 +00:00
Begin matching CScriptMazeNode
This commit is contained in:
@@ -5,30 +5,35 @@
|
||||
|
||||
class CRandom16;
|
||||
class CGlobalRandom {
|
||||
static CGlobalRandom* gCurrentGlobalRandom;
|
||||
static CGlobalRandom* gCurrentGlobalRandom;
|
||||
|
||||
public:
|
||||
CGlobalRandom(CRandom16& rnd);
|
||||
~CGlobalRandom();
|
||||
CGlobalRandom(CRandom16& rnd);
|
||||
~CGlobalRandom();
|
||||
|
||||
private:
|
||||
CRandom16& mRandom;
|
||||
bool mIsFirst;
|
||||
CGlobalRandom* mPrev;
|
||||
CRandom16& mRandom;
|
||||
bool mIsFirst;
|
||||
CGlobalRandom* mPrev;
|
||||
};
|
||||
|
||||
class CRandom16 {
|
||||
friend class CGlobalRandom;
|
||||
static CRandom16* gRandomNumber;
|
||||
static void _SetRandomNumber(CRandom16* rnd);
|
||||
friend class CGlobalRandom;
|
||||
static CRandom16* gRandomNumber;
|
||||
static void _SetRandomNumber(CRandom16* rnd);
|
||||
|
||||
public:
|
||||
static CRandom16* GetRandomNumber();
|
||||
CRandom16(uint seed = 99);
|
||||
void SetSeed(uint seed);
|
||||
int Range(int min, int max);
|
||||
float Range(float min, float max);
|
||||
int Next();
|
||||
float Float();
|
||||
CRandom16(uint seed = 99);
|
||||
void SetSeed(uint seed);
|
||||
int Range(int min, int max);
|
||||
float Range(float min, float max);
|
||||
int Next();
|
||||
float Float();
|
||||
|
||||
static CRandom16* GetRandomNumber();
|
||||
|
||||
private:
|
||||
uint mSeed;
|
||||
uint mSeed;
|
||||
};
|
||||
|
||||
#endif // __CRANDOM16_HPP__
|
||||
|
||||
@@ -9,6 +9,13 @@
|
||||
#include "Kyoto/CResLoader.hpp"
|
||||
|
||||
class IFactory {
|
||||
public:
|
||||
virtual ~IFactory() {}
|
||||
virtual CFactoryFnReturn Build(const SObjectTag&, const CVParamTransfer&, CObjectReference*) = 0;
|
||||
virtual void BuildAsync(const SObjectTag&, const CVParamTransfer&, rstl::auto_ptr< IObj >*, CObjectReference*) = 0;
|
||||
virtual void CancelBuild(const SObjectTag&) = 0;
|
||||
virtual bool CanBuild(const SObjectTag&) = 0;
|
||||
virtual const SObjectTag* GetResourceIdByName(const char* name) const = 0;
|
||||
// TODO
|
||||
};
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@ public:
|
||||
void AddPakFileAsync(const rstl::string&, bool, bool);
|
||||
void AsyncIdlePakLoading();
|
||||
bool AreAllPaksLoaded() const;
|
||||
CInputStream* LoadNewResourceSync(const SObjectTag& tag, char* extBuf);
|
||||
|
||||
private:
|
||||
rstl::list< void > x0_aramList;
|
||||
|
||||
@@ -25,6 +25,7 @@ public:
|
||||
void SendScriptMsgs(EScriptObjectState state, CStateManager& mgr, EScriptObjectMessage msg);
|
||||
TUniqueId GetUniqueId() const { return x8_uid; }
|
||||
TAreaId GetAreaId() const;
|
||||
bool GetActive() const { return x30_24_active; }
|
||||
|
||||
static rstl::vector<SConnection> NullConnectionList;
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@ class CVector3f;
|
||||
class CWeaponMgr;
|
||||
class CWorld;
|
||||
class CWorldTransManager;
|
||||
class CEntity;
|
||||
|
||||
namespace SL {
|
||||
class CSortedListManager;
|
||||
@@ -37,8 +38,12 @@ class CSortedListManager;
|
||||
class CStateManager {
|
||||
public:
|
||||
void SendScriptMsg(TUniqueId uid, TEditorId target, EScriptObjectMessage msg, EScriptObjectState state);
|
||||
void SendScriptMsg(CEntity* ent, TUniqueId target, EScriptObjectMessage msg);
|
||||
bool AddDrawableActor(const CActor& actor, const CVector3f& pos, const CAABox& bounds) const;
|
||||
void SetupParticleHook(const CActor& actor) const;
|
||||
void FreeScriptObject(TUniqueId uid);
|
||||
|
||||
CEntity* ObjectById(TUniqueId uid);
|
||||
|
||||
CCameraManager* CameraManager() { return x870_cameraManager; }
|
||||
const CCameraManager* GetCameraManager() const { return x870_cameraManager; }
|
||||
|
||||
@@ -5,9 +5,112 @@
|
||||
|
||||
#include "MetroidPrime/CActor.hpp"
|
||||
|
||||
#include "Kyoto/CRandom16.hpp"
|
||||
#include "Kyoto/Math/CVector3f.hpp"
|
||||
|
||||
#include "rstl/vector.hpp"
|
||||
|
||||
#define skMazeCols 9
|
||||
#define skMazeRows 7
|
||||
#define skEnterCol 4
|
||||
#define skEnterRow 4
|
||||
#define skTargetCol 5
|
||||
#define skTargetRow 3
|
||||
|
||||
#define NUM_MAZE_CELLS (skMazeRows * skMazeCols)
|
||||
|
||||
struct SMazeCell {
|
||||
bool x0_24_openTop : 1;
|
||||
bool x0_25_openRight : 1;
|
||||
bool x0_26_openBottom : 1;
|
||||
bool x0_27_openLeft : 1;
|
||||
bool x0_28_gateTop : 1;
|
||||
bool x0_29_gateRight : 1;
|
||||
bool x0_30_gateBottom : 1;
|
||||
bool x0_31_gateLeft : 1;
|
||||
bool x1_24_puddle : 1;
|
||||
bool x1_25_onPath : 1;
|
||||
bool x1_26_checked : 1;
|
||||
|
||||
SMazeCell() {
|
||||
x0_24_openTop = x0_25_openRight = x0_26_openBottom = x0_27_openLeft = x0_28_gateTop = x0_29_gateRight = x0_30_gateBottom =
|
||||
x0_31_gateLeft = x1_24_puddle = x1_25_onPath = x1_26_checked = false;
|
||||
}
|
||||
|
||||
inline bool IsClosed() const { return !x0_24_openTop && !x0_25_openRight && !x0_26_openBottom && !x0_27_openLeft; }
|
||||
};
|
||||
|
||||
class CMazeState {
|
||||
CRandom16 x0_rand;
|
||||
SMazeCell x4_cells[skMazeRows * skMazeCols];
|
||||
int x84_enterCol;
|
||||
int x88_enterRow;
|
||||
int x8c_targetCol;
|
||||
int x90_targetRow;
|
||||
bool x94_24_initialized : 1;
|
||||
|
||||
public:
|
||||
enum ESide {
|
||||
kS_Invalid = -1,
|
||||
kS_Top = 0,
|
||||
kS_Right = 1,
|
||||
kS_Bottom = 2,
|
||||
kS_Left = 3,
|
||||
};
|
||||
|
||||
CMazeState(int enterCol, int enterRow, int targetCol, int targetRow);
|
||||
void Reset(int seed);
|
||||
void Initialize();
|
||||
void GenerateObstacles();
|
||||
|
||||
SMazeCell& GetCell(uint col, uint row);
|
||||
SMazeCell& GetCell2(uint col, uint row); // ????
|
||||
SMazeCell& GetCellInline(uint col, uint row) { return x4_cells[col + row * skMazeCols]; } // ????
|
||||
inline SMazeCell& GetCell(uint idx) { return x4_cells[idx]; }
|
||||
};
|
||||
|
||||
class CScriptMazeNode : public CActor {
|
||||
public:
|
||||
CScriptMazeNode(TUniqueId uid, const rstl::string& name, const CEntityInfo& info, const CTransform4f& xf, bool active, int col, int row,
|
||||
int side, const CVector3f& actorPos, const CVector3f& triggerPos, const CVector3f& effectPos);
|
||||
~CScriptMazeNode() override;
|
||||
|
||||
void Accept(IVisitor& visitor) override;
|
||||
void AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CStateManager& mgr) override;
|
||||
void Think(float dt, CStateManager& mgr) override;
|
||||
|
||||
static void LoadMazeSeeds();
|
||||
|
||||
private:
|
||||
enum ESide {
|
||||
Invalid = -1,
|
||||
Top = 0,
|
||||
Right = 1,
|
||||
Bottom = 2,
|
||||
Left = 3,
|
||||
};
|
||||
|
||||
int xe8_col;
|
||||
int xec_row;
|
||||
ESide xf0_side;
|
||||
TUniqueId xf4_gateEffectId;
|
||||
float xf8_msgTimer;
|
||||
TUniqueId xfc_actorId;
|
||||
CVector3f x100_actorPos;
|
||||
TUniqueId x10c_triggerId;
|
||||
CVector3f x110_triggerPos;
|
||||
TUniqueId x11c_effectId;
|
||||
CVector3f x120_effectPos;
|
||||
rstl::vector< TUniqueId > x12c_puddleObjectIds;
|
||||
bool x13c_24_hasPuddle : 1;
|
||||
bool x13c_25_hasGate : 1;
|
||||
bool x13c_26_gateActive : 1;
|
||||
|
||||
void GenerateObjects(CStateManager& mgr);
|
||||
void Reset(CStateManager& mgr);
|
||||
void SendScriptMsgs(CStateManager& mgr, EScriptObjectMessage msg);
|
||||
|
||||
static uint sMazeSeeds[300];
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user