feat(compat): made roblox xml level files load

This commit is contained in:
maelstrom 2025-06-01 21:40:22 +02:00
parent 5f6ff971d2
commit 6032237e42
4 changed files with 8 additions and 3 deletions

View file

@ -47,8 +47,10 @@ void Variant::PushLuaValue(lua_State* state) const {
Variant Variant::Deserialize(pugi::xml_node node) { Variant Variant::Deserialize(pugi::xml_node node) {
if (TYPE_MAP.count(node.name()) == 0) { if (TYPE_MAP.count(node.name()) == 0) {
Logger::fatalErrorf("Unknown type for property: '%s'", node.name()); // TODO: Make this soft-fail with a result value instead of panicking
panic(); Logger::errorf("Unknown type for property: '%s'", node.name());
// panic();
return Variant();
} }
const TypeInfo* type = TYPE_MAP[node.name()]; const TypeInfo* type = TYPE_MAP[node.name()];
@ -59,6 +61,7 @@ std::map<std::string, const TypeInfo*> TYPE_MAP = {
{ "null", &NULL_TYPE }, { "null", &NULL_TYPE },
{ "bool", &BOOL_TYPE }, { "bool", &BOOL_TYPE },
{ "int", &INT_TYPE }, { "int", &INT_TYPE },
{ "token", &INT_TYPE },
{ "float", &FLOAT_TYPE }, { "float", &FLOAT_TYPE },
{ "string", &STRING_TYPE }, { "string", &STRING_TYPE },
{ "Vector3", &Vector3::TYPE }, { "Vector3", &Vector3::TYPE },

View file

@ -34,6 +34,7 @@ typedef std::variant<
class Variant { class Variant {
__VARIANT_TYPE wrapped; __VARIANT_TYPE wrapped;
public: public:
inline Variant() : Variant(std::monostate()) {}
template <typename T> Variant(T obj) : wrapped(obj) {} template <typename T> Variant(T obj) : wrapped(obj) {}
template <typename T> T get() { return std::get<T>(wrapped); } template <typename T> T get() { return std::get<T>(wrapped); }
std::string ToString() const; std::string ToString() const;

View file

@ -65,6 +65,7 @@ std::shared_ptr<DataModel> DataModel::LoadFromFile(std::string path) {
doc.load(inStream); doc.load(inStream);
pugi::xml_node rootNode = doc.child("openblocks"); pugi::xml_node rootNode = doc.child("openblocks");
if (!rootNode) rootNode = doc.child("roblox");
std::shared_ptr<DataModel> newModel = std::make_shared<DataModel>(); std::shared_ptr<DataModel> newModel = std::make_shared<DataModel>();
RefStateDeserialize state = std::make_shared<__RefStateDeserialize>(); RefStateDeserialize state = std::make_shared<__RefStateDeserialize>();

View file

@ -58,7 +58,7 @@ public:
CFrame cframe; CFrame cframe;
DEF_PROP_CATEGORY(PART) DEF_PROP_CATEGORY(PART)
DEF_PROP_(on_update=onUpdated) glm::vec3 size; DEF_PROP_(name="size", on_update=onUpdated) glm::vec3 size;
DEF_PROP_CATEGORY(APPEARANCE) DEF_PROP_CATEGORY(APPEARANCE)
DEF_PROP Color3 color; DEF_PROP Color3 color;