/
elite-ger
/
luaf
Обзор
Документация
Войти
/
elite-ger
/
luaf
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/luaf_vector.c
331 строка
12 KB
Elite
Hello!
26 июн 2026, 19:07
26 июн 2026, 19:07
2b5046d
Код
Авторство
О чём код?
#include "luaf.h" void luaf_open_vector(lua_State* L) { luaL_dostring(L, "-- Vector library for Luaf\n" "-- Vector1, Vector2, Vector3, Vector4\n" "\n" "Vector1 = {}\n" "Vector1.__index = Vector1\n" "Vector1.Type = \"Vector1\"\n" "\n" "function Vector1.new(x)\n" " return setmetatable({X = x or 0}, Vector1)\n" "end\n" "\n" "function Vector1:__add(other)\n" " if type(other) == \"number\" then\n" " return Vector1.new(self.X + other)\n" " end\n" " return Vector1.new(self.X + other.X)\n" "end\n" "\n" "function Vector1:__sub(other)\n" " if type(other) == \"number\" then\n" " return Vector1.new(self.X - other)\n" " end\n" " return Vector1.new(self.X - other.X)\n" "end\n" "\n" "function Vector1:__mul(other)\n" " if type(other) == \"number\" then\n" " return Vector1.new(self.X * other)\n" " end\n" " return Vector1.new(self.X * other.X)\n" "end\n" "\n" "function Vector1:__div(other)\n" " if type(other) == \"number\" then\n" " return Vector1.new(self.X / other)\n" " end\n" " return Vector1.new(self.X / other.X)\n" "end\n" "\n" "function Vector1:__unm()\n" " return Vector1.new(-self.X)\n" "end\n" "\n" "function Vector1:__eq(other)\n" " return self.X == other.X\n" "end\n" "\n" "function Vector1:__tostring()\n" " return string.format(\"%.3f\", self.X)\n" "end\n" "\n" "function Vector1:Magnitude()\n" " return math.abs(self.X)\n" "end\n" "\n" "function Vector1:Abs()\n" " return Vector1.new(math.abs(self.X))\n" "end\n" "\n" "function Vector1:Lerp(other, t)\n" " return Vector1.new(self.X + (other.X - self.X) * t)\n" "end\n" "\n" "function Vector1:Clone()\n" " return Vector1.new(self.X)\n" "end\n" "\n" "\n" "Vector2 = {}\n" "Vector2.__index = Vector2\n" "Vector2.Type = \"Vector2\"\n" "\n" "function Vector2.new(x, y)\n" " return setmetatable({X = x or 0, Y = y or 0}, Vector2)\n" "end\n" "\n" "Vector2.zero = Vector2.new(0, 0)\n" "Vector2.one = Vector2.new(1, 1)\n" "Vector2.xAxis = Vector2.new(1, 0)\n" "Vector2.yAxis = Vector2.new(0, 1)\n" "\n" "function Vector2:__add(other)\n" " if type(other) == \"number\" then\n" " return Vector2.new(self.X + other, self.Y + other)\n" " end\n" " return Vector2.new(self.X + other.X, self.Y + other.Y)\n" "end\n" "\n" "function Vector2:__sub(other)\n" " if type(other) == \"number\" then\n" " return Vector2.new(self.X - other, self.Y - other)\n" " end\n" " return Vector2.new(self.X - other.X, self.Y - other.Y)\n" "end\n" "\n" "function Vector2:__mul(other)\n" " if type(other) == \"number\" then\n" " return Vector2.new(self.X * other, self.Y * other)\n" " end\n" " return Vector2.new(self.X * other.X, self.Y * other.Y)\n" "end\n" "\n" "function Vector2:__div(other)\n" " if type(other) == \"number\" then\n" " return Vector2.new(self.X / other, self.Y / other)\n" " end\n" " return Vector2.new(self.X / other.X, self.Y / other.Y)\n" "end\n" "\n" "function Vector2:__unm()\n" " return Vector2.new(-self.X, -self.Y)\n" "end\n" "\n" "function Vector2:__eq(other)\n" " return self.X == other.X and self.Y == other.Y\n" "end\n" "\n" "function Vector2:__tostring()\n" " return string.format(\"%.3f, %.3f\", self.X, self.Y)\n" "end\n" "\n" "function Vector2:Magnitude()\n" " return math.sqrt(self.X * self.X + self.Y * self.Y)\n" "end\n" "\n" "function Vector2:Unit()\n" " local m = self:Magnitude()\n" " if m == 0 then return Vector2.new(0, 0) end\n" " return self / m\n" "end\n" "\n" "function Vector2:Dot(other)\n" " return self.X * other.X + self.Y * other.Y\n" "end\n" "\n" "function Vector2:Lerp(other, t)\n" " return Vector2.new(\n" " self.X + (other.X - self.X) * t,\n" " self.Y + (other.Y - self.Y) * t\n" " )\n" "end\n" "\n" "function Vector2:Abs()\n" " return Vector2.new(math.abs(self.X), math.abs(self.Y))\n" "end\n" "\n" "function Vector2:Clone()\n" " return Vector2.new(self.X, self.Y)\n" "end\n" "\n" "\n" "Vector3 = {}\n" "Vector3.__index = Vector3\n" "Vector3.Type = \"Vector3\"\n" "\n" "function Vector3.new(x, y, z)\n" " return setmetatable({X = x or 0, Y = y or 0, Z = z or 0}, Vector3)\n" "end\n" "\n" "Vector3.zero = Vector3.new(0, 0, 0)\n" "Vector3.one = Vector3.new(1, 1, 1)\n" "Vector3.xAxis = Vector3.new(1, 0, 0)\n" "Vector3.yAxis = Vector3.new(0, 1, 0)\n" "Vector3.zAxis = Vector3.new(0, 0, 1)\n" "\n" "function Vector3:__add(other)\n" " if type(other) == \"number\" then\n" " return Vector3.new(self.X + other, self.Y + other, self.Z + other)\n" " end\n" " return Vector3.new(self.X + other.X, self.Y + other.Y, self.Z + other.Z)\n" "end\n" "\n" "function Vector3:__sub(other)\n" " if type(other) == \"number\" then\n" " return Vector3.new(self.X - other, self.Y - other, self.Z - other)\n" " end\n" " return Vector3.new(self.X - other.X, self.Y - other.Y, self.Z - other.Z)\n" "end\n" "\n" "function Vector3:__mul(other)\n" " if type(other) == \"number\" then\n" " return Vector3.new(self.X * other, self.Y * other, self.Z * other)\n" " end\n" " return Vector3.new(self.X * other.X, self.Y * other.Y, self.Z * other.Z)\n" "end\n" "\n" "function Vector3:__div(other)\n" " if type(other) == \"number\" then\n" " return Vector3.new(self.X / other, self.Y / other, self.Z / other)\n" " end\n" " return Vector3.new(self.X / other.X, self.Y / other.Y, self.Z / other.Z)\n" "end\n" "\n" "function Vector3:__unm()\n" " return Vector3.new(-self.X, -self.Y, -self.Z)\n" "end\n" "\n" "function Vector3:__eq(other)\n" " return self.X == other.X and self.Y == other.Y and self.Z == other.Z\n" "end\n" "\n" "function Vector3:__tostring()\n" " return string.format(\"%.3f, %.3f, %.3f\", self.X, self.Y, self.Z)\n" "end\n" "\n" "function Vector3:Magnitude()\n" " return math.sqrt(self.X * self.X + self.Y * self.Y + self.Z * self.Z)\n" "end\n" "\n" "function Vector3:Unit()\n" " local m = self:Magnitude()\n" " if m == 0 then return Vector3.new(0, 0, 0) end\n" " return self / m\n" "end\n" "\n" "function Vector3:Dot(other)\n" " return self.X * other.X + self.Y * other.Y + self.Z * other.Z\n" "end\n" "\n" "function Vector3:Cross(other)\n" " return Vector3.new(\n" " self.Y * other.Z - self.Z * other.Y,\n" " self.Z * other.X - self.X * other.Z,\n" " self.X * other.Y - self.Y * other.X\n" " )\n" "end\n" "\n" "function Vector3:Lerp(other, t)\n" " return Vector3.new(\n" " self.X + (other.X - self.X) * t,\n" " self.Y + (other.Y - self.Y) * t,\n" " self.Z + (other.Z - self.Z) * t\n" " )\n" "end\n" "\n" "function Vector3:Abs()\n" " return Vector3.new(math.abs(self.X), math.abs(self.Y), math.abs(self.Z))\n" "end\n" "\n" "function Vector3:Clone()\n" " return Vector3.new(self.X, self.Y, self.Z)\n" "end\n" "\n" "\n" "Vector4 = {}\n" "Vector4.__index = Vector4\n" "Vector4.Type = \"Vector4\"\n" "\n" "function Vector4.new(x, y, z, w)\n" " return setmetatable({X = x or 0, Y = y or 0, Z = z or 0, W = w or 0}, Vector4)\n" "end\n" "\n" "Vector4.zero = Vector4.new(0, 0, 0, 0)\n" "Vector4.one = Vector4.new(1, 1, 1, 1)\n" "\n" "function Vector4:__add(other)\n" " if type(other) == \"number\" then\n" " return Vector4.new(self.X + other, self.Y + other, self.Z + other, self.W + other)\n" " end\n" " return Vector4.new(self.X + other.X, self.Y + other.Y, self.Z + other.Z, self.W + other.W)\n" "end\n" "\n" "function Vector4:__sub(other)\n" " if type(other) == \"number\" then\n" " return Vector4.new(self.X - other, self.Y - other, self.Z - other, self.W - other)\n" " end\n" " return Vector4.new(self.X - other.X, self.Y - other.Y, self.Z - other.Z, self.W - other.W)\n" "end\n" "\n" "function Vector4:__mul(other)\n" " if type(other) == \"number\" then\n" " return Vector4.new(self.X * other, self.Y * other, self.Z * other, self.W * other)\n" " end\n" " return Vector4.new(self.X * other.X, self.Y * other.Y, self.Z * other.Z, self.W * other.W)\n" "end\n" "\n" "function Vector4:__div(other)\n" " if type(other) == \"number\" then\n" " return Vector4.new(self.X / other, self.Y / other, self.Z / other, self.W / other)\n" " end\n" " return Vector4.new(self.X / other.X, self.Y / other.Y, self.Z / other.Z, self.W / other.W)\n" "end\n" "\n" "function Vector4:__unm()\n" " return Vector4.new(-self.X, -self.Y, -self.Z, -self.W)\n" "end\n" "\n" "function Vector4:__eq(other)\n" " return self.X == other.X and self.Y == other.Y and self.Z == other.Z and self.W == other.W\n" "end\n" "\n" "function Vector4:__tostring()\n" " return string.format(\"%.3f, %.3f, %.3f, %.3f\", self.X, self.Y, self.Z, self.W)\n" "end\n" "\n" "function Vector4:Magnitude()\n" " return math.sqrt(self.X * self.X + self.Y * self.Y + self.Z * self.Z + self.W * self.W)\n" "end\n" "\n" "function Vector4:Unit()\n" " local m = self:Magnitude()\n" " if m == 0 then return Vector4.new(0, 0, 0, 0) end\n" " return self / m\n" "end\n" "\n" "function Vector4:Dot(other)\n" " return self.X * other.X + self.Y * other.Y + self.Z * other.Z + self.W * other.W\n" "end\n" "\n" "function Vector4:Lerp(other, t)\n" " return Vector4.new(\n" " self.X + (other.X - self.X) * t,\n" " self.Y + (other.Y - self.Y) * t,\n" " self.Z + (other.Z - self.Z) * t,\n" " self.W + (other.W - self.W) * t\n" " )\n" "end\n" "\n" "function Vector4:Abs()\n" " return Vector4.new(math.abs(self.X), math.abs(self.Y), math.abs(self.Z), math.abs(self.W))\n" "end\n" "\n" "function Vector4:Clone()\n" " return Vector4.new(self.X, self.Y, self.Z, self.W)\n" "end\n" ); }