1#pragma once
2
3#include <math/seadBoundBox.h>
4#include <math/seadMatrix.h>
5#include <math/seadQuat.h>
6#include <math/seadVector.h>
7
8namespace al {
9class PlacementInfo;
10class RollingCubePoseKeeper;
11class LiveActor;
12struct ActorInitInfo;
13
14RollingCubePoseKeeper* createRollingCubePoseKeeper(const LiveActor* actor,
15 const ActorInitInfo& initInfo);
16RollingCubePoseKeeper* createRollingCubePoseKeeper(const sead::BoundBox3f& cubeSize,
17 const ActorInitInfo& initInfo);
18bool nextRollingCubeKey(RollingCubePoseKeeper* keeper);
19void setStartRollingCubeKey(RollingCubePoseKeeper* keeper);
20void setRollingCubeKeyIndex(RollingCubePoseKeeper* keeper, s32);
21bool isMoveTypeLoopRollingCube(const RollingCubePoseKeeper* keeper);
22void fittingToCurrentKeyBoundingBox(sead::Quatf* outQuat, sead::Vector3f* outTrans,
23 const RollingCubePoseKeeper* keeper);
24void calcCurrentKeyQT(sead::Quatf* outQuat, sead::Vector3f* outTrans,
25 const RollingCubePoseKeeper* keeper, const sead::Quatf& quat,
26 const sead::Vector3f& trans, f32 rate);
27void getCurrentKeyQT(sead::Quatf* outQuat, sead::Vector3f* outTrans,
28 const RollingCubePoseKeeper* keeper);
29f32 getCurrentKeyRotateDegree(const RollingCubePoseKeeper* keeper);
30const sead::Vector3f& getCurrentKeySlideVec(const RollingCubePoseKeeper* keeper);
31s32 getCurrentKeyIndex(const RollingCubePoseKeeper* keeper);
32const PlacementInfo& getCurrentKeyPlacementInfo(const RollingCubePoseKeeper* keeper);
33bool isMovementCurrentKeyRotate(const RollingCubePoseKeeper* keeper);
34bool isMovementCurrentKeySlide(const RollingCubePoseKeeper* keeper);
35f32 calcDistanceCurrentKeyRotateCenterToBoxCenter(const RollingCubePoseKeeper* keeper);
36void calcMtxLandEffect(sead::Matrix34f* effectMtx, const RollingCubePoseKeeper* keeper,
37 const sead::Quatf& quat, const sead::Vector3f& trans);
38void calcRollingCubeClippingInfo(sead::Vector3f* clippingTrans, f32* clippingRadius,
39 const RollingCubePoseKeeper* keeper, f32 offset);
40} // namespace al
41