User:NXTBoy/Scripts/"new" operator

From Legacy Roblox Wiki
Revision as of 09:37, 12 February 2012 by >NXTBoy
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search
_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