OdysseyDecomp/lib/al/Library/MapObj/SupportFreezeSyncGroupHolder.cpp

55 lines
1.9 KiB
C++

#include "Library/MapObj/SupportFreezeSyncGroupHolder.h"
#include "Library/LiveActor/ActorInitFunction.h"
#include "Library/LiveActor/ActorSensorUtil.h"
#include "Project/LiveActor/SupportFreezeSyncGroup.h"
namespace al {
SupportFreezeSyncGroupHolder::SupportFreezeSyncGroupHolder() : LiveActor("DRC拘束グループ監視") {
mSupportFreezeSyncGroups = new SupportFreezeSyncGroup*[mSupportFreezeSyncGroupMaxCount];
for (s32 i = 0; i < mSupportFreezeSyncGroupMaxCount; i++)
mSupportFreezeSyncGroups[i] = nullptr;
}
void SupportFreezeSyncGroupHolder::initAfterPlacementSceneObj(const ActorInitInfo& info) {
initActorSceneInfo(this, info);
initExecutorUpdate(this, info, "DRCアシスト同期グループ");
initActorPoseTRSV(this);
initHitSensor(1);
HitSensor* bodySensor = addHitSensorMapObj(this, info, "Body", 0.0f, 0, {0.0f, 0.0f, 0.0f});
for (s32 i = 0; i < mSupportFreezeSyncGroupCount; i++)
mSupportFreezeSyncGroups[i]->setHostSensor(bodySensor);
makeActorAlive();
}
void SupportFreezeSyncGroupHolder::movement() {
for (s32 i = 0; i < mSupportFreezeSyncGroupCount; i++)
mSupportFreezeSyncGroups[i]->movement();
}
void SupportFreezeSyncGroupHolder::regist(LiveActor* actor, const ActorInitInfo& info) {
SupportFreezeSyncGroup* supportFreezeSyncGroup = tryFindGroup(info);
if (!supportFreezeSyncGroup) {
supportFreezeSyncGroup = new SupportFreezeSyncGroup();
supportFreezeSyncGroup->init(info);
mSupportFreezeSyncGroups[mSupportFreezeSyncGroupCount] = supportFreezeSyncGroup;
mSupportFreezeSyncGroupCount++;
}
supportFreezeSyncGroup->regist(actor);
}
SupportFreezeSyncGroup* SupportFreezeSyncGroupHolder::tryFindGroup(const ActorInitInfo& info) {
for (s32 i = 0; i < mSupportFreezeSyncGroupCount; i++)
if (mSupportFreezeSyncGroups[i]->isEqualGroupId(info))
return mSupportFreezeSyncGroups[i];
return nullptr;
}
} // namespace al