Torch
Loading...
Searching...
No Matches
GeoLayoutFactory.h
1#pragma once
2
3#include <factories/BaseFactory.h>
4
5namespace BK64 {
6
7typedef std::variant<uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, float> GeoLayoutArg;
8
9enum class GeoLayoutArgType { U8, S8, U16, S16, U32, S32, FLOAT };
10
11enum class GeoLayoutOpCode {
12 UnknownCmd0,
13 Sort,
14 Bone,
15 LoadDL,
16 Skinning = 5,
17 Branch,
18 UnknownCmd7,
19 LOD,
20 ReferencePoint = 10,
21 Selector = 12,
22 DrawDistance,
23 UnknownCmdE,
24 UnknownCmdF,
25 UnknownCmd10,
26};
27
28class GeoLayoutCommand {
29 public:
30 GeoLayoutOpCode opCode;
31 uint32_t cmdLength;
32 std::vector<GeoLayoutArg> args;
33 uint32_t originalOffset; // where this command sat in the original N64 binary
34
35 GeoLayoutCommand(GeoLayoutOpCode opCode, uint32_t cmdLength, std::vector<GeoLayoutArg> args,
36 uint32_t originalOffset = 0)
37 : opCode(opCode), cmdLength(cmdLength), args(std::move(args)), originalOffset(originalOffset) {
38 }
39};
40
41class GeoLayoutData : public IParsedData {
42 public:
43 std::vector<GeoLayoutCommand> mCmds;
44
45 GeoLayoutData(std::vector<GeoLayoutCommand> cmds) : mCmds(std::move(cmds)) {
46 }
47};
48
50 ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName,
51 YAML::Node& node, std::string* replacement) override;
52};
53
55 ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName,
56 YAML::Node& node, std::string* replacement) override;
57};
58
60 ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName,
61 YAML::Node& node, std::string* replacement) override;
62};
63
65 ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName,
66 YAML::Node& node, std::string* replacement) override;
67};
68
70 public:
71 std::optional<std::shared_ptr<IParsedData>> parse(std::vector<uint8_t>& buffer, YAML::Node& data) override;
72 // std::optional<std::shared_ptr<IParsedData>>
73 // parse_modding(std::vector<uint8_t>& buffer, YAML::Node& data) override;
74 inline std::unordered_map<ExportType, std::shared_ptr<BaseExporter>> GetExporters() override {
75 return { REGISTER(Code, GeoLayoutCodeExporter) REGISTER(Header, GeoLayoutHeaderExporter)
76 REGISTER(Binary, GeoLayoutBinaryExporter) REGISTER(Modding, GeoLayoutModdingExporter) };
77 }
78 bool SupportModdedAssets() override {
79 return true;
80 }
81};
82} // namespace BK64
Definition GeoLayoutFactory.h:54
Definition GeoLayoutFactory.h:59
Definition GeoLayoutFactory.h:69
Definition GeoLayoutFactory.h:49
Definition GeoLayoutFactory.h:64
Definition BaseFactory.h:96
Definition BaseFactory.h:102
Definition BaseFactory.h:88