metaforce/Runtime/World/CScriptTrigger.hpp

87 lines
2.5 KiB
C++
Raw Normal View History

2016-04-19 21:25:26 +00:00
#ifndef __URDE_CSCRIPTTRIGGER_HPP__
#define __URDE_CSCRIPTTRIGGER_HPP__
#include "CActor.hpp"
2016-04-29 10:08:46 +00:00
#include "CDamageInfo.hpp"
2016-04-19 21:25:26 +00:00
namespace urde
{
2016-11-20 21:53:15 +00:00
// TODO - Phil: Figure out what each of the DetectProjectiles actually mean
enum class ETriggerFlags : u32
{
DetectPlayer = (1 << 0),
DetectAI = (1 << 1),
DetectProjectiles1 = (1 << 2),
DetectProjectiles2 = (1 << 3),
DetectProjectiles3 = (1 << 4),
DetectProjectiles4 = (1 << 5),
DetectBombs = (1 << 6),
Unknown1 = (1 << 7),
DetectProjectiles5 = (1 << 8),
DetectProjectiles6 = (1 << 9),
DetectProjectiles7 = (1 << 10),
KillOnEnter = (1 << 11),
DetectMorphedPlayer = (1 << 12),
ApplyForce = (1 << 13),
DetectPlayerIfInside = (1 << 14),
Unknown2 = (1 << 15),
DetectUnmorphedPlayer = (1 << 16),
BlockEnvironmentalEffects = (1 << 17)
};
ENABLE_BITWISE_ENUM(ETriggerFlags)
2016-04-19 21:25:26 +00:00
class CScriptTrigger : public CActor
{
2016-04-29 10:08:46 +00:00
public:
class CObjectTracker
{
TUniqueId x0_id;
2016-11-20 21:53:15 +00:00
2016-04-29 10:08:46 +00:00
public:
2016-11-20 21:53:15 +00:00
CObjectTracker(TUniqueId id) : x0_id(id) {}
2016-04-29 10:08:46 +00:00
TUniqueId GetObjectId() const { return x0_id; }
2016-11-20 21:53:15 +00:00
bool operator==(const CObjectTracker& other) { return x0_id == other.x0_id; }
2016-04-29 10:08:46 +00:00
};
2016-11-20 21:53:15 +00:00
protected:
std::list<CObjectTracker> xe8_inhabitants;
2016-04-29 10:08:46 +00:00
CDamageInfo x100_damageInfo;
zeus::CVector3f x11c_forceField;
float x128_forceMagnitude;
2016-11-20 21:53:15 +00:00
ETriggerFlags x12c_flags;
2016-04-29 10:08:46 +00:00
zeus::CAABox x130_bounds;
2016-11-20 21:53:15 +00:00
union {
2016-04-29 10:08:46 +00:00
struct
{
bool x148_24_ : 1;
bool x148_25_ : 1;
bool x148_26_ : 1;
bool x148_27_ : 1;
bool x148_28_ : 1;
bool x148_29_ : 1;
};
u8 dummy = 0;
};
2016-11-20 21:53:15 +00:00
2016-04-19 21:25:26 +00:00
public:
2016-11-20 21:53:15 +00:00
CScriptTrigger(TUniqueId, const std::string& name, const CEntityInfo& info, const zeus::CVector3f& pos,
const zeus::CAABox&, const CDamageInfo& dInfo, const zeus::CVector3f& orientedForce,
ETriggerFlags triggerFlags, bool, bool, bool);
2016-04-29 10:08:46 +00:00
virtual void InhabitantRejected(CActor&, CStateManager&) {}
virtual void InhabitantExited(CActor&, CStateManager&) {}
virtual void InhabitantIdle(CActor&, CStateManager&) {}
virtual void InhabitantAdded(CActor&, CStateManager&) {}
CObjectTracker* FindInhabitant(TUniqueId);
void UpdateInhabitants(CStateManager&);
const std::list<CObjectTracker>& GetInhabitants() const;
rstl::optional_object<zeus::CAABox> GetTouchBounds() const;
zeus::CAABox GetTriggerBoundsWR() const;
2016-04-19 21:25:26 +00:00
};
}
#endif // __URDE_CSCRIPTTRIGGER_HPP__