1#include "Game/LiveActor/LiveActor.hpp"
2#include "Game/LiveActor/HitSensorKeeper.hpp"
3#include "Game/Util.hpp"
4#include "JSystem/JMath/JMath.hpp"
7 HitSensor* addHitSensor(
LiveActor *pActor,
const char *pSensorName, u32 sensorType, u16 sensorGroupSize, f32 radius,
const TVec3f &a6) {
8 return pActor->
mSensorKeeper->add(pSensorName, sensorType, sensorGroupSize, radius, pActor, a6);
11 HitSensor* addHitSensorBinder(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius,
const TVec3f &a6) {
12 return pActor->
mSensorKeeper->add(pSensorName, 0x61, sensorGroupSize, radius, pActor, a6);
15 HitSensor* addHitSensorTransferableBinder(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius,
const TVec3f &a6) {
16 return pActor->
mSensorKeeper->add(pSensorName, 0x62, sensorGroupSize, radius, pActor, a6);
19 HitSensor* addHitSensorPriorBinder(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius,
const TVec3f &a6) {
20 return pActor->
mSensorKeeper->add(pSensorName, 0x63, sensorGroupSize, radius, pActor, a6);
23 HitSensor* addHitSensorRide(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius,
const TVec3f &a6) {
24 return pActor->
mSensorKeeper->add(pSensorName, 0x9, sensorGroupSize, radius, pActor, a6);
27 HitSensor* addHitSensorMapObj(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius,
const TVec3f &a6) {
28 return pActor->
mSensorKeeper->add(pSensorName, 0x46, sensorGroupSize, radius, pActor, a6);
31 HitSensor* addHitSensorMapObjPress(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius,
const TVec3f &a6) {
32 return pActor->
mSensorKeeper->add(pSensorName, 0x76, sensorGroupSize, radius, pActor, a6);
35 HitSensor* addHitSensorMapObjSimple(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius,
const TVec3f &a6) {
36 return pActor->
mSensorKeeper->add(pSensorName, 0x47, sensorGroupSize, radius, pActor, a6);
39 HitSensor* addHitSensorMapObjMoveCollision(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius,
const TVec3f &a6) {
40 return pActor->
mSensorKeeper->add(pSensorName, 0x48, sensorGroupSize, radius, pActor, a6);
43 HitSensor* addHitSensorEnemy(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius,
const TVec3f &a6) {
44 return pActor->
mSensorKeeper->add(pSensorName, 0x14, sensorGroupSize, radius, pActor, a6);
47 HitSensor* addHitSensorEnemySimple(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius,
const TVec3f &a6) {
48 return pActor->
mSensorKeeper->add(pSensorName, 0x15, sensorGroupSize, radius, pActor, a6);
51 HitSensor* addHitSensorEnemyAttack(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius,
const TVec3f &a6) {
52 return pActor->
mSensorKeeper->add(pSensorName, 0x16, sensorGroupSize, radius, pActor, a6);
55 HitSensor* addHitSensorNpc(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius,
const TVec3f &a6) {
56 return pActor->
mSensorKeeper->add(pSensorName, 0x5, sensorGroupSize, radius, pActor, a6);
59 HitSensor* addHitSensorEye(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius,
const TVec3f &a6) {
60 return pActor->
mSensorKeeper->add(pSensorName, 0x7F, sensorGroupSize, radius, pActor, a6);
63 HitSensor* addHitSensorPush(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius,
const TVec3f &a6) {
64 return pActor->
mSensorKeeper->add(pSensorName, 0x80, sensorGroupSize, radius, pActor, a6);
67 HitSensor* addHitSensorPosBinder(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius,
const TVec3f *pPos,
const TVec3f &a6) {
68 return pActor->
mSensorKeeper->addPos(pSensorName, 0x61, sensorGroupSize, radius, pActor, pPos, a6);
71 HitSensor* addHitSensorPosRide(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius,
const TVec3f *pPos,
const TVec3f &a6) {
72 return pActor->
mSensorKeeper->addPos(pSensorName, 0x9, sensorGroupSize, radius, pActor, pPos, a6);
75 HitSensor* addHitSensorPosMapObj(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius,
const TVec3f *pPos,
const TVec3f &a6) {
76 return pActor->
mSensorKeeper->addPos(pSensorName, 0x46, sensorGroupSize, radius, pActor, pPos, a6);
79 HitSensor* addHitSensorPosEye(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius,
const TVec3f *pPos,
const TVec3f &a6) {
80 return pActor->
mSensorKeeper->addPos(pSensorName, 0x7F, sensorGroupSize, radius, pActor, pPos, a6);
83 HitSensor* addHitSensorMtx(
LiveActor *pActor,
const char *pSensorName, u32 sensorType, u16 sensorGroupSize, f32 radius, MtxPtr mtx,
const TVec3f &a6) {
84 return pActor->
mSensorKeeper->addMtx(pSensorName, sensorType, sensorGroupSize, radius, pActor, mtx, a6);
87 HitSensor* addHitSensorMtxRide(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius, MtxPtr mtx,
const TVec3f &a6) {
88 return pActor->
mSensorKeeper->addMtx(pSensorName, 0x9, sensorGroupSize, radius, pActor, mtx, a6);
91 HitSensor* addHitSensorMtxMapObj(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius, MtxPtr mtx,
const TVec3f &a6) {
92 return pActor->
mSensorKeeper->addMtx(pSensorName, 0x46, sensorGroupSize, radius, pActor, mtx, a6);
95 HitSensor* addHitSensorMtxEnemy(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius, MtxPtr mtx,
const TVec3f &a6) {
96 return pActor->
mSensorKeeper->addMtx(pSensorName, 0x14, sensorGroupSize, radius, pActor, mtx, a6);
99 HitSensor* addHitSensorMtxEnemyAttack(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius, MtxPtr mtx,
const TVec3f &a6) {
100 return pActor->
mSensorKeeper->addMtx(pSensorName, 0x16, sensorGroupSize, radius, pActor, mtx, a6);
103 HitSensor* addHitSensorMtxNpc(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius, MtxPtr mtx,
const TVec3f &a6) {
104 return pActor->
mSensorKeeper->addMtx(pSensorName, 0x5, sensorGroupSize, radius, pActor, mtx, a6);
107 HitSensor* addHitSensorMtxAnimal(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius, MtxPtr mtx,
const TVec3f &a6) {
108 return pActor->
mSensorKeeper->addMtx(pSensorName, 0x7, sensorGroupSize, radius, pActor, mtx, a6);
111 HitSensor* addHitSensorAtJoint(
LiveActor *pActor,
const char *pSensorName,
const char *pJointName, u32 sensorType, u16 sensorGroupSize, f32 radius,
const TVec3f &a6) {
112 return pActor->
mSensorKeeper->addMtx(pSensorName, sensorType, sensorGroupSize, radius, pActor, MR::getJointMtx(pActor, pJointName), a6);
115 HitSensor* addHitSensorAtJointRide(
LiveActor *pActor,
const char *pSensorName,
const char *pJointName, u16 sensorGroupSize, f32 radius,
const TVec3f &a6) {
116 return pActor->
mSensorKeeper->addMtx(pSensorName, 0x9, sensorGroupSize, radius, pActor, MR::getJointMtx(pActor, pJointName), a6);
119 HitSensor* addHitSensorAtJointMapObj(
LiveActor *pActor,
const char *pSensorName,
const char *pJointName, u16 sensorGroupSize, f32 radius,
const TVec3f &a6) {
120 return pActor->
mSensorKeeper->addMtx(pSensorName, 0x46, sensorGroupSize, radius, pActor, MR::getJointMtx(pActor, pJointName), a6);
123 HitSensor* addHitSensorAtJointMapObjSimple(
LiveActor *pActor,
const char *pSensorName,
const char *pJointName, u16 sensorGroupSize, f32 radius,
const TVec3f &a6) {
124 return pActor->
mSensorKeeper->addMtx(pSensorName, 0x47, sensorGroupSize, radius, pActor, MR::getJointMtx(pActor, pJointName), a6);
127 HitSensor* addHitSensorAtJointEnemy(
LiveActor *pActor,
const char *pSensorName,
const char *pJointName, u16 sensorGroupSize, f32 radius,
const TVec3f &a6) {
128 return pActor->
mSensorKeeper->addMtx(pSensorName, 0x14, sensorGroupSize, radius, pActor, MR::getJointMtx(pActor, pJointName), a6);
131 HitSensor* addHitSensorAtJointEnemySimple(
LiveActor *pActor,
const char *pSensorName,
const char *pJointName, u16 sensorGroupSize, f32 radius,
const TVec3f &a6) {
132 return pActor->
mSensorKeeper->addMtx(pSensorName, 0x15, sensorGroupSize, radius, pActor, MR::getJointMtx(pActor, pJointName), a6);
135 HitSensor* addHitSensorAtJointEnemyAttack(
LiveActor *pActor,
const char *pSensorName,
const char *pJointName, u16 sensorGroupSize, f32 radius,
const TVec3f &a6) {
136 return pActor->
mSensorKeeper->addMtx(pSensorName, 0x16, sensorGroupSize, radius, pActor, MR::getJointMtx(pActor, pJointName), a6);
139 HitSensor* addHitSensorAtJointNpc(
LiveActor *pActor,
const char *pSensorName,
const char *pJointName, u16 sensorGroupSize, f32 radius,
const TVec3f &a6) {
140 return pActor->
mSensorKeeper->addMtx(pSensorName, 0x5, sensorGroupSize, radius, pActor, MR::getJointMtx(pActor, pJointName), a6);
143 HitSensor* addHitSensorAtJointEye(
LiveActor *pActor,
const char *pSensorName,
const char *pJointName, u16 sensorGroupSize, f32 radius,
const TVec3f &a6) {
144 return pActor->
mSensorKeeper->addMtx(pSensorName, 0x7F, sensorGroupSize, radius, pActor, MR::getJointMtx(pActor, pJointName), a6);
147 HitSensor* addHitSensorCallback(
LiveActor *pActor,
const char *pSensorName, u32 sensorType, u16 sensorGroupSize, f32 radius) {
148 return pActor->
mSensorKeeper->addCallback(pSensorName, sensorType, sensorGroupSize, radius, pActor);
151 HitSensor* addHitSensorCallbackBinder(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius) {
152 return pActor->
mSensorKeeper->addCallback(pSensorName, 0x61, sensorGroupSize, radius, pActor);
155 HitSensor* addHitSensorCallbackPriorBinder(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius) {
156 return pActor->
mSensorKeeper->addCallback(pSensorName, 0x63, sensorGroupSize, radius, pActor);
159 HitSensor* addHitSensorCallbackRide(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius) {
160 return pActor->
mSensorKeeper->addCallback(pSensorName, 0x9, sensorGroupSize, radius, pActor);
163 HitSensor* addHitSensorCallbackMapObj(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius) {
164 return pActor->
mSensorKeeper->addCallback(pSensorName, 0x46, sensorGroupSize, radius, pActor);
167 HitSensor* addHitSensorCallbackMapObjSimple(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius) {
168 return pActor->
mSensorKeeper->addCallback(pSensorName, 0x47, sensorGroupSize, radius, pActor);
171 HitSensor* addHitSensorCallbackEnemy(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius) {
172 return pActor->
mSensorKeeper->addCallback(pSensorName, 0x14, sensorGroupSize, radius, pActor);
175 HitSensor* addHitSensorCallbackEnemyAttack(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius) {
176 return pActor->
mSensorKeeper->addCallback(pSensorName, 0x16, sensorGroupSize, radius, pActor);
179 HitSensor* addHitSensorCallbackEye(
LiveActor *pActor,
const char *pSensorName, u16 sensorGroupSize, f32 radius) {
180 return pActor->
mSensorKeeper->addCallback(pSensorName, 0x7F, sensorGroupSize, radius, pActor);
184 return pSensor->mActor;
187 bool isSensor(
const HitSensor *pSensor,
const char *pSensorName) {
188 return !(pSensor != pSensor->mActor->
getSensor(pSensorName));
191 bool isSensorPlayer(
const HitSensor *pSensor) {
192 return pSensor->isType(0x1);
195 bool isSensorBinder(
const HitSensor *pSensor) {
196 return pSensor->isType(0x61);
199 bool isSensorRide(
const HitSensor *pSensor) {
200 if (pSensor->mSensorType < 0x8 && pSensor->mSensorType > 0x12) {
207 bool isSensorMapObj(
const HitSensor *pSensor) {
208 if (pSensor->mSensorType < 0x45 && pSensor->mSensorType > 0x5F) {
215 bool isSensorAutoRush(
const HitSensor *pSensor) {
216 if (pSensor->mSensorType < 0x60 && pSensor->mSensorType > 0x6E) {
223 bool isSensorRush(
const HitSensor *pSensor) {
224 if (pSensor->mSensorType < 0x6F && pSensor->mSensorType > 0x74) {
231 bool isSensorPressObj(
const HitSensor *pSensor) {
232 if (pSensor->mSensorType < 0x75 && pSensor->mSensorType > 0x77) {
239 bool isSensorEye(
const HitSensor *pSensor) {
240 return pSensor->isType(0x7F);
243 bool isSensorPush(
const HitSensor *pSensor) {
244 return pSensor->isType(0x80);
247 bool isSensorItem(
const HitSensor *pSensor) {
248 if (pSensor->isType(0x4A) || pSensor->isType(0x4B) || pSensor->isType(0x4D)) {
256 return pReceiver->receiveMessage(0x87, pSender);
259 TVec3f* getSensorPos(
const HitSensor *pSensor) {
260 return (TVec3f*)&pSensor->mPosition;
263 void validateHitSensors(
LiveActor *pActor) {
269 void invalidateHitSensors(
LiveActor *pActor) {
276 return pReceiver->receiveMessage(msg, pSender);
280 return pReceiver->receiveMessage(0x29, pSender);
284 return pReceiver->receiveMessage(2, pSender);
288 return pReceiver->receiveMessage(1, pSender);
292 return pReceiver->receiveMessage(0x2C, pSender);
296 return pReceiver->receiveMessage(0x2D, pSender);
300 return pReceiver->receiveMessage(0x1F, pSender);
304 return pReceiver->receiveMessage(0x2B, pSender);
308 return pReceiver->receiveMessage(0x2F, pSender);
311 bool sendMsgEnemyAttackMsgToDir(u32 msg,
HitSensor *pReceiver,
HitSensor *pSender,
const TVec3f &rDir) {
312 TVec3f curSenderPos(pSender->mPosition);
313 JMathInlineVEC::PSVECSubtract((Vec*)&pReceiver->mPosition, (Vec*)&rDir, (Vec*)&pSender->mPosition);
314 bool ret = pReceiver->receiveMessage(msg, pSender);
315 pSender->mPosition.set<f32>(curSenderPos);
320 return pReceiver->receiveMessage(0x4D, pSender);
324 return pReceiver->receiveMessage(0x4E, pSender);
328 return pReceiver->receiveMessage(0x50, pSender);
331 bool sendMsgEnemyAttackFlipToDir(
HitSensor *pReceiver,
HitSensor *pSender,
const TVec3f &rDir) {
332 return sendMsgEnemyAttackMsgToDir(0x50, pReceiver, pSender, rDir);
336 return pReceiver->receiveMessage(0x4F, pSender);
340 return pReceiver->receiveMessage(0x51, pSender);
344 return pReceiver->receiveMessage(0x52, pSender);
347 bool sendMsgEnemyAttackFlipMaximumToDir(
HitSensor *pReceiver,
HitSensor *pSender,
const TVec3f &rDir) {
348 return sendMsgEnemyAttackMsgToDir(0x52, pReceiver, pSender, rDir);
352 return pReceiver->receiveMessage(0x53, pSender);
356 return pReceiver->receiveMessage(0x54, pSender);
359 bool sendMsgEnemyAttackStrongToDir(
HitSensor *pReceiver,
HitSensor *pSender,
const TVec3f &rDir) {
360 return sendMsgEnemyAttackMsgToDir(0x54, pReceiver, pSender, rDir);
364 return pReceiver->receiveMessage(0x58, pSender);
368 return pReceiver->receiveMessage(0x59, pSender);
372 return pReceiver->receiveMessage(0x5A, pSender);
376 return pReceiver->receiveMessage(0x5D, pSender);
380 return pReceiver->receiveMessage(0x5B, pSender);
384 return pReceiver->receiveMessage(0x56, pSender);
388 return pReceiver->receiveMessage(0x60, pSender);
392 return pReceiver->receiveMessage(0x61, pSender);
396 return pReceiver->receiveMessage(0xE, pSender);
400 return pReceiver->receiveMessage(0xC, pSender);
404 return pReceiver->receiveMessage(msg + 0xE, pSender);
408 return pReceiver->receiveMessage(0x55, pSender);
411 bool sendMsgEnemyAttackMaximumToDir(
HitSensor *pReceiver,
HitSensor *pSender,
const TVec3f &rDir) {
412 return sendMsgEnemyAttackMsgToDir(0x55, pReceiver, pSender, rDir);
416 bool isMsgPlayerHitAll(u32 msg) {
417 if (msg - 1 <= 0xA && ((1 << msg - 1) & 0x6B1)) {
425 bool isMsgPlayerSpinAttack(u32 msg) {
429 bool isMsgPlayerTrample(u32 msg) {
433 bool isMsgPlayerHipDrop(u32 msg) {
437 bool isMsgPlayerHipDropFloor(u32 msg) {
441 bool isMsgPlayerUpperPunch(u32 msg) {
The basis of a drawable actor that can contain states (see: Nerve)
HitSensorKeeper * mSensorKeeper
A pointer to a HitSensorKeeper instance, used for storing HitSensor instances.
HitSensor * getSensor(const char *pSensorName) const
Gets a sensor.