mirror of
https://github.com/lune-org/lune.git
synced 2025-01-05 19:09:10 +00:00
IsA
, ClassName
& Parent
should work if an instance is already destroyed (#271)
This commit is contained in:
parent
c935149c1e
commit
91af86cca2
4 changed files with 12 additions and 25 deletions
|
@ -113,7 +113,6 @@ pub fn add_methods<'lua, M: LuaUserDataMethods<'lua, Instance>>(m: &mut M) {
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
m.add_method("IsA", |_, this, class_name: String| {
|
m.add_method("IsA", |_, this, class_name: String| {
|
||||||
ensure_not_destroyed(this)?;
|
|
||||||
Ok(class_is_a(&this.class_name, class_name).unwrap_or(false))
|
Ok(class_is_a(&this.class_name, class_name).unwrap_or(false))
|
||||||
});
|
});
|
||||||
m.add_method(
|
m.add_method(
|
||||||
|
@ -217,19 +216,20 @@ fn instance_property_get<'lua>(
|
||||||
this: &Instance,
|
this: &Instance,
|
||||||
prop_name: String,
|
prop_name: String,
|
||||||
) -> LuaResult<LuaValue<'lua>> {
|
) -> LuaResult<LuaValue<'lua>> {
|
||||||
ensure_not_destroyed(this)?;
|
|
||||||
|
|
||||||
match prop_name.as_str() {
|
match prop_name.as_str() {
|
||||||
"ClassName" => return this.get_class_name().into_lua(lua),
|
"ClassName" => return this.get_class_name().into_lua(lua),
|
||||||
"Name" => {
|
|
||||||
return this.get_name().into_lua(lua);
|
|
||||||
}
|
|
||||||
"Parent" => {
|
"Parent" => {
|
||||||
return this.get_parent().into_lua(lua);
|
return this.get_parent().into_lua(lua);
|
||||||
}
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ensure_not_destroyed(this)?;
|
||||||
|
|
||||||
|
if prop_name.as_str() == "Name" {
|
||||||
|
return this.get_name().into_lua(lua);
|
||||||
|
}
|
||||||
|
|
||||||
if let Some(info) = find_property_info(&this.class_name, &prop_name) {
|
if let Some(info) = find_property_info(&this.class_name, &prop_name) {
|
||||||
if let Some(prop) = this.get_property(&prop_name) {
|
if let Some(prop) = this.get_property(&prop_name) {
|
||||||
if let DomValue::Enum(enum_value) = prop {
|
if let DomValue::Enum(enum_value) = prop {
|
||||||
|
|
|
@ -302,10 +302,7 @@ impl Instance {
|
||||||
pub fn get_parent(&self) -> Option<Instance> {
|
pub fn get_parent(&self) -> Option<Instance> {
|
||||||
let dom = INTERNAL_DOM.lock().expect("Failed to lock document");
|
let dom = INTERNAL_DOM.lock().expect("Failed to lock document");
|
||||||
|
|
||||||
let parent_ref = dom
|
let parent_ref = dom.get_by_ref(self.dom_ref)?.parent();
|
||||||
.get_by_ref(self.dom_ref)
|
|
||||||
.expect("Failed to find instance in document")
|
|
||||||
.parent();
|
|
||||||
|
|
||||||
if parent_ref == dom.root_ref() {
|
if parent_ref == dom.root_ref() {
|
||||||
None
|
None
|
||||||
|
|
|
@ -20,14 +20,10 @@ assert(not pcall(function()
|
||||||
return child1.Name
|
return child1.Name
|
||||||
end))
|
end))
|
||||||
|
|
||||||
assert(not pcall(function()
|
assert(not child1.Parent)
|
||||||
return child1.Parent
|
|
||||||
end))
|
|
||||||
|
|
||||||
assert(not pcall(function()
|
assert(not pcall(function()
|
||||||
return child2.Name
|
return child2.Name
|
||||||
end))
|
end))
|
||||||
|
|
||||||
assert(not pcall(function()
|
assert(not child2.Parent)
|
||||||
return child2.Parent
|
|
||||||
end))
|
|
||||||
|
|
|
@ -14,22 +14,16 @@ assert(not pcall(function()
|
||||||
return root.Name
|
return root.Name
|
||||||
end))
|
end))
|
||||||
|
|
||||||
assert(not pcall(function()
|
assert(not root.Parent)
|
||||||
return root.Parent
|
|
||||||
end))
|
|
||||||
|
|
||||||
assert(not pcall(function()
|
assert(not pcall(function()
|
||||||
return child.Name
|
return child.Name
|
||||||
end))
|
end))
|
||||||
|
|
||||||
assert(not pcall(function()
|
assert(not child.Parent)
|
||||||
return child.Parent
|
|
||||||
end))
|
|
||||||
|
|
||||||
assert(not pcall(function()
|
assert(not pcall(function()
|
||||||
return descendant.Name
|
return descendant.Name
|
||||||
end))
|
end))
|
||||||
|
|
||||||
assert(not pcall(function()
|
assert(not descendant.Parent)
|
||||||
return descendant.Parent
|
|
||||||
end))
|
|
||||||
|
|
Loading…
Reference in a new issue