@axpecter/lync 2.0.0 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +342 -428
- package/package.json +1 -1
- package/src/Types.luau +63 -31
- package/src/api/Group.luau +101 -106
- package/src/api/Packet.luau +187 -186
- package/src/api/Query.luau +223 -284
- package/src/api/Scope.luau +46 -57
- package/src/api/Signal.luau +104 -137
- package/src/codec/Base.luau +69 -20
- package/src/codec/composite/Array.luau +179 -270
- package/src/codec/composite/Map.luau +97 -347
- package/src/codec/composite/Optional.luau +27 -24
- package/src/codec/composite/Shared.luau +96 -65
- package/src/codec/composite/Struct.luau +200 -360
- package/src/codec/composite/Tagged.luau +62 -187
- package/src/codec/composite/Tuple.luau +79 -103
- package/src/codec/datatype/Buffer.luau +49 -21
- package/src/codec/datatype/CFrame.luau +207 -30
- package/src/codec/datatype/Color.luau +21 -11
- package/src/codec/datatype/Instance.luau +28 -21
- package/src/codec/datatype/IntVector.luau +33 -21
- package/src/codec/datatype/NumberRange.luau +19 -10
- package/src/codec/datatype/Ray.luau +26 -22
- package/src/codec/datatype/Rect.luau +20 -16
- package/src/codec/datatype/Region.luau +51 -45
- package/src/codec/datatype/Sequence.luau +64 -56
- package/src/codec/datatype/String.luau +89 -56
- package/src/codec/datatype/UDim.luau +40 -22
- package/src/codec/datatype/Vector.luau +181 -17
- package/src/codec/meta/Auto.luau +295 -253
- package/src/codec/meta/Bitfield.luau +104 -148
- package/src/codec/meta/Custom.luau +8 -4
- package/src/codec/meta/Enum.luau +29 -57
- package/src/codec/meta/Float.luau +64 -0
- package/src/codec/meta/Nothing.luau +9 -5
- package/src/codec/meta/Unknown.luau +44 -36
- package/src/codec/primitive/Bool.luau +16 -26
- package/src/codec/primitive/Float16.luau +58 -64
- package/src/codec/primitive/Int.luau +68 -0
- package/src/codec/primitive/Number.luau +21 -43
- package/src/codec/primitive/Varint.luau +67 -46
- package/src/index.d.ts +251 -335
- package/src/init.luau +319 -207
- package/src/internal/Baseline.luau +29 -24
- package/src/internal/Channel.luau +333 -278
- package/src/internal/Middleware.luau +60 -85
- package/src/internal/Pool.luau +19 -30
- package/src/internal/Registry.luau +56 -113
- package/src/transport/Bridge.luau +64 -43
- package/src/transport/Client.luau +59 -170
- package/src/transport/Gate.luau +282 -142
- package/src/transport/Reader.luau +148 -140
- package/src/transport/Server.luau +138 -488
- package/src/api/Namespace.luau +0 -256
- package/src/codec/meta/Quantized.luau +0 -174
|
@@ -1,21 +1,185 @@
|
|
|
1
1
|
--!strict
|
|
2
|
-
--!
|
|
3
|
-
-- Vector2
|
|
2
|
+
--!optimize 2
|
|
3
|
+
-- Vector2 and Vector3 codecs with __call for quantized variants.
|
|
4
4
|
|
|
5
5
|
local Base = require(script.Parent.Parent.Base)
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
7
|
+
-- Private -------------------------------------------------------------
|
|
8
|
+
|
|
9
|
+
local ceil = math.ceil
|
|
10
|
+
local clamp = math.clamp
|
|
11
|
+
local round = math.round
|
|
12
|
+
local max = math.max
|
|
13
|
+
local min = math.min
|
|
14
|
+
|
|
15
|
+
--[[
|
|
16
|
+
Shared quantization setup used by both vec2/vec3 __call and Float.luau.
|
|
17
|
+
Returns compBytes, writeFn, readFn, scale, invScale.
|
|
18
|
+
]]
|
|
19
|
+
local function quantizeSetup(
|
|
20
|
+
rangeMin: number,
|
|
21
|
+
rangeMax: number,
|
|
22
|
+
precision: number
|
|
23
|
+
): (
|
|
24
|
+
number,
|
|
25
|
+
(buffer, number, number) -> (),
|
|
26
|
+
(buffer, number) -> number,
|
|
27
|
+
number,
|
|
28
|
+
number
|
|
29
|
+
)
|
|
30
|
+
if rangeMin > rangeMax then
|
|
31
|
+
error("[Lync] Lync.vec2/vec3: min must be <= max")
|
|
32
|
+
end
|
|
33
|
+
if precision <= 0 then
|
|
34
|
+
error("[Lync] Lync.vec2/vec3: precision must be positive")
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
local delta = rangeMax - rangeMin
|
|
38
|
+
local maxInt = min(0xFFFFFFFF, max(1, ceil(delta / precision)))
|
|
39
|
+
|
|
40
|
+
local compBytes: number
|
|
41
|
+
local wfn: (buffer, number, number) -> ()
|
|
42
|
+
local rfn: (buffer, number) -> number
|
|
43
|
+
|
|
44
|
+
if maxInt <= 0xFF then
|
|
45
|
+
compBytes = 1
|
|
46
|
+
wfn = buffer.writeu8
|
|
47
|
+
rfn = buffer.readu8
|
|
48
|
+
elseif maxInt <= 0xFFFF then
|
|
49
|
+
compBytes = 2
|
|
50
|
+
wfn = buffer.writeu16
|
|
51
|
+
rfn = buffer.readu16
|
|
52
|
+
else
|
|
53
|
+
compBytes = 4
|
|
54
|
+
wfn = buffer.writeu32
|
|
55
|
+
rfn = buffer.readu32
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
local scale = maxInt / delta
|
|
59
|
+
local invScale = delta / maxInt
|
|
60
|
+
return compBytes, wfn, rfn, scale, invScale
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
-- Vec2 ----------------------------------------------------------------
|
|
64
|
+
|
|
65
|
+
local function writeVec2(b: buffer, off: number, value: Vector2): ()
|
|
66
|
+
buffer.writef32(b, off, value.X)
|
|
67
|
+
buffer.writef32(b, off + 4, value.Y)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
local function readVec2(b: buffer, off: number): Vector2
|
|
71
|
+
return Vector2.new(buffer.readf32(b, off), buffer.readf32(b, off + 4))
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
local function quantizeVec2(_self: any, rangeMin: number, rangeMax: number, precision: number): any
|
|
75
|
+
local delta = rangeMax - rangeMin
|
|
76
|
+
if delta == 0 then
|
|
77
|
+
local constant = Vector2.new(rangeMin, rangeMin)
|
|
78
|
+
return Base.zero() :: any -- constant value, zero bytes
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
local compBytes, wfn, rfn, scale, invScale = quantizeSetup(rangeMin, rangeMax, precision)
|
|
82
|
+
local totalSize = compBytes * 2
|
|
83
|
+
|
|
84
|
+
return Base.define(totalSize, function(b: buffer, off: number, value: Vector2): ()
|
|
85
|
+
wfn(b, off, round(clamp(value.X - rangeMin, 0, delta) * scale))
|
|
86
|
+
wfn(b, off + compBytes, round(clamp(value.Y - rangeMin, 0, delta) * scale))
|
|
87
|
+
end, function(b: buffer, off: number): Vector2
|
|
88
|
+
return Vector2.new(
|
|
89
|
+
rfn(b, off) * invScale + rangeMin,
|
|
90
|
+
rfn(b, off + compBytes) * invScale + rangeMin
|
|
91
|
+
)
|
|
92
|
+
end, { _typeCheck = "Vector2", _min = rangeMin, _max = rangeMax })
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
-- Vec3 ----------------------------------------------------------------
|
|
96
|
+
|
|
97
|
+
local function writeVec3(b: buffer, off: number, value: Vector3): ()
|
|
98
|
+
buffer.writef32(b, off, value.X)
|
|
99
|
+
buffer.writef32(b, off + 4, value.Y)
|
|
100
|
+
buffer.writef32(b, off + 8, value.Z)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
local function readVec3(b: buffer, off: number): Vector3
|
|
104
|
+
return Vector3.new(
|
|
105
|
+
buffer.readf32(b, off),
|
|
106
|
+
buffer.readf32(b, off + 4),
|
|
107
|
+
buffer.readf32(b, off + 8)
|
|
108
|
+
)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
local function quantizeVec3(_self: any, rangeMin: number, rangeMax: number, precision: number): any
|
|
112
|
+
local delta = rangeMax - rangeMin
|
|
113
|
+
if delta == 0 then
|
|
114
|
+
return Base.zero() :: any
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
local compBytes, wfn, rfn, scale, invScale = quantizeSetup(rangeMin, rangeMax, precision)
|
|
118
|
+
local totalSize = compBytes * 3
|
|
119
|
+
|
|
120
|
+
return Base.define(totalSize, function(b: buffer, off: number, value: Vector3): ()
|
|
121
|
+
wfn(b, off, round(clamp(value.X - rangeMin, 0, delta) * scale))
|
|
122
|
+
wfn(b, off + compBytes, round(clamp(value.Y - rangeMin, 0, delta) * scale))
|
|
123
|
+
wfn(b, off + compBytes * 2, round(clamp(value.Z - rangeMin, 0, delta) * scale))
|
|
124
|
+
end, function(b: buffer, off: number): Vector3
|
|
125
|
+
return Vector3.new(
|
|
126
|
+
rfn(b, off) * invScale + rangeMin,
|
|
127
|
+
rfn(b, off + compBytes) * invScale + rangeMin,
|
|
128
|
+
rfn(b, off + compBytes * 2) * invScale + rangeMin
|
|
129
|
+
)
|
|
130
|
+
end, { _typeCheck = "Vector3", _min = rangeMin, _max = rangeMax })
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
-- Public --------------------------------------------------------------
|
|
134
|
+
|
|
135
|
+
local VectorCodec = {}
|
|
136
|
+
|
|
137
|
+
VectorCodec.vec2 = setmetatable(
|
|
138
|
+
{
|
|
139
|
+
_size = 8,
|
|
140
|
+
_directWrite = writeVec2,
|
|
141
|
+
_directRead = readVec2,
|
|
142
|
+
_typeCheck = "Vector2",
|
|
143
|
+
|
|
144
|
+
write = function(ch: Types.ChannelState, value: Vector2): ()
|
|
145
|
+
local cursor = ch.cursor
|
|
146
|
+
if cursor + 8 > ch.size then
|
|
147
|
+
alloc(ch, 8)
|
|
148
|
+
end
|
|
149
|
+
writeVec2(ch.buff, cursor, value)
|
|
150
|
+
ch.cursor = cursor + 8
|
|
151
|
+
end,
|
|
152
|
+
|
|
153
|
+
read = function(src: buffer, pos: number, _refs: { Instance }?): (Vector2, number)
|
|
154
|
+
return readVec2(src, pos), 8
|
|
155
|
+
end,
|
|
156
|
+
} :: any,
|
|
157
|
+
{ __call = quantizeVec2 }
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
VectorCodec.vec3 = setmetatable(
|
|
161
|
+
{
|
|
162
|
+
_size = 12,
|
|
163
|
+
_directWrite = writeVec3,
|
|
164
|
+
_directRead = readVec3,
|
|
165
|
+
_typeCheck = "Vector3",
|
|
166
|
+
|
|
167
|
+
write = function(ch: Types.ChannelState, value: Vector3): ()
|
|
168
|
+
local cursor = ch.cursor
|
|
169
|
+
if cursor + 12 > ch.size then
|
|
170
|
+
alloc(ch, 12)
|
|
171
|
+
end
|
|
172
|
+
writeVec3(ch.buff, cursor, value)
|
|
173
|
+
ch.cursor = cursor + 12
|
|
174
|
+
end,
|
|
175
|
+
|
|
176
|
+
read = function(src: buffer, pos: number, _refs: { Instance }?): (Vector3, number)
|
|
177
|
+
return readVec3(src, pos), 12
|
|
178
|
+
end,
|
|
179
|
+
} :: any,
|
|
180
|
+
{ __call = quantizeVec3 }
|
|
181
|
+
)
|
|
182
|
+
|
|
183
|
+
VectorCodec.quantizeSetup = quantizeSetup
|
|
184
|
+
|
|
185
|
+
return table.freeze(VectorCodec)
|