3#include <actor/ActorUniqueID.h>
4#include <collision/ActorBgHitCheckCallback.h>
5#include <collision/BasicBgCollisionCheck.h>
6#include <collision/BgCollisionCat.h>
7#include <collision/BgUnitCode.h>
8#include <collision/FollowArg.h>
9#include <map/WaterType.h>
10#include <system/LineNodeMgr.h>
11#include <utility/Angle.h>
12#include <utility/Bitfield.h>
13#include <utility/Direction.h>
15#include <container/seadPtrArray.h>
16#include <container/seadSafeArray.h>
17#include <math/seadBoundBox.h>
18#include <prim/seadMemUtil.h>
19#include <prim/seadRuntimeTypeInfo.h>
74 static_assert(
sizeof(
SakaType) == 4);
145 default:
return false;
199 static_assert(
sizeof(
Output) == 4);
263 static_assert(
sizeof(
Sensor) == 0xC);
308
309
310
311
312
313
314
322 template <
typename T>
325 return sead::DynamicCast<T>(mOwner);
335 setSensor(foot, cDirType_Down);
340 setSensor(head, cDirType_Up);
345 setSensor(wall_r, cDirType_Right);
346 if (wall_r !=
nullptr)
349 wall_l.center_offset *= -1.0f;
350 setSensor(&wall_l, cDirType_Left);
354 setSensor(
nullptr, cDirType_Left);
405 if (isSensor1Set(direction))
407 if (!isSensor1Null(direction))
408 return getSensor1(direction);
410 else if (isSensor2Set(direction))
412 return getSensor2(direction);
479 return mHitDirectionFlag & hit_dir_flag;
509 return getSakaType(getSakaBaseAngle());
Definition ActorBgCollisionCheck.h:24
sead::Vector2f _c
Definition ActorBgCollisionCheck.h:44
u8 _2
Definition ActorBgCollisionCheck.h:40
u8 _0
Definition ActorBgCollisionCheck.h:38
u32 _4
Definition ActorBgCollisionCheck.h:42
u8 _3
Definition ActorBgCollisionCheck.h:41
u32 _34
Definition ActorBgCollisionCheck.h:51
u64 mBgCheckData
Definition ActorBgCollisionCheck.h:49
void setOwner(BgCollision *)
BgCollision * mOwner
Definition ActorBgCollisionCheck.h:47
u8 _1
Definition ActorBgCollisionCheck.h:39
f32 _30
Definition ActorBgCollisionCheck.h:50
BgCollision * getOwner() const
ActorUniqueID mActorUniqueID
Definition ActorBgCollisionCheck.h:46
sead::Vector2f _14
Definition ActorBgCollisionCheck.h:45
Angle mAngle
Definition ActorBgCollisionCheck.h:43
ActorBgCollisionCheckResult()
Definition ActorBgCollisionCheck.h:98
bool checkRide() const
Definition ActorBgCollisionCheck.h:149
bool checkWall(u8 direction) const
Definition ActorBgCollisionCheck.h:139
bool checkHead() const
Definition ActorBgCollisionCheck.h:135
bool isQuicksand() const
Definition ActorBgCollisionCheck.h:164
bool checkLeftWall() const
Definition ActorBgCollisionCheck.h:137
bool isInQuicksand() const
Definition ActorBgCollisionCheck.h:159
bool isOnTrampoline() const
Definition ActorBgCollisionCheck.h:189
bool checkRightWallEx() const
Definition ActorBgCollisionCheck.h:174
bool checkFoot() const
Definition ActorBgCollisionCheck.h:134
bool checkWallEx(DirType direction) const
Definition ActorBgCollisionCheck.h:184
bool isOnQuicksand() const
Definition ActorBgCollisionCheck.h:154
void setFoot()
Definition ActorBgCollisionCheck.h:194
Bit
Definition ActorBgCollisionCheck.h:101
@ cBit_OnRide
Definition ActorBgCollisionCheck.h:104
@ cBit_Unk15
Definition ActorBgCollisionCheck.h:115
@ cBit_Unk27
Definition ActorBgCollisionCheck.h:126
@ cBit_Unk29
Definition ActorBgCollisionCheck.h:128
@ cBit_Unk14
Definition ActorBgCollisionCheck.h:114
@ cBit_OnGround
Definition ActorBgCollisionCheck.h:102
@ cBit_Unk6
Definition ActorBgCollisionCheck.h:108
@ cBit_Unk31
Definition ActorBgCollisionCheck.h:130
@ cBit_Unk9
Definition ActorBgCollisionCheck.h:111
@ cBit_Unk24
Definition ActorBgCollisionCheck.h:124
@ cBit_WallRCollision
Definition ActorBgCollisionCheck.h:118
@ cBit_Unk28
Definition ActorBgCollisionCheck.h:127
@ cBit_OnHalf
Definition ActorBgCollisionCheck.h:106
@ cBit_InQuicksand
Definition ActorBgCollisionCheck.h:116
@ cBit_OnTrampoline
Definition ActorBgCollisionCheck.h:105
@ cBit_CarryRelatedL
Definition ActorBgCollisionCheck.h:121
@ cBit_WallLCollision
Definition ActorBgCollisionCheck.h:119
@ cBit_OnSlope
Definition ActorBgCollisionCheck.h:103
@ cBit_HeadCollision
Definition ActorBgCollisionCheck.h:112
@ cBit_Unk5
Definition ActorBgCollisionCheck.h:107
@ cBit_Unk17
Definition ActorBgCollisionCheck.h:117
@ cBit_CarryRelatedR
Definition ActorBgCollisionCheck.h:120
@ cBit_OnHorzPipe
Definition ActorBgCollisionCheck.h:109
@ cBit_OnQuicksand
Definition ActorBgCollisionCheck.h:110
@ cBit_Unk22
Definition ActorBgCollisionCheck.h:122
@ cBit_Unk13
Definition ActorBgCollisionCheck.h:113
@ cBit_Unk26
Definition ActorBgCollisionCheck.h:125
@ cBit_Unk23
Definition ActorBgCollisionCheck.h:123
@ cBit_Unk30
Definition ActorBgCollisionCheck.h:129
bool checkRightWall() const
Definition ActorBgCollisionCheck.h:136
bool checkLeftWallEx() const
Definition ActorBgCollisionCheck.h:179
bool checkHeadEx() const
Definition ActorBgCollisionCheck.h:169
Definition ActorBgCollisionCheck.h:202
Bit
Definition ActorBgCollisionCheck.h:205
@ cBit_Inactive
Definition ActorBgCollisionCheck.h:234
@ cBit_24
Definition ActorBgCollisionCheck.h:228
@ cBit_51
Definition ActorBgCollisionCheck.h:246
@ cBit_13
Definition ActorBgCollisionCheck.h:218
@ cBit_4
Definition ActorBgCollisionCheck.h:210
@ cBit_21
Definition ActorBgCollisionCheck.h:225
@ cBit_26
Definition ActorBgCollisionCheck.h:230
@ cBit_54
Definition ActorBgCollisionCheck.h:249
@ cBit_38
Definition ActorBgCollisionCheck.h:238
@ cBit_27
Definition ActorBgCollisionCheck.h:231
@ cBit_46
Definition ActorBgCollisionCheck.h:242
@ cBit_15
Definition ActorBgCollisionCheck.h:220
@ cBit_43
Definition ActorBgCollisionCheck.h:240
@ cBit_18
Definition ActorBgCollisionCheck.h:223
@ cBit_10
Definition ActorBgCollisionCheck.h:216
@ cBit_BreakBlocks
Definition ActorBgCollisionCheck.h:243
@ cBit_28
Definition ActorBgCollisionCheck.h:232
@ cBit_1
Definition ActorBgCollisionCheck.h:207
@ cBit_52
Definition ActorBgCollisionCheck.h:247
@ cBit_9
Definition ActorBgCollisionCheck.h:215
@ cBit_16
Definition ActorBgCollisionCheck.h:221
@ cBit_50
Definition ActorBgCollisionCheck.h:245
@ cBit_8
Definition ActorBgCollisionCheck.h:214
@ cBit_23
Definition ActorBgCollisionCheck.h:227
@ cBit_55
Definition ActorBgCollisionCheck.h:250
@ cBit_5
Definition ActorBgCollisionCheck.h:211
@ cBit_17
Definition ActorBgCollisionCheck.h:222
@ cBit_14
Definition ActorBgCollisionCheck.h:219
@ cBit_6
Definition ActorBgCollisionCheck.h:212
@ cBit_22
Definition ActorBgCollisionCheck.h:226
@ cBit_36
Definition ActorBgCollisionCheck.h:236
@ cBit_56
Definition ActorBgCollisionCheck.h:251
@ cBit_3
Definition ActorBgCollisionCheck.h:209
@ cBit_0
Definition ActorBgCollisionCheck.h:206
Definition ActorBgCollisionCheck.h:59
sead::FixedPtrArray< BgCollision, 512 > _54
Definition ActorBgCollisionCheck.h:551
SensorBgCollisionCatArray mBgCheckResultIdxPrev
Definition ActorBgCollisionCheck.h:585
sead::UnsafeArray< BgCheckResultArray, cDirType_Num > SensorBgCheckResultArray
Definition ActorBgCollisionCheck.h:276
SensorBoolArray mIsSensor2Set
Definition ActorBgCollisionCheck.h:576
bool isSensor2Set(DirType direction) const
Definition ActorBgCollisionCheck.h:368
T * getOwner() const
Definition ActorBgCollisionCheck.h:323
bool isSensor1Null(DirType direction) const
Definition ActorBgCollisionCheck.h:363
const Sensor * getSensorEffective(DirType direction) const
Definition ActorBgCollisionCheck.h:403
bool isSaka()
Definition ActorBgCollisionCheck.h:507
WallSensorArray mSensor4
Definition ActorBgCollisionCheck.h:580
bool mIsInitialized
Definition ActorBgCollisionCheck.h:570
Actor * mOwner
Definition ActorBgCollisionCheck.h:556
SensorFlag & getSensorFlag(DirType direction)
Definition ActorBgCollisionCheck.h:417
SensorBgCheckResultArray mBgCheckResult
Definition ActorBgCollisionCheck.h:587
virtual Actor * getOwnerAtRevCheck(f32 bg_collision_pos_y) const =0
u8 mHitDirectionFlag
Definition ActorBgCollisionCheck.h:569
const u64 & getBgCheckData(DirType direction) const
Definition ActorBgCollisionCheck.h:489
sead::BoundBox2f _8d4
Definition ActorBgCollisionCheck.h:563
HitDirBit
Definition ActorBgCollisionCheck.h:84
@ cHitDirBit_Right
Definition ActorBgCollisionCheck.h:85
@ cHitDirBit_Down
Definition ActorBgCollisionCheck.h:88
@ cHitDirBit_Up
Definition ActorBgCollisionCheck.h:87
@ cHitDirBit_BoostBlock_Down
Definition ActorBgCollisionCheck.h:93
@ cHitDirBit_BoostBlock_Up
Definition ActorBgCollisionCheck.h:92
@ cHitDirBit_Left
Definition ActorBgCollisionCheck.h:86
@ cHitDirBit_BoostBlock_Right
Definition ActorBgCollisionCheck.h:90
@ cHitDirBit_BoostBlock_Left
Definition ActorBgCollisionCheck.h:91
bool isSensor1Set(DirType direction) const
Definition ActorBgCollisionCheck.h:358
sead::Vector2f mBgSpeed
Definition ActorBgCollisionCheck.h:566
static u32 checkWaterDepth(f32 x, f32 y, u8 layer)
SensorBoolArray mIsSensor1Null
Definition ActorBgCollisionCheck.h:575
List::Node mListNodeHead
Definition ActorBgCollisionCheck.h:553
Angle getHeadSakaBaseAngle()
WallSensorBoolArray mIsSensor4Set
Definition ActorBgCollisionCheck.h:581
sead::UnsafeArray< Sensor, cDirType_Num > SensorArray
Definition ActorBgCollisionCheck.h:266
virtual void checkHead_()
ActorBgHitCheckCallback mBgHitCheckCallback
Definition ActorBgCollisionCheck.h:550
bool checkRide() const
Definition ActorBgCollisionCheck.h:457
const Sensor * getSensor1(DirType direction) const
Definition ActorBgCollisionCheck.h:388
Sensor * getSensor1(DirType direction)
Definition ActorBgCollisionCheck.h:383
const Output & getOutput() const
Definition ActorBgCollisionCheck.h:440
Output mOutputPrev
Definition ActorBgCollisionCheck.h:560
u32 _910
Definition ActorBgCollisionCheck.h:568
SensorArray mSensor2
Definition ActorBgCollisionCheck.h:578
sead::BoundBox2f _8f4
Definition ActorBgCollisionCheck.h:565
Angle getSakaAngle(DirType dir)
bool isOnTrampoline() const
Definition ActorBgCollisionCheck.h:467
void setSensorFoot(const Sensor *foot)
Definition ActorBgCollisionCheck.h:333
sead::BoundBox2f _8c4
Definition ActorBgCollisionCheck.h:562
SakaType getSakaType(Angle saka_base_angle)
const SensorFlag & getSensorFlag(DirType direction) const
Definition ActorBgCollisionCheck.h:422
const Sensor * getSensor(u8 direction) const
BasicBgCollisionCheck mBgCheck
Definition ActorBgCollisionCheck.h:549
virtual void checkFoot_()
u32 _14d8
Definition ActorBgCollisionCheck.h:591
const SensorArray & getSensorArray2() const
Definition ActorBgCollisionCheck.h:378
bool isHit(u8 hit_dir_flag) const
Definition ActorBgCollisionCheck.h:477
const SensorArray & getSensorArray1() const
Definition ActorBgCollisionCheck.h:373
List::Node mListNodeWallR
Definition ActorBgCollisionCheck.h:554
List::Node mListNodeWallL
Definition ActorBgCollisionCheck.h:555
sead::UnsafeArray< u64, cDirType_Num > SensorHitBgCheckDataArray
Definition ActorBgCollisionCheck.h:278
void set(Actor *owner, const Sensor *foot, const Sensor *head, const Sensor *wall)
Initialize the checker with the owner and sensors.
FollowArg mFollowArg
Definition ActorBgCollisionCheck.h:558
SensorArray mSensor3
Definition ActorBgCollisionCheck.h:579
BgCollision * getHitBgCollisionWall(DirType direction) const
sead::BoundBox2f _8e4
Definition ActorBgCollisionCheck.h:564
sead::UnsafeArray< Sensor, cDirType_NumX > WallSensorArray
Definition ActorBgCollisionCheck.h:268
Angle getWallAngle(DirType dir)
bool isQuicksand() const
Definition ActorBgCollisionCheck.h:462
WallSensorBoolArray mIsSensor4SetPrev
Definition ActorBgCollisionCheck.h:582
sead::UnsafeArray< ActorBgCollisionCheckResult, cBgCollisionCat_Num > BgCheckResultArray
Definition ActorBgCollisionCheck.h:275
SensorBgCollisionCatArray mBgCheckResultIdx
Definition ActorBgCollisionCheck.h:584
Output mOutput
Definition ActorBgCollisionCheck.h:559
SensorHitBgCheckDataArray mBgCheckDataPrev
Definition ActorBgCollisionCheck.h:590
virtual s8 * vf4C(f32) const =0
static WaterType checkWater(f32 *surface_pos_y, BgCollisionCheckHitResult *hit_result, const sead::Vector3f &pos, u8 layer)
f32 _90c
Definition ActorBgCollisionCheck.h:567
BasicBgCollisionCheck & getBgCheck()
Definition ActorBgCollisionCheck.h:523
void setIgnoreActor(Actor *actor)
Definition ActorBgCollisionCheck.h:432
const BasicBgCollisionCheck & getBgCheck() const
Definition ActorBgCollisionCheck.h:528
bool checkFoot() const
Definition ActorBgCollisionCheck.h:442
const sead::Vector2f & getBgSpeed() const
Definition ActorBgCollisionCheck.h:472
SakaDir
Definition ActorBgCollisionCheck.h:78
@ cSakaDir_Left
Definition ActorBgCollisionCheck.h:80
@ cSakaDir_Right
Definition ActorBgCollisionCheck.h:79
const FollowArg & getFollowArg() const
Definition ActorBgCollisionCheck.h:437
virtual void checkWall_(u8 direction)
void setSensorHead(const Sensor *head)
Definition ActorBgCollisionCheck.h:338
sead::UnsafeArray< SensorFlag, cDirType_Num > SensorFlagArray
Definition ActorBgCollisionCheck.h:271
void setSensor(const Sensor *sensor, u8 direction)
virtual ~ActorBgCollisionCheck()
Actor * mIgnoreActor
Definition ActorBgCollisionCheck.h:557
Actor * getOwner() const
Definition ActorBgCollisionCheck.h:317
bool checkHead() const
Definition ActorBgCollisionCheck.h:447
SensorHitBgCheckDataArray mBgCheckData
Definition ActorBgCollisionCheck.h:589
Output & getOutput()
Definition ActorBgCollisionCheck.h:439
LineNodeMgr< ActorBgCollisionCheck > List
Definition ActorBgCollisionCheck.h:547
SensorFlagArray mSensorFlag
Definition ActorBgCollisionCheck.h:583
SensorBgCheckResultArray mBgCheckResultPrev
Definition ActorBgCollisionCheck.h:588
bool _916
Definition ActorBgCollisionCheck.h:571
const Sensor * getSensor2(DirType direction) const
Definition ActorBgCollisionCheck.h:398
BgCollision * getHitBgCollisionHead() const
static WaterType checkWater(f32 *surface_pos_y, const sead::Vector3f &pos, u8 layer)
void setSensorWall(const Sensor *wall_r)
Definition ActorBgCollisionCheck.h:343
Sensor * getSensor2(DirType direction)
Definition ActorBgCollisionCheck.h:393
sead::UnsafeArray< bool, cDirType_Num > SensorBoolArray
Definition ActorBgCollisionCheck.h:267
sead::UnsafeArray< BgCollisionCat, cDirType_Num > SensorBgCollisionCatArray
Definition ActorBgCollisionCheck.h:273
virtual Actor * getOwnerAtHit(const BgCollision &bg_collision, u8 direction) const =0
Angle getHeadSakaAngle(DirType dir)
SensorArray mSensor1
Definition ActorBgCollisionCheck.h:577
bool _917
Definition ActorBgCollisionCheck.h:572
BgCollision * getHitBgCollisionFoot() const
static WaterType checkWater(const sead::Vector3f &pos, u8 layer)
SensorBoolArray mIsSensor1Set
Definition ActorBgCollisionCheck.h:574
bool _918
Definition ActorBgCollisionCheck.h:573
Actor * getIgnoreActor() const
Definition ActorBgCollisionCheck.h:427
sead::BoundBox2f _8b4
Definition ActorBgCollisionCheck.h:561
virtual void atFrameStart()
bool checkWall(DirType direction) const
Definition ActorBgCollisionCheck.h:452
const u64 & getBgCheckDataPrev(DirType direction) const
Definition ActorBgCollisionCheck.h:494
sead::UnsafeArray< bool, cDirType_NumX > WallSensorBoolArray
Definition ActorBgCollisionCheck.h:269
List::Node mListNodeFoot
Definition ActorBgCollisionCheck.h:552
Definition BgCollision.h:19
Definition ActorBgCollisionCheck.h:258
f32 p2
Definition ActorBgCollisionCheck.h:260
f32 p1
Definition ActorBgCollisionCheck.h:259
f32 center_offset
Definition ActorBgCollisionCheck.h:261
Definition BgCollisionCheckHitResult.h:6