mirror of
https://github.com/imezx/Warp.git
synced 2026-03-18 00:44:16 +00:00
feat(buffer): .custom_datatype & color3f16 support
This commit is contained in:
parent
4d958a91fb
commit
1f9fe9dfd7
1 changed files with 44 additions and 2 deletions
|
|
@ -89,7 +89,7 @@ do -- precomputes for readf16
|
||||||
value = sign * (1 + mantissa / 1024) * math.ldexp(1, exponent - 15)
|
value = sign * (1 + mantissa / 1024) * math.ldexp(1, exponent - 15)
|
||||||
end
|
end
|
||||||
F16_LOOKUP[raw + 1] = value
|
F16_LOOKUP[raw + 1] = value
|
||||||
if raw % 500 == 0 then
|
if raw % 1000 == 0 then
|
||||||
task.wait()
|
task.wait()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -1102,6 +1102,7 @@ local function reset(w: Writer)
|
||||||
end
|
end
|
||||||
|
|
||||||
local Schema = {}
|
local Schema = {}
|
||||||
|
Schema.__custom_datatypes = {}
|
||||||
export type SchemaType = { type: string, [any]: any }
|
export type SchemaType = { type: string, [any]: any }
|
||||||
|
|
||||||
Schema.u8 = { type = "u8" }
|
Schema.u8 = { type = "u8" }
|
||||||
|
|
@ -1118,6 +1119,7 @@ Schema.vector3 = { type = "vector3" }
|
||||||
Schema.vector2 = { type = "vector2" }
|
Schema.vector2 = { type = "vector2" }
|
||||||
Schema.cframe = { type = "cframe" }
|
Schema.cframe = { type = "cframe" }
|
||||||
Schema.color3 = { type = "color3" }
|
Schema.color3 = { type = "color3" }
|
||||||
|
Schema.color3f16 = { type = "color3f16" }
|
||||||
Schema.instance = { type = "instance" }
|
Schema.instance = { type = "instance" }
|
||||||
Schema.string = { type = "string" }
|
Schema.string = { type = "string" }
|
||||||
|
|
||||||
|
|
@ -1144,8 +1146,26 @@ function Schema.struct(fields: { [string]: SchemaType }): SchemaType
|
||||||
return { type = "struct", fields = orderedFields }
|
return { type = "struct", fields = orderedFields }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function Schema.custom_datatype(name: string, object: { any }, writer: (w: Writer, v: any) -> (), reader: (b: buffer, c: number, refs: { Instance }?) -> (buffer, number))
|
||||||
|
if Schema[name] then
|
||||||
|
warn(`[Warp.Schema]: this 'custom_datatype': "{name}" is already exists, try changing the name.`)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
(object :: any).type = name
|
||||||
|
Schema[name] = object
|
||||||
|
Schema.__custom_datatypes[name] = {
|
||||||
|
writer = writer,
|
||||||
|
reader = reader,
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
local function compilePacker(s: SchemaType): (Writer, any) -> ()
|
local function compilePacker(s: SchemaType): (Writer, any) -> ()
|
||||||
local schema_type = s.type
|
local schema_type = s.type
|
||||||
|
|
||||||
|
if Schema.__custom_datatypes[schema_type] then
|
||||||
|
return Schema.__custom_datatypes[schema_type].writer
|
||||||
|
end
|
||||||
|
|
||||||
if schema_type == "u8" then
|
if schema_type == "u8" then
|
||||||
return wByte
|
return wByte
|
||||||
end
|
end
|
||||||
|
|
@ -1225,6 +1245,14 @@ local function compilePacker(s: SchemaType): (Writer, any) -> ()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if schema_type == "color3f16" then
|
||||||
|
return function(w, v)
|
||||||
|
wF16(w, math.clamp(v.R * 255, 0, 255))
|
||||||
|
wF16(w, math.clamp(v.G * 255, 0, 255))
|
||||||
|
wF16(w, math.clamp(v.B * 255, 0, 255))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
if schema_type == "instance" then
|
if schema_type == "instance" then
|
||||||
return function(w, v)
|
return function(w, v)
|
||||||
table.insert(w.refs, v)
|
table.insert(w.refs, v)
|
||||||
|
|
@ -1381,11 +1409,16 @@ local function compilePacker(s: SchemaType): (Writer, any) -> ()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return function() end
|
return function() return end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function compileReader(s: SchemaType): (buffer, number, { any }?) -> (any, number)
|
local function compileReader(s: SchemaType): (buffer, number, { any }?) -> (any, number)
|
||||||
local schema_type = s.type
|
local schema_type = s.type
|
||||||
|
|
||||||
|
if Schema.__custom_datatypes[schema_type] then
|
||||||
|
return Schema.__custom_datatypes[schema_type].reader
|
||||||
|
end
|
||||||
|
|
||||||
if schema_type == "u8" then
|
if schema_type == "u8" then
|
||||||
return function(b, c)
|
return function(b, c)
|
||||||
return buffer.readu8(b, c), c + 1
|
return buffer.readu8(b, c), c + 1
|
||||||
|
|
@ -1469,6 +1502,15 @@ local function compileReader(s: SchemaType): (buffer, number, { any }?) -> (any,
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if schema_type == "color3f16" then
|
||||||
|
return function(b, c)
|
||||||
|
local r = readF16(b, c)
|
||||||
|
local g = readF16(b, c + 2)
|
||||||
|
local bVal = readF16(b, c + 4)
|
||||||
|
return Color3.fromRGB(r, g, bVal), c + 6
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
if schema_type == "cframe" then
|
if schema_type == "cframe" then
|
||||||
return function(b, c)
|
return function(b, c)
|
||||||
local px = buffer.readf32(b, c)
|
local px = buffer.readf32(b, c)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue