view pytouhou/game/face.py @ 772:7492d384d122 default tip

Rust: Add a Glide renderer (2D only for now) This is an experiment for a Rust renderer, iterating over the Python data using pyo3. It requires --feature=glide to be passed to cargo build, doesn’t support NPOT textures, text rendering, the background, or even msg faces, some of that may come in a future changeset.
author Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
date Mon, 05 Sep 2022 17:53:36 +0200
parents e35bef07290d
children
line wrap: on
line source

# -*- encoding: utf-8 -*-
##
## Copyright (C) 2012 Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
##
## 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 pytouhou.game.element import Element
from pytouhou.game.sprite import Sprite
from pytouhou.vm import ANMRunner


class Face(Element):
    __slots__ = ('_anms', 'side')

    def __init__(self, anms, effect, side):
        Element.__init__(self, (-32, -16))

        self._anms = anms
        self.sprite = Sprite()
        self.anmrunner = ANMRunner(self._anms[0][0][0], side * 2, self.sprite)
        self.side = side
        self.load(0)
        self.animate(effect)

        #FIXME: the same as game.effect.
        self.sprite.allow_dest_offset = True


    def animate(self, effect):
        self.anmrunner.interrupt(effect)


    def load(self, index):
        self.sprite.anm, self.sprite.texcoords = self._anms[self.side][index]


    def update(self):
        self.anmrunner.run_frame()