SourcePP
Several modern C++20 libraries for sanely parsing Valve's formats.
Loading...
Searching...
No Matches
CmdSeq.h
Go to the documentation of this file.
1#pragma once
2
3#include <filesystem>
4#include <string>
5#include <vector>
6
7#include <sourcepp/Math.h>
8
9namespace toolpp {
10
11class CmdSeq {
12public:
13 struct Command {
14 bool enabled;
15
16 enum class Special : int32_t {
17 NONE = 0,
19 COPY_FILE = 257,
22 // This used to be a different thing - Strata changes it to be an alias for 261
23 //COPY_FILE_IF_EXISTS_ALT = 260,
26 static constexpr auto SPECIAL_COPY_FILE_IF_EXISTS_ALIAS = static_cast<Special>(260);
27
28 std::string executable;
29 std::string arguments;
30
33
35
37
38 [[nodiscard]] static std::string getSpecialDisplayNameFor(Special special);
39
40 [[nodiscard]] std::string getExecutableDisplayName() const;
41 };
42
43 struct Sequence {
44 std::string name;
45 std::vector<Command> commands;
46 };
47
54
55 explicit CmdSeq(Type type_);
56
57 explicit CmdSeq(const std::filesystem::path& cmdSeqPath);
58
59 [[nodiscard]] explicit operator bool() const;
60
61 [[nodiscard]] Type getType() const;
62
63 void setType(Type type_);
64
65 [[nodiscard]] float getBinaryVersion() const;
66
67 void setBinaryVersion(bool isV02);
68
69 [[nodiscard]] std::vector<Sequence>& getSequences();
70
71 [[nodiscard]] const std::vector<Sequence>& getSequences() const;
72
73 [[nodiscard]] std::vector<std::byte> bake() const;
74
75 bool bake(const std::filesystem::path& path) const; // NOLINT(*-use-nodiscard)
76
77protected:
78 void parseBinary(const std::filesystem::path& path);
79
80 void parseKeyValuesHPP(const std::filesystem::path& path);
81
82 void parseKeyValuesStrata(const std::filesystem::path& path);
83
84 [[nodiscard]] std::vector<std::byte> bakeBinary() const;
85
86 [[nodiscard]] std::vector<std::byte> bakeKeyValuesHPP() const;
87
88 [[nodiscard]] std::vector<std::byte> bakeKeyValuesStrata() const;
89
91 float version;
92 std::vector<Sequence> sequences;
93};
94
95} // namespace toolpp
void parseKeyValuesHPP(const std::filesystem::path &path)
Definition CmdSeq.cpp:162
std::vector< std::byte > bake() const
Definition CmdSeq.cpp:309
float getBinaryVersion() const
Definition CmdSeq.cpp:116
void setBinaryVersion(bool isV02)
Definition CmdSeq.cpp:120
Type getType() const
Definition CmdSeq.cpp:108
void parseKeyValuesStrata(const std::filesystem::path &path)
Definition CmdSeq.cpp:188
CmdSeq(Type type_)
Definition CmdSeq.cpp:64
void setType(Type type_)
Definition CmdSeq.cpp:112
std::vector< std::byte > bakeKeyValuesStrata() const
Definition CmdSeq.cpp:283
std::vector< Sequence > & getSequences()
Definition CmdSeq.cpp:218
void parseBinary(const std::filesystem::path &path)
Definition CmdSeq.cpp:128
std::vector< Sequence > sequences
Definition CmdSeq.h:92
std::vector< std::byte > bakeKeyValuesHPP() const
Definition CmdSeq.cpp:261
float version
Definition CmdSeq.h:91
std::vector< std::byte > bakeBinary() const
Definition CmdSeq.cpp:226
Definition CmdSeq.h:9
std::string executable
Definition CmdSeq.h:28
std::string pathToTheoreticallyExistingFile
Definition CmdSeq.h:32
std::string getExecutableDisplayName() const
Definition CmdSeq.cpp:57
enum toolpp::CmdSeq::Command::Special special
static constexpr auto SPECIAL_COPY_FILE_IF_EXISTS_ALIAS
Definition CmdSeq.h:26
std::string arguments
Definition CmdSeq.h:29
static std::string getSpecialDisplayNameFor(Special special)
Definition CmdSeq.cpp:39
std::vector< Command > commands
Definition CmdSeq.h:45