1#include "System/SaveObjInfo.h"
2
3#include "Library/LiveActor/ActorInitInfo.h"
4
5#include "System/GameDataFunction.h"
6
7SaveObjInfo* SaveObjInfo::createSaveObjInfoWriteSaveData(const al::ActorInitInfo& initInfo,
8 const al::PlacementId* id) {
9 return new SaveObjInfo(initInfo, id, SaveType::Write);
10}
11
12SaveObjInfo*
13SaveObjInfo::createSaveObjInfoNoWriteSaveDataInSameWorld(const al::ActorInitInfo& initInfo,
14 const al::PlacementId* id) {
15 return new SaveObjInfo(initInfo, id, SaveType::NoWriteInSameWorld);
16}
17
18SaveObjInfo* SaveObjInfo::createSaveObjInfoNoWriteSaveDataInSameWorldResetMiniGame(
19 const al::ActorInitInfo& initInfo, const al::PlacementId* id) {
20 return new SaveObjInfo(initInfo, id, SaveType::NoWriteResetMinigame);
21}
22
23SaveObjInfo*
24SaveObjInfo::createSaveObjInfoNoWriteSaveDataInSameScenario(const al::ActorInitInfo& initInfo,
25 const al::PlacementId* id) {
26 return new SaveObjInfo(initInfo, id, SaveType::NoWriteInSameScenario);
27}
28
29SaveObjInfo::SaveObjInfo(const al::ActorInitInfo& initInfo, const al::PlacementId* placementId,
30 SaveType saveType)
31 : mPlacementId(placementId), mSaveType(saveType) {
32 mGameDataHolder = reinterpret_cast<GameDataHolder*>(initInfo.actorSceneInfo.gameDataHolder);
33 mIsOn = checkIsOn();
34}
35
36void SaveObjInfo::on() {
37 if (mIsOn)
38 return;
39
40 mIsOn = true;
41 switch (mSaveType) {
42 case SaveType::Write:
43 GameDataFunction::setObjStarted(holder: mGameDataHolder, obj: mPlacementId);
44 break;
45 case SaveType::NoWriteInSameWorld:
46 GameDataFunction::onObjNoWriteSaveData(writer: mGameDataHolder, obj: mPlacementId);
47 break;
48 case SaveType::NoWriteResetMinigame:
49 GameDataFunction::onObjNoWriteSaveDataResetMiniGame(writer: mGameDataHolder, obj: mPlacementId);
50 break;
51 case SaveType::NoWriteInSameScenario:
52 GameDataFunction::onObjNoWriteSaveDataInSameScenario(holder: mGameDataHolder, obj: mPlacementId);
53 break;
54 }
55}
56
57void SaveObjInfo::off() {
58 if (!mIsOn)
59 return;
60
61 mIsOn = false;
62
63 switch (mSaveType) {
64 case SaveType::NoWriteInSameWorld:
65 GameDataFunction::offObjNoWriteSaveData(writer: mGameDataHolder, obj: mPlacementId);
66 break;
67 case SaveType::NoWriteResetMinigame:
68 GameDataFunction::offObjNoWriteSaveDataResetMiniGame(writer: mGameDataHolder, obj: mPlacementId);
69 break;
70 default:
71 break;
72 }
73}
74
75bool SaveObjInfo::isOn() const {
76 return mIsOn;
77}
78
79void SaveObjInfo::resetByPlacementId(al::PlacementId* id) {
80 mPlacementId = id;
81 mIsOn = checkIsOn();
82}
83
84bool SaveObjInfo::checkIsOn() const {
85 switch (mSaveType) {
86 case SaveType::Write:
87 return GameDataFunction::isObjStarted(holder: mGameDataHolder, obj: mPlacementId);
88 case SaveType::NoWriteInSameWorld:
89 return GameDataFunction::isOnObjNoWriteSaveData(accessor: mGameDataHolder, obj: mPlacementId);
90 case SaveType::NoWriteResetMinigame:
91 return GameDataFunction::isOnObjNoWriteSaveDataResetMiniGame(accessor: mGameDataHolder, obj: mPlacementId);
92 case SaveType::NoWriteInSameScenario:
93 return GameDataFunction::isOnObjNoWriteSaveDataInSameScenario(holder: mGameDataHolder,
94 obj: mPlacementId);
95 default:
96 return false;
97 }
98}
99