common utilities.\r
"""\r
import math\r
-\r
-def radian_to_degree(x):\r
- """darian to deglee"""\r
-\r
- return x/math.pi * 180.0\r
+import struct\r
\r
\r
"""\r
else:\r
assert(False)\r
\r
+\r
+"""\r
+utilities\r
+"""\r
+def radian_to_degree(x):\r
+ """darian to deglee"""\r
+\r
+ return x/math.pi * 180.0\r
+\r
+\r
+class ParseException(Exception):\r
+ pass\r
+\r
+\r
+def readall(path: str) -> bytes:\r
+ with open(path, "rb") as f:\r
+ return f.read()\r
+\r
+\r
+class BinaryLoader(object):\r
+ def __init__(self, io):\r
+ self.io=io\r
+\r
+ def unpack(self, fmt: str, size: int) -> "read value as format":\r
+ result=struct.unpack(fmt, self.io.read(size))\r
+ return result[0]\r
+\r
+ def read_uint(self, size):\r
+ if size==1:\r
+ return self.unpack("B", size)\r
+ if size==2:\r
+ return self.unpack("H", size)\r
+ if size==4:\r
+ return self.unpack("I", size)\r
+ print("not reach here")\r
+ raise ParseException("invalid int size: "+size)\r
+\r
+ def read_float(self):\r
+ return self.unpack("f", 4)\r
+\r
+ def read_vector2(self):\r
+ return Vector2(\r
+ self.read_float(), \r
+ self.read_float()\r
+ )\r
+\r
+ def read_vector3(self):\r
+ return Vector3(\r
+ self.read_float(), \r
+ self.read_float(), \r
+ self.read_float()\r
+ )\r
+\r
+ def read_rgba(self):\r
+ return RGBA(\r
+ self.read_float(), \r
+ self.read_float(), \r
+ self.read_float(),\r
+ self.read_float()\r
+ )\r
+\r
+ def read_rgb(self):\r
+ return RGB(\r
+ self.read_float(), \r
+ self.read_float(), \r
+ self.read_float()\r
+ )\r
+\r
+\r