User:NXTBoy/Scripts/"new" operator: Difference between revisions

From Legacy Roblox Wiki
Jump to navigationJump to search
>NXTBoy
No edit summary
>NXTBoy
No edit summary
 
(One intermediate revision by the same user not shown)
Line 9: Line 9:
if type(properties) == "table" then
if type(properties) == "table" then
for property, value in pairs(properties) do
for property, value in pairs(properties) do
--Children
if type(property) == "number" then
if type(property) == "number" then
value.Parent = instance
value.Parent = instance
--Events
elseif type(value) == "function" then
instance[property]:connect(function(...) value(instance, ...) end)
--Properties
else
else
instance[property] = value
instance[property] = value
Line 25: Line 32:
-- User classes defined in _G
-- User classes defined in _G
elseif _G[typeName] and type(_G[typeName].new) == "function" then
elseif _G[typeName] and type(_G[typeName].new) == "function" then
return getfenv()[typeName].new
return _G[typeName].new


-- What is this I don't even
-- What is this I don't even

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