ModelParser.cpp 1.4 KB

123456789101112131415161718192021222324252627282930313233343536
  1. #include "ModelParser.h"
  2. #include "MaterialParser.h"
  3. #include "WallpaperEngine/Data/Model/DynamicValue.h"
  4. #include "WallpaperEngine/Data/Model/Material.h"
  5. #include "WallpaperEngine/Data/Model/Model.h"
  6. #include "WallpaperEngine/Data/Model/Project.h"
  7. #include "WallpaperEngine/FileSystem/Container.h"
  8. using namespace WallpaperEngine::Data::Parsers;
  9. using namespace WallpaperEngine::Data::Model;
  10. ModelUniquePtr ModelParser::load (const Project& project, const std::string& filename) {
  11. const auto model = JSON::parseAsset (project.assetLocator->readString (filename));
  12. return parse (model, project, filename);
  13. }
  14. ModelUniquePtr ModelParser::parse (const JSON& file, const Project& project, const std::string& filename) {
  15. const auto material = file.require<std::string> ("material", "Model must have a material");
  16. return std::make_unique<ModelStruct> (ModelStruct {
  17. .filename = filename,
  18. .material = MaterialParser::load (project, material),
  19. .solidlayer = file.optional ("solidlayer", false),
  20. .instanced = file.optional ("instanced", false),
  21. .fullscreen = file.optional ("fullscreen", false),
  22. .passthrough = file.optional ("passthrough", false),
  23. .autosize = file.optional ("autosize", false),
  24. .nopadding = file.optional ("nopadding", false),
  25. .width = file.optional<int> ("width"),
  26. .height = file.optional<int> ("height"),
  27. .cropOffset = file.optional<glm::vec2> ("cropoffset"),
  28. .puppet = file.optional<std::string> ("puppet"),
  29. });
  30. }