| 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 | |
| 13 | AppearSwitchSave::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 | |
| 68 | void 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 | |
| 90 | void 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 | |
| 105 | bool AppearSwitchSave::isOn() const { |
| 106 | return mIsOn; |
| 107 | } |
| 108 | |