1#include "ObjectSanbo.hh"
3#include "game/field/CollisionDirector.hh"
4#include "game/field/KColData.hh"
14ObjectSanbo::~ObjectSanbo() =
default;
17void ObjectSanbo::init() {
18 m_up = EGG::Vector3f::ey;
21 m_tangent = rot.
base(2);
24 m_railInterpolator->init(0.0f, 0);
28void ObjectSanbo::calc() {
33void ObjectSanbo::calcMove() {
34 constexpr f32 GRAVITY = 2.0f;
37 if (--m_stillDuration == 0) {
44 auto railStatus = m_railInterpolator->calc();
45 if (railStatus == RailInterpolator::Status::ChangingDirection) {
47 m_stillDuration = m_railInterpolator->curPoint().setting[0];
54 m_flags.setBit(eFlags::Position);
55 m_pos.y = m_yVel + m_pos.y;
62void ObjectSanbo::checkSphere() {
63 constexpr f32 RADIUS = 10.0f;
67 colInfo.bbox.setZero();
71 if (CollisionDirector::Instance()->checkSphereFull(RADIUS, m_pos + POS_OFFSET,
74 m_flags.setBit(eFlags::Position);
75 m_pos += colInfo.tangentOff;
76 norm = colInfo.floorNrm;
83 m_up += (norm - upNrm).multInv(60.0f);
86 setMatrixTangentTo(m_up, m_tangent);
#define KCL_TYPE_FLOOR
0x20E80FFF - Any KCL that the player or items can drive/land on.
Vector3f base(size_t col) const
Get a particular column from a matrix.
void makeR(const Vector3f &r)
Sets 3x3 rotation matrix from a vector of Euler angles.
f32 normalise()
Normalizes the vector and returns the original length.