diff options
| author | KiritoDv <kiritodev01@gmail.com> | 2023-08-24 23:13:48 -0600 |
|---|---|---|
| committer | KiritoDv <kiritodev01@gmail.com> | 2023-08-24 23:13:48 -0600 |
| commit | 64eddebf4d45b4775f6e9f248cbfaa1cb3ab55f2 (patch) | |
| tree | c0fc5b1aedb1021544bf50454d6b44ef20f2bffb /src/factories/AnimFactory.cpp | |
| parent | 15a0cf5498b60fa1442d049dbe5bb856022b5641 (diff) | |
Added animation factory and some random tools
Diffstat (limited to 'src/factories/AnimFactory.cpp')
| -rw-r--r-- | src/factories/AnimFactory.cpp | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/factories/AnimFactory.cpp b/src/factories/AnimFactory.cpp new file mode 100644 index 0000000..3ba83fe --- /dev/null +++ b/src/factories/AnimFactory.cpp @@ -0,0 +1,67 @@ +#include "AnimFactory.h" + +#include <iostream> +#include <filesystem> +#include "Companion.h" +#include "utils/MIODecoder.h" +#include "binarytools/BinaryReader.h" + +namespace fs = std::filesystem; + +void WriteAnimationHeader(LUS::BinaryWriter* writer, nlohmann::json& offsets, std::vector<uint8_t>& buffer) { + LUS::BinaryReader reader((char*) buffer.data() + offsets[0], offsets[1]); + reader.SetEndianness(LUS::Endianness::Big); + + auto flags = reader.ReadInt16(); + auto animYTransDivisor = reader.ReadInt16(); + auto startFrame = reader.ReadInt16(); + auto loopStart = reader.ReadInt16(); + auto loopEnd = reader.ReadInt16(); + auto unusedBoneCount = reader.ReadInt16(); + reader.ReadUInt32(); + reader.ReadUInt32(); + auto length = reader.ReadUInt32(); + + WRITE_I16(flags); + WRITE_I16(animYTransDivisor); + WRITE_I16(startFrame); + WRITE_I16(loopStart); + WRITE_I16(loopEnd); + WRITE_I16(unusedBoneCount); + WRITE_U64(length); + reader.Close(); +} + +void WriteAnimationIndex(LUS::BinaryWriter* writer, nlohmann::json& offsets, std::vector<uint8_t>& buffer) { + LUS::BinaryReader reader((char*) buffer.data() + offsets[0], offsets[1]); + reader.SetEndianness(LUS::Endianness::Big); + size_t entries = ((size_t) offsets[1]); + WRITE_U32(entries); + for(size_t id = 0; id < entries; id++) { + WRITE_I16(reader.ReadInt16()); + } + reader.Close(); +} + +void WriteAnimationValues(LUS::BinaryWriter* writer, nlohmann::json& offsets, std::vector<uint8_t>& buffer) { + LUS::BinaryReader reader((char*) buffer.data() + offsets[0], offsets[1]); + reader.SetEndianness(LUS::Endianness::Big); + size_t entries = ((size_t) offsets[1]); + WRITE_U32(entries); + for(size_t id = 0; id < entries; id++) { + WRITE_U16(reader.ReadUInt16()); + } + reader.Close(); +} + +bool AnimFactory::process(LUS::BinaryWriter* writer, nlohmann::json& data, std::vector<uint8_t>& buffer) { + auto metadata = data["offsets"]; + + WRITE_HEADER(LUS::ResourceType::Anim, 0); + + WriteAnimationHeader(writer, metadata["header"], buffer); + WriteAnimationIndex( writer, metadata["indices"], buffer); + WriteAnimationValues(writer, metadata["values"], buffer); + + return true; +}
\ No newline at end of file |
