mirror of
https://github.com/CompeyDev/lune-packaging.git
synced 2025-01-09 20:29:10 +00:00
Implement missing Vector3 constructors
This commit is contained in:
parent
72f3e2157b
commit
010f7325d1
1 changed files with 52 additions and 4 deletions
|
@ -5,14 +5,14 @@ use glam::Vec3;
|
||||||
use mlua::prelude::*;
|
use mlua::prelude::*;
|
||||||
use rbx_dom_weak::types::Vector3 as RbxVector3;
|
use rbx_dom_weak::types::Vector3 as RbxVector3;
|
||||||
|
|
||||||
use super::super::*;
|
use super::{super::*, EnumItem};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An implementation of the [Vector3](https://create.roblox.com/docs/reference/engine/datatypes/Vector3)
|
An implementation of the [Vector3](https://create.roblox.com/docs/reference/engine/datatypes/Vector3)
|
||||||
Roblox datatype, backed by [`glam::Vec3`].
|
Roblox datatype, backed by [`glam::Vec3`].
|
||||||
|
|
||||||
This implements all documented properties & methods of the Vector3
|
This implements all documented properties, methods &
|
||||||
class as of March 2023, as well as the `new(x, y, z)` constructor.
|
constructors of the Vector3 class as of March 2023.
|
||||||
|
|
||||||
Note that this does not use native Luau vectors to simplify implementation
|
Note that this does not use native Luau vectors to simplify implementation
|
||||||
and instead allow us to implement all abovementioned APIs accurately.
|
and instead allow us to implement all abovementioned APIs accurately.
|
||||||
|
@ -29,6 +29,55 @@ impl Vector3 {
|
||||||
datatype_table.set("zero", Vector3(Vec3::ZERO))?;
|
datatype_table.set("zero", Vector3(Vec3::ZERO))?;
|
||||||
datatype_table.set("one", Vector3(Vec3::ONE))?;
|
datatype_table.set("one", Vector3(Vec3::ONE))?;
|
||||||
// Constructors
|
// Constructors
|
||||||
|
datatype_table.set(
|
||||||
|
"fromAxis",
|
||||||
|
lua.create_function(|_, normal_id: EnumItem| {
|
||||||
|
if normal_id.parent.desc.name == "Axis" {
|
||||||
|
Ok(match normal_id.name.as_str() {
|
||||||
|
"X" => Vector3(Vec3::X),
|
||||||
|
"Y" => Vector3(Vec3::Y),
|
||||||
|
"Z" => Vector3(Vec3::Z),
|
||||||
|
name => {
|
||||||
|
return Err(LuaError::RuntimeError(format!(
|
||||||
|
"Axis '{}' is not known",
|
||||||
|
name
|
||||||
|
)))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
Err(LuaError::RuntimeError(format!(
|
||||||
|
"EnumItem must be a Axis, got {}",
|
||||||
|
normal_id.parent.desc.name
|
||||||
|
)))
|
||||||
|
}
|
||||||
|
})?,
|
||||||
|
)?;
|
||||||
|
datatype_table.set(
|
||||||
|
"fromNormalId",
|
||||||
|
lua.create_function(|_, normal_id: EnumItem| {
|
||||||
|
if normal_id.parent.desc.name == "NormalId" {
|
||||||
|
Ok(match normal_id.name.as_str() {
|
||||||
|
"Left" => Vector3(Vec3::X),
|
||||||
|
"Top" => Vector3(Vec3::Y),
|
||||||
|
"Front" => Vector3(-Vec3::Z),
|
||||||
|
"Right" => Vector3(-Vec3::X),
|
||||||
|
"Bottom" => Vector3(-Vec3::Y),
|
||||||
|
"Back" => Vector3(Vec3::Z),
|
||||||
|
name => {
|
||||||
|
return Err(LuaError::RuntimeError(format!(
|
||||||
|
"NormalId '{}' is not known",
|
||||||
|
name
|
||||||
|
)))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
Err(LuaError::RuntimeError(format!(
|
||||||
|
"EnumItem must be a NormalId, got {}",
|
||||||
|
normal_id.parent.desc.name
|
||||||
|
)))
|
||||||
|
}
|
||||||
|
})?,
|
||||||
|
)?;
|
||||||
datatype_table.set(
|
datatype_table.set(
|
||||||
"new",
|
"new",
|
||||||
lua.create_function(|_, (x, y, z): (Option<f32>, Option<f32>, Option<f32>)| {
|
lua.create_function(|_, (x, y, z): (Option<f32>, Option<f32>, Option<f32>)| {
|
||||||
|
@ -39,7 +88,6 @@ impl Vector3 {
|
||||||
}))
|
}))
|
||||||
})?,
|
})?,
|
||||||
)
|
)
|
||||||
// FUTURE: Implement FromNormalId and FromAxis constructors?
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue