Compare commits

...

1 Commits

Author SHA1 Message Date
e799f6a094 mut 2024-10-06 18:14:38 -07:00

View File

@ -429,18 +429,22 @@ impl ClassMethods<'_>{
/// A virtual property pointer definition shorthand. /// A virtual property pointer definition shorthand.
type VirtualPropertyFunctionPointer=fn(&rbx_types::Variant)->Option<rbx_types::Variant>; type VirtualPropertyFunctionPointer=fn(&rbx_types::Variant)->Option<rbx_types::Variant>;
type VirtualPropertyFunctionPointerMut=fn(&mut rbx_types::Variant,rbx_types::Variant)->Option<()>;
const fn vpp( const fn vpp(
property:&'static str, property:&'static str,
pointer:VirtualPropertyFunctionPointer, access:VirtualPropertyFunctionPointer,
access_mut:VirtualPropertyFunctionPointerMut,
)->VirtualProperty{ )->VirtualProperty{
VirtualProperty{ VirtualProperty{
property, property,
pointer, access,
access_mut,
} }
} }
struct VirtualProperty{ struct VirtualProperty{
property:&'static str,// Source property name property:&'static str,// Source property name
pointer:VirtualPropertyFunctionPointer, access:VirtualPropertyFunctionPointer,
access_mut:VirtualPropertyFunctionPointerMut,
} }
type VPD=phf::Map<&'static str,// Class name type VPD=phf::Map<&'static str,// Class name
phf::Map<&'static str,// Virtual property name phf::Map<&'static str,// Virtual property name
@ -449,13 +453,26 @@ type VPD=phf::Map<&'static str,// Class name
>; >;
static VIRTUAL_PROPERTY_DATABASE:VPD=phf::phf_map!{ static VIRTUAL_PROPERTY_DATABASE:VPD=phf::phf_map!{
"BasePart"=>phf::phf_map!{ "BasePart"=>phf::phf_map!{
"Position"=>vpp("CFrame",|c:&rbx_types::Variant|{ "Position"=>vpp(
"CFrame",
//Get
|c|{
let c=match c{ let c=match c{
rbx_types::Variant::CFrame(c)=>c, rbx_types::Variant::CFrame(c)=>c,
_=>return None,//fail silently and ungracefully _=>return None,//fail silently and ungracefully
}; };
Some(rbx_types::Variant::Vector3(c.position)) Some(rbx_types::Variant::Vector3(c.position))
}), },
//Set
|c,p|{
let (c,p)=match (c,p){
(rbx_types::Variant::CFrame(c),rbx_types::Variant::Vector3(p))=>(c,p),
_=>return None,//fail silently and ungracefully
};
c.position=p;
Some(())
}
),
}, },
}; };
@ -472,5 +489,5 @@ fn find_virtual_property(
let variant=properties.get(virtual_property.property)?; let variant=properties.get(virtual_property.property)?;
//Transform Source property with provided function //Transform Source property with provided function
(virtual_property.pointer)(variant) (virtual_property.access)(variant)
} }