@axpecter/lync 2.0.0 → 2.1.0

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.
Files changed (55) hide show
  1. package/README.md +475 -426
  2. package/package.json +1 -1
  3. package/src/Types.luau +63 -31
  4. package/src/api/Group.luau +101 -106
  5. package/src/api/Packet.luau +187 -186
  6. package/src/api/Query.luau +223 -284
  7. package/src/api/Scope.luau +46 -57
  8. package/src/api/Signal.luau +104 -137
  9. package/src/codec/Base.luau +69 -20
  10. package/src/codec/composite/Array.luau +179 -270
  11. package/src/codec/composite/Map.luau +97 -347
  12. package/src/codec/composite/Optional.luau +27 -24
  13. package/src/codec/composite/Shared.luau +96 -65
  14. package/src/codec/composite/Struct.luau +200 -360
  15. package/src/codec/composite/Tagged.luau +62 -187
  16. package/src/codec/composite/Tuple.luau +79 -103
  17. package/src/codec/datatype/Buffer.luau +49 -21
  18. package/src/codec/datatype/CFrame.luau +207 -30
  19. package/src/codec/datatype/Color.luau +21 -11
  20. package/src/codec/datatype/Instance.luau +28 -21
  21. package/src/codec/datatype/IntVector.luau +33 -21
  22. package/src/codec/datatype/NumberRange.luau +19 -10
  23. package/src/codec/datatype/Ray.luau +26 -22
  24. package/src/codec/datatype/Rect.luau +20 -16
  25. package/src/codec/datatype/Region.luau +51 -45
  26. package/src/codec/datatype/Sequence.luau +64 -56
  27. package/src/codec/datatype/String.luau +89 -56
  28. package/src/codec/datatype/UDim.luau +40 -22
  29. package/src/codec/datatype/Vector.luau +181 -17
  30. package/src/codec/meta/Auto.luau +295 -253
  31. package/src/codec/meta/Bitfield.luau +104 -148
  32. package/src/codec/meta/Custom.luau +8 -4
  33. package/src/codec/meta/Enum.luau +29 -57
  34. package/src/codec/meta/Float.luau +64 -0
  35. package/src/codec/meta/Nothing.luau +9 -5
  36. package/src/codec/meta/Unknown.luau +44 -36
  37. package/src/codec/primitive/Bool.luau +16 -26
  38. package/src/codec/primitive/Float16.luau +58 -64
  39. package/src/codec/primitive/Int.luau +68 -0
  40. package/src/codec/primitive/Number.luau +21 -43
  41. package/src/codec/primitive/Varint.luau +67 -46
  42. package/src/index.d.ts +249 -335
  43. package/src/init.luau +319 -207
  44. package/src/internal/Baseline.luau +29 -24
  45. package/src/internal/Channel.luau +333 -278
  46. package/src/internal/Middleware.luau +60 -85
  47. package/src/internal/Pool.luau +19 -30
  48. package/src/internal/Registry.luau +56 -113
  49. package/src/transport/Bridge.luau +64 -43
  50. package/src/transport/Client.luau +59 -170
  51. package/src/transport/Gate.luau +282 -142
  52. package/src/transport/Reader.luau +148 -140
  53. package/src/transport/Server.luau +138 -488
  54. package/src/api/Namespace.luau +0 -256
  55. package/src/codec/meta/Quantized.luau +0 -174
@@ -1,21 +1,185 @@
1
1
  --!strict
2
- --!native
3
- -- Vector2(8B) and Vector3(12B) codecs.
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
- return table.freeze({
8
- vec2 = Base.define(8, function(b: buffer, o: number, v: Vector2): ()
9
- buffer.writef32(b, o, v.X)
10
- buffer.writef32(b, o + 4, v.Y)
11
- end, function(b: buffer, o: number): Vector2
12
- return Vector2.new(buffer.readf32(b, o), buffer.readf32(b, o + 4))
13
- end),
14
- vec3 = Base.define(12, function(b: buffer, o: number, v: Vector3): ()
15
- buffer.writef32(b, o, v.X)
16
- buffer.writef32(b, o + 4, v.Y)
17
- buffer.writef32(b, o + 8, v.Z)
18
- end, function(b: buffer, o: number): Vector3
19
- return Vector3.new(buffer.readf32(b, o), buffer.readf32(b, o + 4), buffer.readf32(b, o + 8))
20
- end),
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)