def slipForward(sprite, partner, game, prob=0.5): """ Slip forward in the direction of the current orientation, sometimes.""" if prob > game.random_generator.random(): tmp = sprite.lastrect v = unit_vector(sprite.orientation) sprite.physics.active_movement(sprite, v, speed=1) sprite.lastrect = tmp
def _draw(self, game): """ With a triangle that shows the orientation. """ VGDLSprite._draw(self, game) if self.draw_arrow: col = (self.color[0], 255 - self.color[1], self.color[2]) pygame.draw.polygon( game.screen, col, triPoints(self.rect, unit_vector(self.orientation)))
def windGust(sprite, partner, game): """ Moves the partner in target direction by some step size, but stochastically (step, step-1 and step+1 are equally likely) """ s = game.random_generator.choice( [partner.strength, partner.strength + 1, partner.strength - 1]) if s != 0: tmp = sprite.lastrect.copy() v = unit_vector(partner.orientation) sprite.physics.active_movement(sprite, v, speed=s) sprite.lastrect = tmp
def bounceDirection(sprite, partner, game, friction=0): """ The centers of the objects determine the direction""" stepBack(sprite, partner, game) inc = sprite.orientation snorm = unit_vector((-sprite.rect.centerx + partner.rect.centerx, -sprite.rect.centery + partner.rect.centery)) dp = snorm[0] * inc[0] + snorm[1] * inc[1] sprite.orientation = (-2 * dp * snorm[0] + inc[0], -2 * dp * snorm[1] + inc[1]) sprite.speed *= (1. - friction)
def _aim(self, game): action = self._read_action(game) if action in [UP, DOWN]: if action == DOWN: angle = self.angle_diff else: angle = -self.angle_diff from math import cos, sin self.orientation = unit_vector((self.orientation[0] * cos(angle) - self.orientation[1] * sin(angle), self.orientation[0] * sin(angle) + self.orientation[1] * cos(angle)))
def conveySprite(sprite, partner, game): """ Moves the partner in target direction by some step size. """ tmp = sprite.lastrect v = unit_vector(partner.orientation) sprite.physics.active_movement(sprite, v, speed=partner.strength) sprite.lastrect = tmp
def bounceForward(sprite, partner, game): """ The partner sprite pushed, so if possible move in the opposite direction. """ sprite.physics.active_movement(sprite, unit_vector(partner.lastdirection))
def _shoot_directions(self, game) -> List[Vector2]: u = unit_vector(self.orientation) return [ u ]