class SLPLoader(object): def __init__(self, path, audio_player): self.env = Environment(path) self._drs_filename = None self.audio_player = audio_player self.palette = 0 self.player = 0 def _set_drs_filename(self, drs_filename): self._drs_filename = drs_filename def _get_drs_filename(self): return self._drs_filename drs_filename = property(_get_drs_filename, _set_drs_filename) @property def drs_file(self): return self.env.get_drs(self.drs_filename) def get_files(self): """ yield all SLP files as tuples (resource id, pseudo-filename) """ for table in self.drs_file.tables: for embedded in table.embedded_files.itervalues(): fname = '%d.%s' % (embedded.resource_id, table.file_extension) yield (embedded.resource_id, fname) def show_filename(self, filename, anim=False): """ show the given filename. shortcut. """ resource_id = _get_resource_id(filename) if anim: self.show_animated_resource(resource_id) else: self.show_resource(resource_id) def play_filename(self, filename): self.play_resource(_get_resource_id(filename)) def play_resource(self, resource_id): """ Play a WAV file! """ player = subprocess.Popen(self.audio_player, stdin=subprocess.PIPE, shell=True) wav_data = self.drs_file.get_data(resource_id) player.communicate(wav_data) def get_frames(self, resource_id): slp_file = self.env.get_slp(self.drs_filename, resource_id, PygletAdapter, self.palette) return [frame.parse_stream(player=self.player) for frame in slp_file.frames] def get_raw(self, resource_id): return self.drs_file.get_data(resource_id) def show_resource(self, resource_id): """ Show the given SLP file. """ frames = self.get_frames(resource_id) view = SLPView(frames) pyglet.app.run() def show_animated_resource(self, resource_id): """ Show the given SLP file as an animation. """ slp_file = self.env.get_slp(self.drs_filename, resource_id, PygletAdapter, self.palette) anims = load_aoe_animations(slp_file, player=self.player) view = AnimatedSLPView(anims) pyglet.app.run() def get_matching(self, pattern): """ yield (resource id, pseudo-filename) patterns for all SLP files matching the glob-style *pattern*. """ for resource_id, filename in self.get_files(): # TODO: could be more efficient. if fnmatch.fnmatch(filename, pattern): yield (resource_id, filename)
def __init__(self, path, audio_player): self.env = Environment(path) self._drs_filename = None self.audio_player = audio_player self.palette = 0 self.player = 0
def __init__(self, path, audio_player, interfac_drs=INTERFAC_DRS): self.env = Environment(path, interfac_drs=interfac_drs) self._drs_filename = None self.audio_player = audio_player self.palette = 0 self.player = 0