view pytouhou/resource/anmwrapper.py @ 429:40d5f3083ebc

Implement PCB’s ANM2 format and vm.
author Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
date Sat, 03 Aug 2013 15:48:57 +0200
parents 2100276c289d
children
line wrap: on
line source

# -*- encoding: utf-8 -*-
##
## Copyright (C) 2012 Thibaut Girka <thib@sitedethib.com>
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published
## by the Free Software Foundation; version 3 only.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##

from itertools import repeat, chain


class AnmWrapper(object):
    def __init__(self, anm_files, offsets=None):
        """Wrapper for scripts and sprites described in “anm_files”.

        The optional “offsets” argument specifies a list of offsets to be added
        to script and sprite numbers of each file described in “anm_files”.

        That is, if anm_files[0] and anm_files[1] each have only one sprite,
        numbered 0 in both cases, and offsets=(0, 1), the first file's sprite
        will be numbered 0 and the second file's will be numbered 1.
        """
        self.scripts = {}
        self.sprites = {}

        if not offsets:
            offsets = repeat(0) # “offsets” defaults to zeroes

        for anm, offset in zip(chain(*anm_files), offsets):
            for script_id, script in anm.scripts.iteritems():
                self.scripts[script_id + offset] = (anm, script) #TODO: check
            for sprite_id, sprite in anm.sprites.iteritems():
                self.sprites[sprite_id + offset] = (anm, sprite)


    def get_sprite(self, sprite_index):
        return self.sprites[sprite_index]


    def get_script(self, script_index):
        return self.scripts[script_index]