예제 #1
0
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)
예제 #2
0
 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
예제 #3
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