#pragma once #include "factories/BaseFactory.h" #include "types/Vec3D.h" namespace SM64 { struct Trajectory { int16_t trajId; int16_t posX; int16_t posY; int16_t posZ; Trajectory(int16_t trajId, int16_t posX, int16_t posY, int16_t posZ) : trajId(trajId), posX(posX), posY(posY), posZ(posZ) {} }; class TrajectoryData : public IParsedData { public: std::vector mTrajectoryData; TrajectoryData(std::vector trajectoryData) : mTrajectoryData(std::move(trajectoryData)) {} }; class TrajectoryHeaderExporter : public BaseExporter { ExportResult Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; }; class TrajectoryBinaryExporter : public BaseExporter { ExportResult Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; }; class TrajectoryCodeExporter : public BaseExporter { ExportResult Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; }; class TrajectoryFactory : public BaseFactory { public: bool CanPreviewCode() override { return true; } std::optional> parse(std::vector& buffer, YAML::Node& data) override; inline std::unordered_map> GetExporters() override { return { REGISTER(Code, TrajectoryCodeExporter) REGISTER(Header, TrajectoryHeaderExporter) REGISTER(Binary, TrajectoryBinaryExporter) }; } }; #ifdef BUILD_UI // Previews the trajectory as a 3D path. class TrajectoryFactoryUI : public BaseFactoryUI { public: float GetItemHeight(const ParseResultData& data) override; void DrawUI(const ParseResultData& data) override; }; #endif }