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">
|
<Item class="Part" referent="4">
|
||||||
<Properties>
|
<Properties>
|
||||||
<string name="Name">Color</string>
|
<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>
|
<Color3uint8 name="Color3uint8">8404992</Color3uint8>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Item>
|
</Item>
|
||||||
|
|||||||
@@ -14,7 +14,13 @@
|
|||||||
"Color": {
|
"Color": {
|
||||||
"$className": "Part",
|
"$className": "Part",
|
||||||
"$properties": {
|
"$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 std::borrow::Borrow;
|
||||||
|
|
||||||
use anyhow::format_err;
|
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 rbx_reflection::{DataType, PropertyDescriptor};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
@@ -37,6 +39,7 @@ pub enum AmbiguousValue {
|
|||||||
Array2([f64; 2]),
|
Array2([f64; 2]),
|
||||||
Array3([f64; 3]),
|
Array3([f64; 3]),
|
||||||
Array4([f64; 4]),
|
Array4([f64; 4]),
|
||||||
|
Array12([f64; 12]),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AmbiguousValue {
|
impl AmbiguousValue {
|
||||||
@@ -113,6 +116,18 @@ impl AmbiguousValue {
|
|||||||
Ok(Color3::new(value[0] as f32, value[1] as f32, value[2] as f32).into())
|
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!(
|
(_, unresolved) => Err(format_err!(
|
||||||
"Wrong type of value for property {}.{}. Expected {:?}, got {}",
|
"Wrong type of value for property {}.{}. Expected {:?}, got {}",
|
||||||
class_name,
|
class_name,
|
||||||
@@ -138,6 +153,7 @@ impl AmbiguousValue {
|
|||||||
AmbiguousValue::Array2(_) => "an array of two numbers",
|
AmbiguousValue::Array2(_) => "an array of two numbers",
|
||||||
AmbiguousValue::Array3(_) => "an array of three numbers",
|
AmbiguousValue::Array3(_) => "an array of three numbers",
|
||||||
AmbiguousValue::Array4(_) => "an array of four numbers",
|
AmbiguousValue::Array4(_) => "an array of four numbers",
|
||||||
|
AmbiguousValue::Array12(_) => "an array of twelve numbers",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user