prime/include/MetroidPrime/CObjectList.hpp
Luke Street 7ca3a1c0bb Replace int types in Retro code
Retro seemingly avoided using the Dolphin
typedefs in most places, opting to use int/uint
instead. This likely means they didn't use
u8/s8/u16/s16/etc either.


Former-commit-id: 133326ae406a0ebc76f56f8bcb489fda280be2be
2022-10-09 01:37:23 -04:00

65 lines
1.3 KiB
C++

#ifndef _COBJECTLIST
#define _COBJECTLIST
#include "types.h"
#include "MetroidPrime/TGameTypes.hpp"
#define kMaxObjects 1024
enum EGameObjectList {
kOL_Invalid = -1,
kOL_All,
kOL_Actor,
kOL_PhysicsActor,
kOL_GameCamera,
kOL_GameLight,
kOL_ListeningAi,
kOL_AiWaypoint,
kOL_PlatformAndDoor,
};
class CEntity;
class CObjectList {
struct SObjectListEntry {
CEntity* mEnt;
short mNext;
short mPrev;
SObjectListEntry();
};
public:
CObjectList(EGameObjectList list);
virtual bool IsQualified(CEntity& ent);
void AddObject(CEntity& ent);
void RemoveObject(TUniqueId uid);
CEntity* GetObjectById();
const CEntity* GetObjectById() const;
CEntity* GetValidObjectById(TUniqueId uid);
const CEntity* GetValidObjectById(TUniqueId uid) const;
CEntity* operator[](int idx);
const CEntity* operator[](int idx) const;
const CEntity* GetValidObjectByIndex(int idx) const;
int size() const { return mCount; }
int GetFirstObjectIndex() const { return mFirstId; }
int GetNextObjectIndex(int idx) const {
if (idx != -1) {
return mObjects[idx].mNext;
} else {
return -1;
}
}
private:
SObjectListEntry mObjects[1024];
EGameObjectList mListType;
short mFirstId;
short mCount;
};
CHECK_SIZEOF(CObjectList, 0x200c)
#endif // _COBJECTLIST