forked from rojo-rbx/rojo
Add support for CFrame shorthand. Fixes #430.
This commit is contained in:
@@ -32,6 +32,20 @@ expression: contents
|
||||
<Item class="Part" referent="4">
|
||||
<Properties>
|
||||
<string name="Name">Color</string>
|
||||
<CoordinateFrame name="CFrame">
|
||||
<X>1</X>
|
||||
<Y>2</Y>
|
||||
<Z>3</Z>
|
||||
<R00>0</R00>
|
||||
<R01>1</R01>
|
||||
<R02>0</R02>
|
||||
<R10>0</R10>
|
||||
<R11>0</R11>
|
||||
<R12>1</R12>
|
||||
<R20>1</R20>
|
||||
<R21>0</R21>
|
||||
<R22>0</R22>
|
||||
</CoordinateFrame>
|
||||
<Color3uint8 name="Color3uint8">8404992</Color3uint8>
|
||||
</Properties>
|
||||
</Item>
|
||||
|
||||
@@ -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
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
@@ -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",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user