1#include "MapObj/AppearSwitchSave.h"
2
3#include "Library/LiveActor/ActorInitUtil.h"
4#include "Library/LiveActor/ActorSensorUtil.h"
5#include "Library/LiveActor/LiveActor.h"
6#include "Library/Placement/PlacementFunction.h"
7
8#include "MapObj/RiseMapPartsHolder.h"
9#include "System/GameDataUtil.h"
10#include "System/SaveObjInfo.h"
11#include "Util/SensorMsgFunction.h"
12
13AppearSwitchSave::AppearSwitchSave(al::LiveActor* actor, const al::ActorInitInfo& info)
14 : mSwitchActor(actor) {
15 mSaveObjInfo = rs::createSaveObjInfoWriteSaveData(actorInitInfo: info);
16 if (rs::isOnSaveObjInfo(saveObjInfo: mSaveObjInfo))
17 mIsOn = true;
18 else
19 mIsOn = rs::isSequenceTimeBalloonOrRace(actor);
20
21 mAppearTargetNum = al::calcLinkChildNum(initInfo: info, linkName: "AppearTarget");
22 mAppearTargetArray = new al::LiveActor*[mAppearTargetNum];
23 for (s32 i = 0; i < mAppearTargetNum; i++) {
24 mAppearTargetArray[i] = al::createLinksActorFromFactory(initInfo: info, linkName: "AppearTarget", linkNum: i);
25 if (!mAppearTargetArray[i]) {
26 mAppearTargetNum = 0;
27 break;
28 }
29 if (mIsOn) {
30 if (mAppearTargetArray[i]->getHitSensorKeeper())
31 al::sendMsgSwitchOnInit(receiver: mAppearTargetArray[i]);
32 } else if (mAppearTargetArray[i]->getHitSensorKeeper()) {
33 al::sendMsgSwitchOffInit(receiver: mAppearTargetArray[i]);
34 }
35 }
36
37 mKillTargetNum = al::calcLinkChildNum(initInfo: info, linkName: "KillTarget");
38 mKillTargetArray = new al::LiveActor*[mKillTargetNum];
39 for (s32 i = 0; i < mKillTargetNum; i++) {
40 mKillTargetArray[i] = al::createLinksActorFromFactory(initInfo: info, linkName: "KillTarget", linkNum: i);
41 if (mIsOn) {
42 if (mKillTargetArray[i]->getHitSensorKeeper())
43 al::sendMsgSwitchOnInit(receiver: mKillTargetArray[i]);
44 } else if (mKillTargetArray[i]->getHitSensorKeeper()) {
45 al::sendMsgSwitchOffInit(receiver: mKillTargetArray[i]);
46 }
47 }
48
49 mRiseMapPartsNum = al::calcLinkChildNum(initInfo: info, linkName: "DemoObjWithRiseParts");
50 mRiseMapPartsArray = new RiseMapParts*[mRiseMapPartsNum];
51 for (s32 i = 0; i < mRiseMapPartsNum; i++)
52 mRiseMapPartsArray[i] =
53 (RiseMapParts*)al::createLinksActorFromFactory(initInfo: info, linkName: "DemoObjWithRiseParts", linkNum: i);
54
55 if (al::isExistLinkChild(initInfo: info, linkName: "RiseParts", index: 0)) {
56 mRiseMapPartsHolder = new RiseMapPartsHolder("隆起パーツ管理者");
57 al::initCreateActorWithPlacementInfo(actor: mRiseMapPartsHolder, initInfo: info);
58 if (mIsOn)
59 al::sendMsgSwitchOnInit(receiver: mRiseMapPartsHolder);
60 else
61 al::sendMsgSwitchOffInit(receiver: mRiseMapPartsHolder);
62
63 mRiseMapPartsHolder->setSwitchActor(mSwitchActor);
64 mRiseMapPartsHolder->setRiseMapPartsArray(riseMapPartsArray: mRiseMapPartsArray, num: mRiseMapPartsNum);
65 }
66}
67
68void AppearSwitchSave::onSwitch() {
69 bool isInfoSave = true;
70 for (s32 i = 0; i < mAppearTargetNum; i++) {
71 if (mAppearTargetArray[i]->getHitSensorKeeper()) {
72 if (rs::sendMsgSwitchOnWithSaveRequest(mAppearTargetArray[i], mSaveObjInfo))
73 isInfoSave = false;
74 else if (mAppearTargetArray[i]->getHitSensorKeeper())
75 al::sendMsgSwitchOn(receiver: mAppearTargetArray[i]);
76 }
77 }
78
79 for (s32 i = 0; i < mKillTargetNum; i++)
80 if (mKillTargetArray[i]->getHitSensorKeeper())
81 al::sendMsgSwitchKillOn(receiver: mKillTargetArray[i]);
82
83 if (mRiseMapPartsHolder)
84 rs::sendMsgSwitchOnWithSaveRequest(mRiseMapPartsHolder, mSaveObjInfo);
85 else if (isInfoSave)
86 rs::onSaveObjInfo(saveObjInfo: mSaveObjInfo);
87 mIsOn = true;
88}
89
90void AppearSwitchSave::onSwitchDemo() {
91 for (s32 i = 0; i < mAppearTargetNum; i++)
92 if (mAppearTargetArray[i]->getHitSensorKeeper())
93 al::sendMsgSwitchOn(receiver: mAppearTargetArray[i]);
94
95 for (s32 i = 0; i < mKillTargetNum; i++)
96 if (mKillTargetArray[i]->getHitSensorKeeper())
97 al::sendMsgSwitchKillOn(receiver: mKillTargetArray[i]);
98
99 if (mRiseMapPartsHolder)
100 mRiseMapPartsHolder->startDemo(true);
101 rs::onSaveObjInfo(saveObjInfo: mSaveObjInfo);
102 mIsOn = true;
103}
104
105bool AppearSwitchSave::isOn() const {
106 return mIsOn;
107}
108