def wallBounce(sprite, partner, game, friction=0): # FLAG """ Bounce off orthogonally to the wall. """ if not oncePerStep(sprite, game, 'lastbounce'): return sprite.speed *= (1. - friction) stepBack(sprite, partner, game) if abs(sprite.rect.centerx - partner.rect.centerx) > abs(sprite.rect.centery - partner.rect.centery): sprite.orientation = (-sprite.orientation[0], sprite.orientation[1]) else: sprite.orientation = (sprite.orientation[0], -sprite.orientation[1])
def wallBounce(sprite, partner, game, friction=0): """ Bounce off orthogonally to the wall. """ if not oncePerStep(sprite, game, 'lastbounce'): return sprite.speed *= (1. - friction) stepBack(sprite, partner, game) if abs(sprite.rect.centerx - partner.rect.centerx) > abs(sprite.rect.centery - partner.rect.centery): sprite.orientation = (-sprite.orientation[0], sprite.orientation[1]) else: sprite.orientation = (sprite.orientation[0], -sprite.orientation[1])
def pullWithIt(sprite, partner, game): """ The partner sprite adds its movement to the sprite's. """ if not oncePerStep(sprite, game, 'lastpull'): return tmp = sprite.lastrect v = unitVector(partner.lastdirection) sprite._updatePos(v, partner.speed * sprite.physics.gridsize[0]) if isinstance(sprite.physics, ContinuousPhysics): sprite.speed = partner.speed sprite.orientation = partner.lastdirection sprite.lastrect = tmp
def wallStop(sprite, partner, game, friction=0): # FLAG """ Stop just in front of the wall, removing that velocity component, but possibly sliding along it. """ if not oncePerStep(sprite, game, 'laststop'): return stepBack(sprite, partner, game) if abs(sprite.rect.centerx - partner.rect.centerx) > abs(sprite.rect.centery - partner.rect.centery): sprite.orientation = (0, sprite.orientation[1] * (1. - friction)) else: sprite.orientation = (sprite.orientation[0] * (1. - friction), 0) sprite.speed = vectNorm(sprite.orientation) * sprite.speed sprite.orientation = unitVector(sprite.orientation)
def wallStop(sprite, partner, game, friction=0): """ Stop just in front of the wall, removing that velocity component, but possibly sliding along it. """ if not oncePerStep(sprite, game, 'laststop'): return stepBack(sprite, partner, game) if abs(sprite.rect.centerx - partner.rect.centerx) > abs(sprite.rect.centery - partner.rect.centery): sprite.orientation = (0, sprite.orientation[1] * (1. - friction)) else: sprite.orientation = (sprite.orientation[0] * (1. - friction), 0) sprite.speed = vectNorm(sprite.orientation) * sprite.speed sprite.orientation = unitVector(sprite.orientation)