Torch
Loading...
Searching...
No Matches
SequenceFactory.h
1#pragma once
2
3#include <factories/BaseFactory.h>
4#include <unordered_set>
5
6namespace FZX {
7
8typedef std::variant<uint8_t, uint16_t, uint32_t> SeqArg;
9
10enum class SeqArgType {
11 U8, S16, CS16
12};
13
14enum class SequenceState {
15 player,
16 channel,
17 layer,
18 data,
19 envelope
20};
21
22struct SeqLabelInfo {
23 uint32_t pos;
24 SequenceState state;
25 uint32_t channel;
26 uint32_t layer;
27 bool largeNotes;
28 SeqLabelInfo(uint32_t pos, SequenceState state, uint32_t channel, uint32_t layer, bool largeNotes) : pos(pos), state(state), channel(channel), layer(layer), largeNotes(largeNotes) {}
29};
30
31struct SeqCommand {
32 uint8_t cmd;
33 uint32_t pos;
34 SequenceState state;
35 int32_t channel;
36 int32_t layer;
37 uint32_t size;
38 std::vector<SeqArg> args;
39 bool operator<(const SeqCommand& command) const {
40 return pos < command.pos;
41 }
42};
43
44class SequenceData : public IParsedData {
45public:
46 std::vector<SeqCommand> mCmds;
47 std::unordered_set<uint32_t> mLabels;
48 bool mHasFooter;
49
50 SequenceData(std::vector<SeqCommand> cmds, std::unordered_set<uint32_t> labels, bool hasFooter) : mCmds(std::move(cmds)), mLabels(std::move(labels)), mHasFooter(hasFooter) {}
51};
52
54 ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName, YAML::Node& node, std::string* replacement) override;
55};
56
58 ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName, YAML::Node& node, std::string* replacement) override;
59};
60
62 ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName, YAML::Node& node, std::string* replacement) override;
63};
64
66public:
67 std::optional<std::shared_ptr<IParsedData>> parse(std::vector<uint8_t>& buffer, YAML::Node& data) override;
68 inline std::unordered_map<ExportType, std::shared_ptr<BaseExporter>> GetExporters() override {
69 return {
70 REGISTER(Code, SequenceCodeExporter)
71 REGISTER(Header, SequenceHeaderExporter)
72 REGISTER(Binary, SequenceBinaryExporter)
73 };
74 }
75};
76}
Definition BaseFactory.h:88
Definition BaseFactory.h:94
Definition SequenceFactory.h:57
Definition SequenceFactory.h:61
Definition SequenceFactory.h:65
Definition SequenceFactory.h:53
Definition BaseFactory.h:80
Definition SequenceFactory.h:31