def read(self, filereader: BinaryFileReader): super().read(filereader) self.normal = filereader.read_vec_f(3) self.UV = filereader.read_vec_f(2) self.unknown10 = filereader.read_float() # no idea? self.color = filereader.read_rgb_color_24bpp_uint()
def read(self, filereader: BinaryFileReader): super().read(filereader) self.size = filereader.read_uint32() self.ID = filereader.read_uint32() self.version_string = SizedCString(filereader) if self.version_string.string == 'Version': self.versionNumber = filereader.read_uint32() self.material_name = SizedCString(filereader) else: self.material_name = self.version_string self.texture_name = SizedCString(filereader) self.opacity = filereader.read_float() self.emissiveStrength = filereader.read_float() self.textureAddressMode = filereader.read_uint32( ) #1 = WRAP, 3 = CLAMP. https://docs.microsoft.com/en-au/windows/desktop/direct3d9/d3dtextureaddress gameVer = self.get_material_game_version() #check if it's a rainbow six file, or rogue spear file if gameVer == RSEGameVersions.RAINBOW_SIX: # Rainbow Six files typically have material sizes this size, or contain no version number self.ambientColorUInt = filereader.read_rgb_color_24bpp_uint() self.ambientColorFloat = list( normalize_color(self.ambientColorUInt)) self.diffuseColorUInt = filereader.read_rgb_color_24bpp_uint() self.diffuseColorFloat = list( normalize_color(self.diffuseColorUInt)) self.specularColorUInt = filereader.read_rgb_color_24bpp_uint() self.specularColorFloat = list( normalize_color(self.specularColorUInt)) self.normalizedColors = False elif gameVer == RSEGameVersions.ROGUE_SPEAR: #It's a Rogue Spear file self.ambientColorFloat = filereader.read_rgba_color_32bpp_float() self.ambientColorUInt = list( unnormalize_color(self.ambientColorFloat)) self.diffuseColorFloat = filereader.read_rgba_color_32bpp_float() self.diffuseColorUInt = list( unnormalize_color(self.diffuseColorFloat)) self.specularColorFloat = filereader.read_rgba_color_32bpp_float() self.specularColorUInt = list( unnormalize_color(self.specularColorFloat)) self.normalizedColors = True else: log.warning("Unhandled case") self.specularLevel = filereader.read_float() self.twoSidedRaw = filereader.read_bytes(1)[0] #TODO: Find a better way to read floats, maybe make this a function self.twoSided = False if self.twoSidedRaw > 0: self.twoSided = True