1#pragma once
2
3#include <prim/seadSafeString.h>
4
5namespace al {
6class Resource;
7class ByamlIter;
8class CameraTicketId;
9class PlacementId;
10
11class CameraResourceHolder {
12public:
13 struct Entry {
14 ByamlIter* cameraParam = nullptr;
15 ByamlIter* interpoleParam = nullptr;
16 sead::FixedSafeString<128> stageName = {""};
17 };
18
19 enum ParamType : s32 {
20 DefaultTickets = 0,
21 StartTickets = 2,
22 Tickets // any other value
23 };
24
25 CameraResourceHolder(const char* stageName, s32 maxResources);
26
27 bool tryInitCameraResource(const Resource* resource, s32 unused);
28 bool tryFindParamResource(ByamlIter* ticket, const CameraTicketId* ticketId,
29 s32 paramType) const;
30 bool tryFindCameraParamList(ByamlIter* paramList, const PlacementId* placementId,
31 const char* paramName) const;
32 s32 calcEntranceCameraParamNum() const;
33 bool tryFindCameraParamList(ByamlIter* paramList, const char* stageName,
34 const char* paramName) const;
35 void getEntranceCameraParamResource(ByamlIter* ticket, s32 index) const;
36 Entry* findCameraResource(const char* stageName) const;
37 Entry* tryFindCameraResource(const char* stageName) const;
38 Entry* tryFindCameraResource(const PlacementId* placementId) const;
39
40private:
41 const char* mStageName;
42 s32 mMaxEntries;
43 s32 mNumEntries = 0;
44 Entry** mEntries;
45};
46
47} // namespace al
48