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