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

View file

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

View file

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

View file

@ -58,7 +58,7 @@ public:
CFrame cframe;
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 Color3 color;