Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local AccessorFunc do
- local setter_env = {select = select}
- local setter_codens = [[
- local _ENV = ...
- _ENV.%s = select(2, ...)
- ]]
- function AccessorFunc(mt, vars, name)
- assert(istable(mt), string.format("bad argument #1 to 'AccessorFunc' (table expected, got %s)", type(mt)))
- assert(isstring(name), string.format("bad argument #3 to 'AccessorFunc' (string expected, got %s)", type(name)))
- if not istable(vars) then
- assert(isstring(vars), string.format("bad argument #2 to 'AccessorFunc' (string or table expected, got %s)", type(name)))
- vars = {vars}
- else
- assert(istable(vars), string.format("bad argument #2 to 'AccessorFunc' (string or table expected, got %s)", type(name)))
- end
- local setter = CompileString(
- string.format(setter_codens, table.concat(vars, ", _ENV.")),
- "AccessorFunc: Set" .. name
- )
- local getter = CompileString(
- "return " .. table.concat(vars, ", "),
- "AccessorFunc: Get" .. name
- )
- mt[string.format("Set%s", name)] = setfenv(setter, setmetatable(setter_env, {__newindex = mt}))
- mt[string.format("Get%s", name)] = setfenv(getter, mt)
- end
- end
Advertisement
Comments
-
- local OCTREE = {}
- AccessorFunc(OCTREE, "m_iMaxDepth", "MaxDepth")
- AccessorFunc(OCTREE, {"m_vMins", "m_vMaxs"}, "Bounds")
- OCTREE:SetMaxDepth(10)
- OCTREE:SetBounds(Vector(), Vector())
- print(OCTREE:GetMaxDepth()) -- 10
- print(OCTREE:GetBounds()) -- 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
Add Comment
Please, Sign In to add comment
Advertisement