--!strict --!optimize 2 --!native local Types = require("../Types") local int16_MAX = 2^(16-1)-1 local PI = math.pi local float64 = require("./float64") local int16 = require("./int16") local function Radtoint16(radian: number) return math.round(radian*int16_MAX/PI) end local function Radfromint16(num: number) return num*PI/int16_MAX end return { write = function(self: Types.Writer, value: CFrame) local x, y, z = value.X, value.Y, value.Z local rx, ry, rz = value:ToEulerAnglesXYZ() float64.write(self, x) float64.write(self, y) float64.write(self, z) int16.write(self, Radtoint16( rx )) int16.write(self, Radtoint16( ry )) int16.write(self, Radtoint16( rz )) end, read = function(self: Types.Writer) return CFrame.new( float64.read(self), float64.read(self), float64.read(self) ) * CFrame.Angles( Radfromint16(int16.read(self)), Radfromint16(int16.read(self)), Radfromint16(int16.read(self)) ) end, length = function() return 30 end, }