def flip(self, sprite): set_dirty = lambda: setattr(sprite, 'dirty', 1) fx = sprite.rect.centerx - sprite.rect.width ani0 = Animation(rotation=0, duration=350, transition='out_quint') ani0.update_callback = set_dirty ani0.start(sprite) ani1 = Animation(centerx=fx, duration=340, transition='out_quint') ani1.update_callback = set_dirty ani1.start(sprite.rect) self._animations.add(ani0, ani1)
def clear_card(card): sound = choice(self.deal_sounds) sound.set_volume(.6) sound.play() set_dirty = lambda: setattr(card, 'dirty', 1) fx, fy = card.rect.move(-1400, -200).topleft ani0 = Animation(x=fx, y=fy, duration=400, transition='in_out_quint', round_values=True) ani0.update_callback = set_dirty ani0.callback = card.kill ani0.start(card.rect) ani1 = Animation(rotation=180, duration=400, transition='out_quart') ani1.update_callback = set_dirty ani1.start(card) self.animations.add(ani0, ani1)
def animate_deal(self, sprite, initial, final, index): if hasattr(sprite, '_already_animated'): return None sprite._already_animated = True fx, fy = final ani = Animation(x=fx, y=fy, duration=400., transition='in_out_quint', round_values=True) ani.update_callback = lambda: setattr(sprite, 'dirty', 1) # HACK if 1: sprite.face_up = False ani.callback = partial(self.flip, sprite) ani.start(sprite.rect) return ani
def animate_pop(self, sprite, initial, final, index=1): """Animate chips moving to popped stack """ # cancel animation that is already running on this sprite ani = self._running_animations.get(sprite, None) if ani is not None: del self._running_animations[sprite] self._animations.remove(ani) ani.kill() shadow = self._shadows_dict.get(sprite, None) if shadow is not None: shadow.rect = sprite.rect.move(0, 5) d = get_distance(sprite.rect.topleft, final) if d == 0: return None fx, fy = final ani = Animation(x=fx, y=fy, duration=self.animation_time, transition='out_quint', round_values=True) def update_sprite(): setattr(sprite, 'dirty', 1) offset = 20 - self.height_offset shadow = self._shadows_dict.get(sprite, None) if shadow is not None: shadow.rect = sprite.rect.move(0, offset) ani.update_callback = update_sprite def finalize(): del self._running_animations[sprite] if d > 1: self.play_chip_sound() ani.callback = finalize ani.start(sprite.rect) self._running_animations[sprite] = ani return ani