1#pragma once
2
3#include <math/seadMatrix.h>
4
5#include "Library/Placement/PlacementInfo.h"
6
7namespace al {
8class AreaObj;
9class MtxConnector;
10class PlacementInfo;
11class ValidatorBase;
12
13class AreaObjMtxConnecter {
14public:
15 AreaObjMtxConnecter(AreaObj* areaObj, const PlacementInfo& placementInfo);
16 bool trySetParentMtx(const sead::Matrix34f* parentMtx, const PlacementInfo& placementInfo,
17 const ValidatorBase* validatorBase);
18 bool trySyncParentMtx(const sead::Matrix34f* parentMtx, const PlacementInfo& placementInfo,
19 const ValidatorBase* validatorBase);
20 void update();
21
22private:
23 AreaObj* mAreaObj;
24 sead::Matrix34f mMatrix;
25 MtxConnector* mMtxConnector = nullptr;
26 PlacementInfo mPlacementInfo;
27 ValidatorBase* mValidatorBase = nullptr;
28};
29
30class AreaObjMtxConnecterHolder {
31public:
32 AreaObjMtxConnecterHolder(s32 capacity);
33 void registerParentMtx(const sead::Matrix34f* parentMtx, const PlacementInfo& placementInfo,
34 const ValidatorBase* validatorBase);
35 void registerSyncParentMtx(const sead::Matrix34f* parentMtx, const PlacementInfo& placementInfo,
36 const ValidatorBase* validatorBase);
37 bool tryAddArea(AreaObj* areaObj, const PlacementInfo& placementInfo);
38 void update();
39
40private:
41 AreaObjMtxConnecter** mMtxConnectors;
42 s32 mNumConnectors = 0;
43 s32 mCapacity;
44};
45
46} // namespace al
47