import os from .helpers.ImportHelper import find_all_files class ResourceReader: need_search: bool path: str assets_file: None offset: int size: int def __init__(self, *args): """ Input: Option 1: path - file path assets_file - SerializedFile offset - size - Option 2: reader - EndianBinaryReader offset - size - """ if len(args) == 4: self.need_search = True self.path = args[0] self.assets_file = args[1] elif len(args) == 3: self.need_search = False self.reader = args[0] self.offset = args[-2] self.size = args[-1] def get_data(self): if self.need_search: resource_file_name = os.path.basename(self.path) reader = self.assets_file.assets_manager.resource_file_readers.get(resource_file_name) if reader: reader.Position = self.offset return reader.read_bytes(self.size) current_directory = os.path.dirname(self.assets_file.full_name) resource_file_path = os.path.join(current_directory, resource_file_name) if not os.path.isfile(resource_file_path): find_files = find_all_files(current_directory, resource_file_name) if find_files: resource_file_path = find_files[0] if os.path.isfile(resource_file_path): with open(resource_file_path, 'rb') as f: f.seek(self.offset) return f.read(self.size) else: raise FileNotFoundError(f"Can't find the resource file {resource_file_name}") else: self.reader.Position = self.offset return self.reader.read_bytes(self.size)