Advertisement
Guest User

Untitled

a guest
Jan 20th, 2020
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.79 KB | None | 0 0
  1. Tools.random_choice = function(tbl) return tbl[rand(1,#tbl)] end
  2. Tools.round = function(num) return math.floor(num+0.5) end -- Not accurate for negatives.
  3. Tools.complex = require("Fun/cc")
  4.  
  5.  
  6. Tools.class_case_table = {
  7.     function(k,p) return p[1][k] end,
  8.     function(k,p) return p[1][k] or p[2][k] end,
  9.     function(k,p) return p[1][k] or p[2][k] or p[3][k] end,
  10.     function(k,p) return p[1][k] or p[2][k] or p[3][k] or p[4][k] end,
  11.     function(k,p) return p[1][k] or p[2][k] or p[3][k] or p[4][k] or p[5][k] end,
  12.     function(k,p) return p[1][k] or p[2][k] or p[3][k] or p[4][k] or p[5][k] or p[6][k] end,
  13.     function(k,p) return p[1][k] or p[2][k] or p[3][k] or p[4][k] or p[5][k] or p[6][k] or p[7][k] end,
  14.     function(k,p) return p[1][k] or p[2][k] or p[3][k] or p[4][k] or p[5][k] or p[6][k] or p[7][k]  or p[8][k] end,
  15.     function(k,p) return p[1][k] or p[2][k] or p[3][k] or p[4][k] or p[5][k] or p[6][k] or p[7][k]  or p[8][k] or p[9][k] end,
  16.     function(k,p) return p[1][k] or p[2][k] or p[3][k] or p[4][k] or p[5][k] or p[6][k] or p[7][k]  or p[8][k] or p[9][k] or p[10][k] end,
  17. }
  18. Tools.class_case_table[0] = function(t,k) return nil end
  19.  
  20.  
  21. function Tools.class(string)
  22.     return function(tbl)
  23.         return function(...)
  24.             tbl.__parents__ = {...}
  25.             tbl.__class__ = tbl
  26.             tbl.__name__ = string
  27.  
  28.             local p = tbl.__parents__
  29.             local l = #tbl.__parents__
  30.  
  31.             local case_table = Tools.class_case_table
  32.             assert(tbl.__new__, " Class "..string .." does not have a "..string..".__new__  method."..
  33.                 "\n ")
  34.             local mt_tbl
  35.  
  36.             local f = case_table[l]
  37.             tbl = setmetatable(tbl, {
  38.                 __call = function(...)
  39.                     local t_ = {...}
  40.                     table.remove(t_,1)
  41.                     local _ = setmetatable({}, mt_tbl)
  42.                     tbl.__new__(_,unpack(t_))
  43.                     return _
  44.                 end,
  45.                 __index = function(t,k) return f(k,p) end
  46.             })
  47.  
  48.             mt_tbl = {__index = tbl, __add = tbl.__add or f('__add',p), __mul = tbl.__mul or f('__mul',p), __div = tbl.__div or f("__div",p), __newindex = tbl.__newindex or f('__newindex',p),
  49.                         __gc = tbl.__gc or f('__gc',p), __mode = tbl.__mode or f('__mode',p), __metatable = tbl.__metatable or f('__metatable',p), __len = tbl.__len or f('__len',p),
  50.                     __call = tbl.__call or f('__call',p), __mod = tbl.__mod or f('__mod',p), __eq = tbl.__eq or f('__eq',p), __lt = tbl.__lt or f('__lt',p), __pow = tbl.__pow or f('__pow',p),
  51.                     __unm = tbl.__unm or f('__unm',p), __concat = tbl.__concat or f('__concat',p), __sub = tbl.__sub or f('__sub',p)}
  52.  
  53.             _G[string] = tbl
  54.         end
  55.     end
  56. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement