User:NXTBoy/Scripts/"new" operator: Difference between revisions
From Legacy Roblox Wiki
< User:NXTBoy | Scripts
>NXTBoy New page: <pre> _G.new = function(typeName) return function(properties) pcall(function local i = Instance.new(typeName) if type(properties) == "table" then for property, value in pairs(pro... |
>NXTBoy No edit summary |
||
(2 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
<pre> | <pre> | ||
_G.new = function(typeName) | _G.new = function(typeName) | ||
local instance | |||
-- Instances | |||
if type(properties) == "table" then | if pcall(function() instance = Instance.new(typeName) end) then | ||
print("Instance") | |||
return function(properties) | |||
if type(properties) == "table" then | |||
for property, value in pairs(properties) do | |||
--Children | |||
if type(property) == "number" then | |||
value.Parent = instance | |||
--Events | |||
elseif type(value) == "function" then | |||
instance[property]:connect(function(...) value(instance, ...) end) | |||
--Properties | |||
else | |||
instance[property] = value | |||
end | |||
end | end | ||
end | end | ||
return instance | |||
end | end | ||
return | |||
-- Built in classes | |||
elseif getfenv()[typeName] and type(getfenv()[typeName].new) == "function" then | |||
return getfenv()[typeName].new | |||
-- User classes defined in _G | |||
elseif _G[typeName] and type(_G[typeName].new) == "function" then | |||
return _G[typeName].new | |||
-- What is this I don't even | |||
else | |||
error("Unknown type \""..typeName..."\"", 2) | |||
end | end | ||
end | end | ||
</pre> | </pre> | ||
Line 22: | Line 45: | ||
<pre> | <pre> | ||
local new = _G.new | local new = _G.new | ||
local m = new "Model" { | local m = new "Model" { | ||
Line 30: | Line 52: | ||
new "Part" { | new "Part" { | ||
Name = "My Part", | Name = "My Part", | ||
BrickColor = BrickColor | BrickColor = new "BrickColor"("Bright red"), | ||
Size = Vector3 | Size = new "Vector3"(2, 2, 2) | ||
} | } | ||
} | } |
Latest revision as of 09:37, 12 February 2012
_G.new = function(typeName) local instance -- Instances if pcall(function() instance = Instance.new(typeName) end) then print("Instance") return function(properties) if type(properties) == "table" then for property, value in pairs(properties) do --Children if type(property) == "number" then value.Parent = instance --Events elseif type(value) == "function" then instance[property]:connect(function(...) value(instance, ...) end) --Properties else instance[property] = value end end end return instance end -- Built in classes elseif getfenv()[typeName] and type(getfenv()[typeName].new) == "function" then return getfenv()[typeName].new -- User classes defined in _G elseif _G[typeName] and type(_G[typeName].new) == "function" then return _G[typeName].new -- What is this I don't even else error("Unknown type \""..typeName..."\"", 2) end end
Usage as follows:
local new = _G.new local m = new "Model" { Name = "Test", Parent = workspace, new "Part" { Name = "My Part", BrickColor = new "BrickColor"("Bright red"), Size = new "Vector3"(2, 2, 2) } } local p = new "Part"() p.Parent = m