Source code for dk64_lib.f3dex2.vertex

from dataclasses import dataclass

from dk64_lib.binary_reader import BinaryReader


[docs] @dataclass(frozen=True, slots=True) class Vertex: x: int y: int z: int unk: int texture_cord_u: int texture_cord_v: int xr: int yg: int zb: int alpha: int @classmethod def from_bytes(cls, vertex_data: bytes) -> "Vertex": reader = BinaryReader(vertex_data) return cls( x=reader.read_i16(0), y=reader.read_i16(2), z=reader.read_i16(4), unk=reader.read_u16(6), texture_cord_u=reader.read_u16(8), texture_cord_v=reader.read_u16(10), xr=reader.read_u8(12), yg=reader.read_u8(13), zb=reader.read_u8(14), alpha=reader.read_u8(15), ) def __repr__(self): return f"{self.__class__.__qualname__}({self.x}, {self.y}, {self.z})"
[docs] def to_obj_line(self, include_color: bool = True) -> str: """Format this vertex as an OBJ vertex line.""" position = f"v {self.x} {self.y} {self.z}" if not include_color: return position return ( f"{position} " f"{self.xr / 255:.6f} " f"{self.yg / 255:.6f} " f"{self.zb / 255:.6f}" )