mirror of
https://github.com/MonsterDruide1/OdysseyDecomp
synced 2026-04-27 02:54:08 +00:00
64 lines
1.9 KiB
C++
64 lines
1.9 KiB
C++
#include "Library/MapObj/SurfMapParts.h"
|
|
|
|
#include "Library/Collision/CollisionPartsKeeperUtil.h"
|
|
#include "Library/Collision/CollisionPartsTriangle.h"
|
|
#include "Library/Collision/KCollisionServer.h"
|
|
#include "Library/LiveActor/ActorAreaFunction.h"
|
|
#include "Library/LiveActor/ActorInitUtil.h"
|
|
#include "Library/LiveActor/ActorPoseUtil.h"
|
|
#include "Library/Math/MathUtil.h"
|
|
#include "Library/Nerve/NerveSetupUtil.h"
|
|
#include "Library/Placement/PlacementFunction.h"
|
|
|
|
namespace {
|
|
using namespace al;
|
|
|
|
NERVE_IMPL(SurfMapParts, Wait)
|
|
|
|
NERVES_MAKE_STRUCT(SurfMapParts, Wait)
|
|
} // namespace
|
|
|
|
namespace al {
|
|
SurfMapParts::SurfMapParts(const char* name) : LiveActor(name) {}
|
|
|
|
void SurfMapParts::init(const ActorInitInfo& info) {
|
|
initMapPartsActor(this, info, nullptr);
|
|
tryGetQuatPtr(this);
|
|
initNerve(this, &NrvSurfMapParts.Wait, 0);
|
|
registerAreaHostMtx(this, info);
|
|
|
|
tryGetArg(&mIsEnableSlope, info, "IsEnableSlope");
|
|
|
|
initMaterialCode(this, info);
|
|
|
|
mQuat = getQuat(this);
|
|
mTrans = getTrans(this);
|
|
calcQuatUp(&mUpDir, mQuat);
|
|
|
|
mCollisionPartsFilterActor = new CollisionPartsFilterActor(this);
|
|
|
|
trySyncStageSwitchAppear(this);
|
|
}
|
|
|
|
void SurfMapParts::exeWait() {
|
|
sead::Vector3f hitPos;
|
|
Triangle triangle;
|
|
sead::Vector3f trans = getTrans(this);
|
|
|
|
if (alCollisionUtil::getFirstPolyOnArrow(
|
|
this, &hitPos, &triangle, getTrans(this) + mCheckOffset * sead::Vector3f::ey * 0.5f,
|
|
-mCheckOffset * sead::Vector3f::ey, mCollisionPartsFilterActor, nullptr)) {
|
|
setTrans(this, trans * 0.9f + hitPos * 0.1f);
|
|
if (mIsEnableSlope) {
|
|
sead::Quatf quat;
|
|
sead::Vector3f normal = triangle.getNormal(0);
|
|
turnQuatYDirRate(&quat, getQuat(this), normal, 0.1f);
|
|
calcQuatUp(&mUpDir, quat);
|
|
}
|
|
}
|
|
|
|
if (mIsEnableSlope)
|
|
turnQuatYDirRate(getQuatPtr(this), mQuat, mUpDir, 1.0f);
|
|
}
|
|
} // namespace al
|