OdysseyDecomp/lib/al/Library/MapObj/ChildStep.cpp
2025-02-24 13:40:05 +01:00

64 lines
1.8 KiB
C++

#include "Library/MapObj/ChildStep.h"
#include "Library/LiveActor/ActorClippingFunction.h"
#include "Library/LiveActor/ActorInitFunction.h"
#include "Library/LiveActor/ActorInitUtil.h"
#include "Library/LiveActor/ActorPoseUtil.h"
#include "Library/Nerve/NerveSetupUtil.h"
#include "Library/Placement/PlacementFunction.h"
namespace al {
namespace {
NERVE_IMPL(ChildStep, Wait)
NERVES_MAKE_STRUCT(ChildStep, Wait)
} // namespace
ChildStep::ChildStep(const char* name, LiveActor* parent) : LiveActor(name), mParent(parent) {}
void ChildStep::init(const ActorInitInfo& info) {
initMapPartsActor(this, info, nullptr);
initNerve(this, &NrvChildStep.Wait, 0);
multVecInvQuat(&mPos, mParent, getTrans(this));
makeActorAlive();
}
bool ChildStep::receiveMsg(const SensorMsg* message, HitSensor* other, HitSensor* self) {
return mParent->receiveMsg(message, other, self);
}
void ChildStep::exeWait() {
multVecPose(getTransPtr(this), mParent, mPos);
}
s32 calcChildStepCount(const ActorInitInfo& info) {
return calcLinkChildNum(info, "ChildStep");
}
void tryInitSubActorKeeperChildStep(LiveActor* actor, const ActorInitInfo& info) {
s32 childStepCount = calcChildStepCount(info);
if (childStepCount <= 0)
return;
initSubActorKeeperNoFile(actor, info, childStepCount);
}
void createChildStep(const ActorInitInfo& info, LiveActor* parent, bool isSyncClipping) {
s32 childStepCount = calcChildStepCount(info);
for (s32 i = 0; i < childStepCount; i++) {
ChildStep* childStep = new ChildStep("子供足場", parent);
initLinksActor(childStep, info, "ChildStep", i);
if (isSyncClipping) {
invalidateClipping(childStep);
registerSubActorSyncClipping(parent, childStep);
}
}
}
} // namespace al