Files

46 lines
1.6 KiB
Python

from .XRIO import XRReader
from .XRMath import IVec3, IVec4
class XRNETState:
def __init__(self):
self.position = IVec3(0.0, 0.0, 0.0)
self.quaternion = IVec4(0.0, 0.0, 0.0, 0.0)
self.enabled = False
def read(self, reader: XRReader, fmin: IVec3, fmax: IVec3):
self.position = self.fvec_q8(reader, fmin, fmax)
self.quaternion = self.fqt_q8(reader)
self.enabled = bool(reader.u8())
def clamp(self, val: float, low: float, high: float) -> float:
if val < low:
return low
elif val > high:
return high
else:
return val
def fvec_q8(self, reader: XRReader, fmin: IVec3, fmax: IVec3):
vec = IVec3(0.0, 0.0, 0.0)
vec.x = self.f_q8(reader, fmin.x, fmax.x)
vec.y = self.f_q8(reader, fmin.y, fmax.y)
vec.z = self.f_q8(reader, fmin.z, fmax.z)
vec.x = self.clamp(vec.x, fmin.x, fmax.x)
vec.y = self.clamp(vec.x, fmin.y, fmax.y)
vec.z = self.clamp(vec.z, fmin.z, fmax.z)
def fqt_q8(self, reader: XRReader):
vec = IVec4(0.0, 0.0, 0.0, 0.0)
vec.x = self.f_q8(reader, -1.0, 1.0)
vec.y = self.f_q8(reader, -1.0, 1.0)
vec.z = self.f_q8(reader, -1.0, 1.0)
vec.w = self.f_q8(reader, -1.0, 1.0)
vec.x = self.clamp(vec.x, -1.0, 1.0)
vec.y = self.clamp(vec.y, -1.0, 1.0)
vec.z = self.clamp(vec.z, -1.0, 1.0)
vec.w = self.clamp(vec.w, -1.0, 1.0)
def f_q8(self, reader: XRReader, fmin: float, fmax: float):
return (float(reader.u8()) / 255.0) * (fmax - fmin) + fmin