1#include "Library/MapObj/SupportFreezeSyncGroupHolder.h"
2
3#include "Library/LiveActor/ActorInitFunction.h"
4#include "Library/LiveActor/ActorSensorUtil.h"
5#include "Project/LiveActor/SupportFreezeSyncGroup.h"
6
7namespace al {
8SupportFreezeSyncGroupHolder::SupportFreezeSyncGroupHolder() : LiveActor("DRC拘束グループ監視") {
9 mSupportFreezeSyncGroups = new SupportFreezeSyncGroup*[mSupportFreezeSyncGroupMaxCount];
10
11 for (s32 i = 0; i < mSupportFreezeSyncGroupMaxCount; i++)
12 mSupportFreezeSyncGroups[i] = nullptr;
13}
14
15void SupportFreezeSyncGroupHolder::initAfterPlacementSceneObj(const ActorInitInfo& info) {
16 initActorSceneInfo(actor: this, info);
17 initExecutorUpdate(actor: this, info, "DRCアシスト同期グループ");
18 initActorPoseTRSV(actor: this);
19
20 initHitSensor(amount: 1);
21
22 HitSensor* bodySensor = addHitSensorMapObj(this, info, "Body", 0.0f, 0, {0.0f, 0.0f, 0.0f});
23 for (s32 i = 0; i < mSupportFreezeSyncGroupCount; i++)
24 mSupportFreezeSyncGroups[i]->setHostSensor(bodySensor);
25
26 makeActorAlive();
27}
28
29void SupportFreezeSyncGroupHolder::movement() {
30 for (s32 i = 0; i < mSupportFreezeSyncGroupCount; i++)
31 mSupportFreezeSyncGroups[i]->movement();
32}
33
34void SupportFreezeSyncGroupHolder::regist(LiveActor* actor, const ActorInitInfo& info) {
35 SupportFreezeSyncGroup* supportFreezeSyncGroup = tryFindGroup(info);
36 if (supportFreezeSyncGroup == nullptr) {
37 supportFreezeSyncGroup = new SupportFreezeSyncGroup();
38 supportFreezeSyncGroup->init(info);
39
40 mSupportFreezeSyncGroups[mSupportFreezeSyncGroupCount] = supportFreezeSyncGroup;
41 mSupportFreezeSyncGroupCount++;
42 }
43
44 supportFreezeSyncGroup->regist(actor);
45}
46
47SupportFreezeSyncGroup* SupportFreezeSyncGroupHolder::tryFindGroup(const ActorInitInfo& info) {
48 for (s32 i = 0; i < mSupportFreezeSyncGroupCount; i++)
49 if (mSupportFreezeSyncGroups[i]->isEqualGroupId(info))
50 return mSupportFreezeSyncGroups[i];
51
52 return nullptr;
53}
54} // namespace al
55