Torch
Loading...
Searching...
No Matches
CourseFactory.h
1#pragma once
2
3#include <factories/BaseFactory.h>
4
5namespace FZX {
6
7// In-Game Structs
8typedef struct Vec3fStruct {
9 float x, y, z;
11
12typedef struct ControlPoint {
13 Vec3fStruct pos;
14 int16_t radiusLeft;
15 int16_t radiusRight;
16 int32_t trackSegmentInfo;
17} ControlPoint; // size = 0x14
18
19typedef struct CourseRawData {
20 int8_t creatorId;
21 int8_t controlPointCount;
22 int8_t venue;
23 int8_t skybox;
24 uint32_t checksum;
25 int8_t flag;
26 char fileName[23];
27 ControlPoint controlPoint[64];
28 int16_t bankAngle[64];
29 int8_t pit[64];
30 int8_t dash[64];
31 int8_t dirt[64];
32 int8_t ice[64];
33 int8_t jump[64];
34 int8_t landmine[64];
35 int8_t gate[64];
36 int8_t building[64];
37 int8_t sign[64];
38} CourseRawData; // size = 0x7E0
39
40// Factory Structs
41typedef struct ControlPointInfo {
42 ControlPoint controlPoint;
43 int16_t bankAngle;
44 int8_t pit;
45 int8_t dash;
46 int8_t dirt;
47 int8_t ice;
48 int8_t jump;
49 int8_t landmine;
50 int8_t gate;
51 int8_t building;
52 int8_t sign;
54
55class CourseData : public IParsedData {
56public:
57 int8_t mCreatorId;
58 int8_t mVenue;
59 int8_t mSkybox;
60 int8_t mFlag;
61 std::vector<char> mFileName;
62 int8_t mBgm;
63 std::vector<ControlPointInfo> mControlPointInfos;
64
65 CourseData(int8_t creatorId, int8_t venue, int8_t skybox, int8_t flag, std::vector<char> fileName, int8_t bgm, std::vector<ControlPointInfo> controlPointInfos) :
66 mCreatorId(creatorId),
67 mVenue(venue),
68 mSkybox(skybox),
69 mFlag(flag),
70 mFileName(std::move(fileName)),
71 mBgm(bgm),
72 mControlPointInfos(std::move(controlPointInfos)) {}
73
74 uint32_t CalculateChecksum(void);
75};
76
78 ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName, YAML::Node& node, std::string* replacement) override;
79};
80
82 ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName, YAML::Node& node, std::string* replacement) override;
83};
84
86 ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName, YAML::Node& node, std::string* replacement) override;
87};
88
90 ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName, YAML::Node& node, std::string* replacement) override;
91};
92
93class CourseFactory : public BaseFactory {
94public:
95 std::optional<std::shared_ptr<IParsedData>> parse(std::vector<uint8_t>& buffer, YAML::Node& data) override;
96 std::optional<std::shared_ptr<IParsedData>> parse_modding(std::vector<uint8_t>& buffer, YAML::Node& data) override;
97 inline std::unordered_map<ExportType, std::shared_ptr<BaseExporter>> GetExporters() override {
98 return {
99 REGISTER(Code, CourseCodeExporter)
100 REGISTER(Header, CourseHeaderExporter)
101 REGISTER(Binary, CourseBinaryExporter)
102 REGISTER(Modding, CourseModdingExporter)
103 };
104 }
105 bool SupportModdedAssets() override { return true; }
106};
107} // namespace FZX
Definition BaseFactory.h:88
Definition BaseFactory.h:94
Definition CourseFactory.h:81
Definition CourseFactory.h:85
Definition CourseFactory.h:93
Definition CourseFactory.h:77
Definition CourseFactory.h:89
Definition BaseFactory.h:80
Definition CourseFactory.h:41
Definition CourseFactory.h:12
Definition CourseFactory.h:19
Definition CourseFactory.h:8