Vetores 3D & Metatables (em Lua)
unknown
lua
3 years ago
1.3 kB
8
Indexable
-- declarando a função aqui para usar dentro da metatable function criarVertice(x, y, z) end -- agora para a metatable local table_Vertices = { -- Soma: v_1 + v_2 __add = function(a, b) return criarVertice( a.x + b.x, a.y + b.y, a.z + b.z ) end, -- Subtração: v_1 - v_2 __sub = function(a, b) return criarVertice( a.x - b.x, a.y - b.y, a.z - b.z ) end, -- Multiplicação: v_1 * v_2 __mul = function(a, b) return (a.x * b.x) + (a.y * b.y) + (a.z * b.z) end, } function criarVertice(x, y, z) local v = { x = x or 0, y = y or 0, z = z or 0, } setmetatable(v, table_Vertices) -- Dependendo da situação é bom fazer sem passar por referência: -- local v = setmetatable(v, table_Vertices) return v end os.execute("cls||clear") --Limpa tela em Unix ou Windows a = criarVertice(10, 5, 15) b = criarVertice(5, 5) c = a + b print(c.x, c.y, c.z) print("👆️ Soma\n") c = a - b print(c.x, c.y, c.z) print("👆️ Subtração\n") c = a * b print(c, "\n👆️ Multiplicação\n") -- Bem, o que aconteceu? -- -- Simples, só modificamos a propriedade de '+' (__add, soma), '-'(__sub, subtração) e '*' (__mul, multiplicação) de -- todas as tables de Vérties.
Editor is loading...