#include "FileParser.h" #include "../shape/Line.h" #include "../shape/CircleArc.h" #include FileParser::FileParser(std::function errorCallback) : errorCallback(errorCallback) {} void FileParser::parse(juce::String extension, std::unique_ptr stream, juce::Font font) { juce::SpinLock::ScopedLockType scope(lock); if (extension == ".lua" && lua != nullptr && lua->isFunctionValid()) { fallbackLuaScript = lua->getScript(); } object = nullptr; camera = nullptr; svg = nullptr; text = nullptr; lua = nullptr; if (extension == ".obj") { object = std::make_shared(stream->readEntireStreamAsString().toStdString()); camera = std::make_shared(1.0, 0, 0, 0.0); camera->findZPos(*object); } else if (extension == ".svg") { svg = std::make_shared(stream->readEntireStreamAsString()); } else if (extension == ".txt") { text = std::make_shared(stream->readEntireStreamAsString(), font); } else if (extension == ".lua") { lua = std::make_shared(stream->readEntireStreamAsString(), errorCallback, fallbackLuaScript); } sampleSource = lua != nullptr; } std::vector> FileParser::nextFrame() { juce::SpinLock::ScopedLockType scope(lock); if (object != nullptr && camera != nullptr) { return camera->draw(*object); } else if (svg != nullptr) { return svg->draw(); } else if (text != nullptr) { return text->draw(); } auto tempShapes = std::vector>(); tempShapes.push_back(std::make_unique(0, 0, 0.5, 0.5, std::numbers::pi / 4.0, 2 * std::numbers::pi)); return tempShapes; } Vector2 FileParser::nextSample() { juce::SpinLock::ScopedLockType scope(lock); if (lua != nullptr) { auto values = lua->run(); if (values.size() < 2) { return Vector2(); } return Vector2(values[0], values[1]); } } bool FileParser::isSample() { return sampleSource; } bool FileParser::isActive() { return active; } void FileParser::disable() { active = false; } void FileParser::enable() { active = true; } std::shared_ptr FileParser::getObject() { return object; } std::shared_ptr FileParser::getCamera() { return camera; } std::shared_ptr FileParser::getSvg() { return svg; } std::shared_ptr FileParser::getText() { return text; } std::shared_ptr FileParser::getLua() { return lua; }