Advertisement
SneakySquid

AccessorFunc but cool

Feb 23rd, 2025 (edited)
234
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.12 KB | None | 0 0
  1. local AccessorFunc do
  2.     local setter_env = {select = select}
  3.  
  4.     local setter_codens = [[
  5.         local _ENV = ...
  6.         _ENV.%s = select(2, ...)
  7.     ]]
  8.  
  9.     function AccessorFunc(mt, vars, name)
  10.         assert(istable(mt), string.format("bad argument #1 to 'AccessorFunc' (table expected, got %s)", type(mt)))
  11.         assert(isstring(name), string.format("bad argument #3 to 'AccessorFunc' (string expected, got %s)", type(name)))
  12.  
  13.         if not istable(vars) then
  14.             assert(isstring(vars), string.format("bad argument #2 to 'AccessorFunc' (string or table expected, got %s)", type(name)))
  15.             vars = {vars}
  16.         else
  17.             assert(istable(vars), string.format("bad argument #2 to 'AccessorFunc' (string or table expected, got %s)", type(name)))
  18.         end
  19.  
  20.         local setter = CompileString(
  21.             string.format(setter_codens, table.concat(vars, ", _ENV.")),
  22.             "AccessorFunc: Set" .. name
  23.         )
  24.  
  25.         local getter = CompileString(
  26.             "return " .. table.concat(vars, ", "),
  27.             "AccessorFunc: Get" .. name
  28.         )
  29.  
  30.         mt[string.format("Set%s", name)] = setfenv(setter, setmetatable(setter_env, {__newindex = mt}))
  31.         mt[string.format("Get%s", name)] = setfenv(getter, mt)
  32.     end
  33. end
Advertisement
Comments
  • SneakySquid
    3 hours
    # Lua 0.30 KB | 0 0
    1. local OCTREE = {}
    2.  
    3. AccessorFunc(OCTREE, "m_iMaxDepth", "MaxDepth")
    4. AccessorFunc(OCTREE, {"m_vMins", "m_vMaxs"}, "Bounds")
    5.  
    6. OCTREE:SetMaxDepth(10)
    7. OCTREE:SetBounds(Vector(), Vector())
    8.  
    9. print(OCTREE:GetMaxDepth()) -- 10
    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