| 1 | #include "Library/Area/SwitchAreaDirector.h" |
| 2 | |
| 3 | #include "Library/Area/AreaObjDirector.h" |
| 4 | #include "Library/Area/SwitchAreaTargetInfo.h" |
| 5 | #include "Library/Area/SwitchKeepOnAreaGroup.h" |
| 6 | #include "Library/Area/SwitchOnAreaGroup.h" |
| 7 | #include "Library/Camera/CameraDirector.h" |
| 8 | #include "Library/Camera/CameraUtil.h" |
| 9 | |
| 10 | namespace al { |
| 11 | SwitchAreaDirector* SwitchAreaDirector::tryCreate(AreaObjDirector* areaObjDirector, |
| 12 | const PlayerHolder* playerHolder, |
| 13 | const CameraDirector* cameraDirector, |
| 14 | s32 switchOnAreaGroupCount, |
| 15 | s32 switchKeepOnAreaGroupCount) { |
| 16 | return new SwitchAreaDirector(areaObjDirector, playerHolder, cameraDirector, |
| 17 | switchOnAreaGroupCount, switchKeepOnAreaGroupCount); |
| 18 | } |
| 19 | |
| 20 | void SwitchAreaDirector::update() { |
| 21 | if (!mHasSwitchAreas) |
| 22 | return; |
| 23 | |
| 24 | mSwitchAreaTargetInfo->update(playerHolder: mPlayerHolder, sceneCameraInfo: mCameraDirector->getSceneCameraInfo()); |
| 25 | |
| 26 | for (SwitchOnAreaGroup& switchOnAreaGroup : mSwitchOnAreaGroups) |
| 27 | switchOnAreaGroup.update(trans: mSwitchAreaTargetInfo->getPlayerTargetPositions(), |
| 28 | mSwitchAreaTargetInfo->getPlayerTargetPositionCount()); |
| 29 | |
| 30 | getCameraAt(info: mCameraDirector->getSceneCameraInfo(), viewIdx: 0); |
| 31 | |
| 32 | for (SwitchKeepOnAreaGroup& switchKeepOnAreaGroup : mSwitchKeepOnAreaGroups) |
| 33 | switchKeepOnAreaGroup.update(info: mSwitchAreaTargetInfo); |
| 34 | } |
| 35 | |
| 36 | void SwitchAreaDirector::endInit() { |
| 37 | mHasSwitchAreas = mSwitchOnAreaGroups.size() != 0 || mSwitchKeepOnAreaGroups.size() != 0; |
| 38 | } |
| 39 | |
| 40 | void SwitchAreaDirector::registerSwitchOnAreaGroup(SwitchOnAreaGroup* switchOnAreaGroup) { |
| 41 | mSwitchOnAreaGroups.pushBack(ptr: switchOnAreaGroup); |
| 42 | } |
| 43 | |
| 44 | void SwitchAreaDirector::registerSwitchKeepOnAreaGroup( |
| 45 | SwitchKeepOnAreaGroup* switchKeepOnAreaGroup) { |
| 46 | mSwitchKeepOnAreaGroups.pushBack(ptr: switchKeepOnAreaGroup); |
| 47 | } |
| 48 | |
| 49 | SwitchAreaDirector::SwitchAreaDirector(AreaObjDirector* areaObjDirector, |
| 50 | const PlayerHolder* playerHolder, |
| 51 | const CameraDirector* cameraDirector, |
| 52 | s32 switchOnAreaGroupCount, s32 switchKeepOnAreaGroupCount) |
| 53 | : mAreaObjDirector(areaObjDirector), mPlayerHolder(playerHolder), |
| 54 | mCameraDirector(cameraDirector) { |
| 55 | mSwitchAreaTargetInfo = new SwitchAreaTargetInfo(16, 4); |
| 56 | |
| 57 | if (switchOnAreaGroupCount > 0) { |
| 58 | mSwitchOnAreaGroups.allocBuffer(ptrNumMax: switchOnAreaGroupCount, heap: nullptr); |
| 59 | AreaObjGroup* areaObjGroup = areaObjDirector->getAreaObjGroup(name: "SwitchOnArea" ); |
| 60 | if (areaObjGroup) |
| 61 | registerSwitchOnAreaGroup(switchOnAreaGroup: new SwitchOnAreaGroup(areaObjGroup)); |
| 62 | } |
| 63 | |
| 64 | if (switchKeepOnAreaGroupCount > 0) { |
| 65 | mSwitchKeepOnAreaGroups.allocBuffer(ptrNumMax: switchKeepOnAreaGroupCount, heap: nullptr); |
| 66 | AreaObjGroup* areaObjGroup = areaObjDirector->getAreaObjGroup(name: "SwitchKeepOnArea" ); |
| 67 | if (areaObjGroup) |
| 68 | registerSwitchKeepOnAreaGroup(switchKeepOnAreaGroup: new SwitchKeepOnAreaGroup(areaObjGroup)); |
| 69 | } |
| 70 | } |
| 71 | } // namespace al |
| 72 | |