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
10namespace al {
11SwitchAreaDirector* 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
20void 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
36void SwitchAreaDirector::endInit() {
37 mHasSwitchAreas = mSwitchOnAreaGroups.size() != 0 || mSwitchKeepOnAreaGroups.size() != 0;
38}
39
40void SwitchAreaDirector::registerSwitchOnAreaGroup(SwitchOnAreaGroup* switchOnAreaGroup) {
41 mSwitchOnAreaGroups.pushBack(ptr: switchOnAreaGroup);
42}
43
44void SwitchAreaDirector::registerSwitchKeepOnAreaGroup(
45 SwitchKeepOnAreaGroup* switchKeepOnAreaGroup) {
46 mSwitchKeepOnAreaGroups.pushBack(ptr: switchKeepOnAreaGroup);
47}
48
49SwitchAreaDirector::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