diff --git a/rojo-test/build-test-snapshots/end_to_end__tests__build__unresolved_values.snap b/rojo-test/build-test-snapshots/end_to_end__tests__build__unresolved_values.snap index 073b3074..8b9eac0e 100644 --- a/rojo-test/build-test-snapshots/end_to_end__tests__build__unresolved_values.snap +++ b/rojo-test/build-test-snapshots/end_to_end__tests__build__unresolved_values.snap @@ -32,6 +32,20 @@ expression: contents Color + + 1 + 2 + 3 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 8404992 diff --git a/rojo-test/build-tests/unresolved_values/default.project.json b/rojo-test/build-tests/unresolved_values/default.project.json index d5f5d534..aecca203 100644 --- a/rojo-test/build-tests/unresolved_values/default.project.json +++ b/rojo-test/build-tests/unresolved_values/default.project.json @@ -14,7 +14,13 @@ "Color": { "$className": "Part", "$properties": { - "Color": [0.5, 0.25, 0] + "Color": [0.5, 0.25, 0], + "CFrame": [ + 1, 2, 3, + 0, 1, 0, + 0, 0, 1, + 1, 0, 0 + ] } }, diff --git a/src/resolution.rs b/src/resolution.rs index a1e1e0ee..8f25d992 100644 --- a/src/resolution.rs +++ b/src/resolution.rs @@ -1,7 +1,9 @@ use std::borrow::Borrow; use anyhow::format_err; -use rbx_dom_weak::types::{Color3, Content, Enum, Tags, Variant, VariantType, Vector2, Vector3}; +use rbx_dom_weak::types::{ + CFrame, Color3, Content, Enum, Matrix3, Tags, Variant, VariantType, Vector2, Vector3, +}; use rbx_reflection::{DataType, PropertyDescriptor}; use serde::{Deserialize, Serialize}; @@ -37,6 +39,7 @@ pub enum AmbiguousValue { Array2([f64; 2]), Array3([f64; 3]), Array4([f64; 4]), + Array12([f64; 12]), } impl AmbiguousValue { @@ -113,6 +116,18 @@ impl AmbiguousValue { Ok(Color3::new(value[0] as f32, value[1] as f32, value[2] as f32).into()) } + (VariantType::CFrame, AmbiguousValue::Array12(value)) => { + let value = value.map(|v| v as f32); + let pos = Vector3::new(value[0], value[1], value[2]); + let orientation = Matrix3::new( + Vector3::new(value[3], value[4], value[5]), + Vector3::new(value[6], value[7], value[8]), + Vector3::new(value[9], value[10], value[11]), + ); + + Ok(CFrame::new(pos, orientation).into()) + } + (_, unresolved) => Err(format_err!( "Wrong type of value for property {}.{}. Expected {:?}, got {}", class_name, @@ -138,6 +153,7 @@ impl AmbiguousValue { AmbiguousValue::Array2(_) => "an array of two numbers", AmbiguousValue::Array3(_) => "an array of three numbers", AmbiguousValue::Array4(_) => "an array of four numbers", + AmbiguousValue::Array12(_) => "an array of twelve numbers", } } }