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>
66
67
68
78 static_assert(
sizeof(
SakaType) == 4);
82
83
84
153 default:
return false;
207 static_assert(
sizeof(
Output) == 4);
271 static_assert(
sizeof(
Sensor) == 0xC);
316
317
318
319
320
321
322
330 template <
typename T>
333 return sead::DynamicCast<T>(mOwner);
343 setSensor(foot, cDirType_Down);
348 setSensor(head, cDirType_Up);
353 setSensor(wall_r, cDirType_Right);
354 if (wall_r !=
nullptr)
357 wall_l.center_offset *= -1.0f;
358 setSensor(&wall_l, cDirType_Left);
362 setSensor(
nullptr, cDirType_Left);
413 if (isSensor1Set(direction))
415 if (!isSensor1Null(direction))
416 return getSensor1(direction);
418 else if (isSensor2Set(direction))
420 return getSensor2(direction);
487 return mHitDirectionFlag & hit_dir_flag;
517 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
u64 mBgCheckData
Definition ActorBgCollisionCheck.h:49
void setOwner(BgCollision *)
Angle _34
Definition ActorBgCollisionCheck.h:51
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:106
bool checkRide() const
Definition ActorBgCollisionCheck.h:157
bool checkWall(u8 direction) const
Definition ActorBgCollisionCheck.h:147
bool checkHead() const
Definition ActorBgCollisionCheck.h:143
bool isQuicksand() const
Definition ActorBgCollisionCheck.h:172
bool checkLeftWall() const
Definition ActorBgCollisionCheck.h:145
bool isInQuicksand() const
Definition ActorBgCollisionCheck.h:167
bool isOnTrampoline() const
Definition ActorBgCollisionCheck.h:197
bool checkRightWallEx() const
Definition ActorBgCollisionCheck.h:182
bool checkFoot() const
Definition ActorBgCollisionCheck.h:142
bool checkWallEx(DirType direction) const
Definition ActorBgCollisionCheck.h:192
bool isOnQuicksand() const
Definition ActorBgCollisionCheck.h:162
void setFoot()
Definition ActorBgCollisionCheck.h:202
Bit
Definition ActorBgCollisionCheck.h:109
@ cBit_OnRide
Definition ActorBgCollisionCheck.h:112
@ cBit_Unk15
Definition ActorBgCollisionCheck.h:123
@ cBit_Unk27
Definition ActorBgCollisionCheck.h:134
@ cBit_Unk29
Definition ActorBgCollisionCheck.h:136
@ cBit_Unk14
Definition ActorBgCollisionCheck.h:122
@ cBit_OnGround
Definition ActorBgCollisionCheck.h:110
@ cBit_Unk6
Definition ActorBgCollisionCheck.h:116
@ cBit_Unk31
Definition ActorBgCollisionCheck.h:138
@ cBit_Unk9
Definition ActorBgCollisionCheck.h:119
@ cBit_Unk24
Definition ActorBgCollisionCheck.h:132
@ cBit_WallRCollision
Definition ActorBgCollisionCheck.h:126
@ cBit_Unk28
Definition ActorBgCollisionCheck.h:135
@ cBit_OnHalf
Definition ActorBgCollisionCheck.h:114
@ cBit_InQuicksand
Definition ActorBgCollisionCheck.h:124
@ cBit_OnTrampoline
Definition ActorBgCollisionCheck.h:113
@ cBit_CarryRelatedL
Definition ActorBgCollisionCheck.h:129
@ cBit_WallLCollision
Definition ActorBgCollisionCheck.h:127
@ cBit_OnSlope
Definition ActorBgCollisionCheck.h:111
@ cBit_HeadCollision
Definition ActorBgCollisionCheck.h:120
@ cBit_Unk5
Definition ActorBgCollisionCheck.h:115
@ cBit_Unk17
Definition ActorBgCollisionCheck.h:125
@ cBit_CarryRelatedR
Definition ActorBgCollisionCheck.h:128
@ cBit_OnHorzPipe
Definition ActorBgCollisionCheck.h:117
@ cBit_OnQuicksand
Definition ActorBgCollisionCheck.h:118
@ cBit_Unk22
Definition ActorBgCollisionCheck.h:130
@ cBit_Unk13
Definition ActorBgCollisionCheck.h:121
@ cBit_Unk26
Definition ActorBgCollisionCheck.h:133
@ cBit_Unk23
Definition ActorBgCollisionCheck.h:131
@ cBit_Unk30
Definition ActorBgCollisionCheck.h:137
bool checkRightWall() const
Definition ActorBgCollisionCheck.h:144
bool checkLeftWallEx() const
Definition ActorBgCollisionCheck.h:187
bool checkHeadEx() const
Definition ActorBgCollisionCheck.h:177
Definition ActorBgCollisionCheck.h:210
Bit
Definition ActorBgCollisionCheck.h:213
@ cBit_Inactive
Definition ActorBgCollisionCheck.h:242
@ cBit_24
Definition ActorBgCollisionCheck.h:236
@ cBit_51
Definition ActorBgCollisionCheck.h:254
@ cBit_13
Definition ActorBgCollisionCheck.h:226
@ cBit_4
Definition ActorBgCollisionCheck.h:218
@ cBit_21
Definition ActorBgCollisionCheck.h:233
@ cBit_26
Definition ActorBgCollisionCheck.h:238
@ cBit_54
Definition ActorBgCollisionCheck.h:257
@ cBit_38
Definition ActorBgCollisionCheck.h:246
@ cBit_27
Definition ActorBgCollisionCheck.h:239
@ cBit_46
Definition ActorBgCollisionCheck.h:250
@ cBit_15
Definition ActorBgCollisionCheck.h:228
@ cBit_43
Definition ActorBgCollisionCheck.h:248
@ cBit_18
Definition ActorBgCollisionCheck.h:231
@ cBit_10
Definition ActorBgCollisionCheck.h:224
@ cBit_BreakBlocks
Definition ActorBgCollisionCheck.h:251
@ cBit_28
Definition ActorBgCollisionCheck.h:240
@ cBit_1
Definition ActorBgCollisionCheck.h:215
@ cBit_52
Definition ActorBgCollisionCheck.h:255
@ cBit_9
Definition ActorBgCollisionCheck.h:223
@ cBit_16
Definition ActorBgCollisionCheck.h:229
@ cBit_50
Definition ActorBgCollisionCheck.h:253
@ cBit_8
Definition ActorBgCollisionCheck.h:222
@ cBit_23
Definition ActorBgCollisionCheck.h:235
@ cBit_55
Definition ActorBgCollisionCheck.h:258
@ cBit_5
Definition ActorBgCollisionCheck.h:219
@ cBit_17
Definition ActorBgCollisionCheck.h:230
@ cBit_14
Definition ActorBgCollisionCheck.h:227
@ cBit_6
Definition ActorBgCollisionCheck.h:220
@ cBit_22
Definition ActorBgCollisionCheck.h:234
@ cBit_36
Definition ActorBgCollisionCheck.h:244
@ cBit_56
Definition ActorBgCollisionCheck.h:259
@ cBit_3
Definition ActorBgCollisionCheck.h:217
@ cBit_0
Definition ActorBgCollisionCheck.h:214
Definition ActorBgCollisionCheck.h:59
sead::FixedPtrArray< BgCollision, 512 > _54
Definition ActorBgCollisionCheck.h:559
SensorBgCollisionCatArray mBgCheckResultIdxPrev
Definition ActorBgCollisionCheck.h:593
sead::UnsafeArray< BgCheckResultArray, cDirType_Num > SensorBgCheckResultArray
Definition ActorBgCollisionCheck.h:284
SensorBoolArray mIsSensor2Set
Definition ActorBgCollisionCheck.h:584
bool isSensor2Set(DirType direction) const
Definition ActorBgCollisionCheck.h:376
T * getOwner() const
Definition ActorBgCollisionCheck.h:331
bool isSensor1Null(DirType direction) const
Definition ActorBgCollisionCheck.h:371
const Sensor * getSensorEffective(DirType direction) const
Definition ActorBgCollisionCheck.h:411
bool isSaka()
Definition ActorBgCollisionCheck.h:515
WallSensorArray mSensor4
Definition ActorBgCollisionCheck.h:588
bool mIsInitialized
Definition ActorBgCollisionCheck.h:578
Actor * mOwner
Definition ActorBgCollisionCheck.h:564
SensorFlag & getSensorFlag(DirType direction)
Definition ActorBgCollisionCheck.h:425
SensorBgCheckResultArray mBgCheckResult
Definition ActorBgCollisionCheck.h:595
virtual Actor * getOwnerAtRevCheck(f32 bg_collision_pos_y) const =0
u8 mHitDirectionFlag
Definition ActorBgCollisionCheck.h:577
const u64 & getBgCheckData(DirType direction) const
Definition ActorBgCollisionCheck.h:497
sead::BoundBox2f _8d4
Definition ActorBgCollisionCheck.h:571
HitDirBit
Definition ActorBgCollisionCheck.h:92
@ cHitDirBit_Right
Definition ActorBgCollisionCheck.h:93
@ cHitDirBit_Down
Definition ActorBgCollisionCheck.h:96
@ cHitDirBit_Up
Definition ActorBgCollisionCheck.h:95
@ cHitDirBit_BoostBlock_Down
Definition ActorBgCollisionCheck.h:101
@ cHitDirBit_BoostBlock_Up
Definition ActorBgCollisionCheck.h:100
@ cHitDirBit_Left
Definition ActorBgCollisionCheck.h:94
@ cHitDirBit_BoostBlock_Right
Definition ActorBgCollisionCheck.h:98
@ cHitDirBit_BoostBlock_Left
Definition ActorBgCollisionCheck.h:99
bool isSensor1Set(DirType direction) const
Definition ActorBgCollisionCheck.h:366
sead::Vector2f mBgSpeed
Definition ActorBgCollisionCheck.h:574
static u32 checkWaterDepth(f32 x, f32 y, u8 layer)
SensorBoolArray mIsSensor1Null
Definition ActorBgCollisionCheck.h:583
List::Node mListNodeHead
Definition ActorBgCollisionCheck.h:561
Angle getHeadSakaBaseAngle()
WallSensorBoolArray mIsSensor4Set
Definition ActorBgCollisionCheck.h:589
sead::UnsafeArray< Sensor, cDirType_Num > SensorArray
Definition ActorBgCollisionCheck.h:274
virtual void checkHead_()
ActorBgHitCheckCallback mBgHitCheckCallback
Definition ActorBgCollisionCheck.h:558
bool checkRide() const
Definition ActorBgCollisionCheck.h:465
const Sensor * getSensor1(DirType direction) const
Definition ActorBgCollisionCheck.h:396
Sensor * getSensor1(DirType direction)
Definition ActorBgCollisionCheck.h:391
const Output & getOutput() const
Definition ActorBgCollisionCheck.h:448
Output mOutputPrev
Definition ActorBgCollisionCheck.h:568
u32 _910
Definition ActorBgCollisionCheck.h:576
SensorArray mSensor2
Definition ActorBgCollisionCheck.h:586
sead::BoundBox2f _8f4
Definition ActorBgCollisionCheck.h:573
Angle getSakaAngle(DirType dir)
bool isOnTrampoline() const
Definition ActorBgCollisionCheck.h:475
void setSensorFoot(const Sensor *foot)
Definition ActorBgCollisionCheck.h:341
sead::BoundBox2f _8c4
Definition ActorBgCollisionCheck.h:570
SakaType getSakaType(Angle saka_base_angle)
const SensorFlag & getSensorFlag(DirType direction) const
Definition ActorBgCollisionCheck.h:430
const Sensor * getSensor(u8 direction) const
BasicBgCollisionCheck mBgCheck
Definition ActorBgCollisionCheck.h:557
virtual void checkFoot_()
u32 _14d8
Definition ActorBgCollisionCheck.h:599
const SensorArray & getSensorArray2() const
Definition ActorBgCollisionCheck.h:386
bool isHit(u8 hit_dir_flag) const
Definition ActorBgCollisionCheck.h:485
const SensorArray & getSensorArray1() const
Definition ActorBgCollisionCheck.h:381
List::Node mListNodeWallR
Definition ActorBgCollisionCheck.h:562
List::Node mListNodeWallL
Definition ActorBgCollisionCheck.h:563
sead::UnsafeArray< u64, cDirType_Num > SensorHitBgCheckDataArray
Definition ActorBgCollisionCheck.h:286
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:566
SensorArray mSensor3
Definition ActorBgCollisionCheck.h:587
BgCollision * getHitBgCollisionWall(DirType direction) const
sead::BoundBox2f _8e4
Definition ActorBgCollisionCheck.h:572
sead::UnsafeArray< Sensor, cDirType_NumX > WallSensorArray
Definition ActorBgCollisionCheck.h:276
Angle getWallAngle(DirType dir)
bool isQuicksand() const
Definition ActorBgCollisionCheck.h:470
WallSensorBoolArray mIsSensor4SetPrev
Definition ActorBgCollisionCheck.h:590
sead::UnsafeArray< ActorBgCollisionCheckResult, cBgCollisionCat_Num > BgCheckResultArray
Definition ActorBgCollisionCheck.h:283
SensorBgCollisionCatArray mBgCheckResultIdx
Definition ActorBgCollisionCheck.h:592
Output mOutput
Definition ActorBgCollisionCheck.h:567
SensorHitBgCheckDataArray mBgCheckDataPrev
Definition ActorBgCollisionCheck.h:598
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:575
BasicBgCollisionCheck & getBgCheck()
Definition ActorBgCollisionCheck.h:531
void setIgnoreActor(Actor *actor)
Definition ActorBgCollisionCheck.h:440
const BasicBgCollisionCheck & getBgCheck() const
Definition ActorBgCollisionCheck.h:536
bool checkFoot() const
Definition ActorBgCollisionCheck.h:450
const sead::Vector2f & getBgSpeed() const
Definition ActorBgCollisionCheck.h:480
SakaDir
Defines the classification of terrain slope incline directions.
Definition ActorBgCollisionCheck.h:86
@ cSakaDir_Left
Definition ActorBgCollisionCheck.h:88
@ cSakaDir_Right
Definition ActorBgCollisionCheck.h:87
const FollowArg & getFollowArg() const
Definition ActorBgCollisionCheck.h:445
virtual void checkWall_(u8 direction)
void setSensorHead(const Sensor *head)
Definition ActorBgCollisionCheck.h:346
sead::UnsafeArray< SensorFlag, cDirType_Num > SensorFlagArray
Definition ActorBgCollisionCheck.h:279
void setSensor(const Sensor *sensor, u8 direction)
virtual ~ActorBgCollisionCheck()
Actor * mIgnoreActor
Definition ActorBgCollisionCheck.h:565
Actor * getOwner() const
Definition ActorBgCollisionCheck.h:325
bool checkHead() const
Definition ActorBgCollisionCheck.h:455
SensorHitBgCheckDataArray mBgCheckData
Definition ActorBgCollisionCheck.h:597
Output & getOutput()
Definition ActorBgCollisionCheck.h:447
LineNodeMgr< ActorBgCollisionCheck > List
Definition ActorBgCollisionCheck.h:555
SensorFlagArray mSensorFlag
Definition ActorBgCollisionCheck.h:591
SensorBgCheckResultArray mBgCheckResultPrev
Definition ActorBgCollisionCheck.h:596
bool _916
Definition ActorBgCollisionCheck.h:579
const Sensor * getSensor2(DirType direction) const
Definition ActorBgCollisionCheck.h:406
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:351
Sensor * getSensor2(DirType direction)
Definition ActorBgCollisionCheck.h:401
sead::UnsafeArray< bool, cDirType_Num > SensorBoolArray
Definition ActorBgCollisionCheck.h:275
sead::UnsafeArray< BgCollisionCat, cDirType_Num > SensorBgCollisionCatArray
Definition ActorBgCollisionCheck.h:281
virtual Actor * getOwnerAtHit(const BgCollision &bg_collision, u8 direction) const =0
Angle getHeadSakaAngle(DirType dir)
SensorArray mSensor1
Definition ActorBgCollisionCheck.h:585
bool _917
Definition ActorBgCollisionCheck.h:580
BgCollision * getHitBgCollisionFoot() const
static WaterType checkWater(const sead::Vector3f &pos, u8 layer)
SensorBoolArray mIsSensor1Set
Definition ActorBgCollisionCheck.h:582
bool _918
Definition ActorBgCollisionCheck.h:581
Actor * getIgnoreActor() const
Definition ActorBgCollisionCheck.h:435
sead::BoundBox2f _8b4
Definition ActorBgCollisionCheck.h:569
virtual void atFrameStart()
bool checkWall(DirType direction) const
Definition ActorBgCollisionCheck.h:460
const u64 & getBgCheckDataPrev(DirType direction) const
Definition ActorBgCollisionCheck.h:502
sead::UnsafeArray< bool, cDirType_NumX > WallSensorBoolArray
Definition ActorBgCollisionCheck.h:277
List::Node mListNodeFoot
Definition ActorBgCollisionCheck.h:560
Definition BgCollision.h:19
Definition ActorBgCollisionCheck.h:266
f32 p2
Definition ActorBgCollisionCheck.h:268
f32 p1
Definition ActorBgCollisionCheck.h:267
f32 center_offset
Definition ActorBgCollisionCheck.h:269
Definition BgCollisionCheckHitResult.h:6