Пример #1
0
 def spawn_ball_copy(self, original: Ball, angle_delta: float):
     ball = self.spawn_ball(original.drawable.pos.clone(),
                            original.drawable.size.clone())
     velocity = original.velocity.clone()
     angle = velocity.angle
     magnitude = velocity.magnitude
     ball.velocity = Vector2.from_angle_magnitude(angle + angle_delta,
                                                  magnitude)
Пример #2
0
 def power_up_token_collision(self, token: PowerUpToken, paddle: Paddle):
     if isinstance(token, MultiBallPowerUpToken):
         ball = self.balls[0]
         # shoot main ball straight down
         ball.velocity = Vector2.from_angle_magnitude(
             math.pi / 2, ball.velocity.magnitude)
         self.spawn_ball_copy(ball, 2 * math.pi / 3)
         self.spawn_ball_copy(ball, -2 * math.pi / 3)
         self.remove_game_object(token)
Пример #3
0
    def deflect(self, ball: Ball, direction: int):
        ballrect = ball.drawable.get_rect()
        paddlerect = self.drawable.get_rect()
        ballcenter = ballrect.vertical_center
        paddlecenter = paddlerect.vertical_center

        distance = ballcenter - paddlecenter
        distancenorm = max(min(distance / (paddlecenter - paddlerect.top), 1), -1)  # clamp at (-1, 1) just in case - collision can cause us to be above the paddle's bounds

        magnitude = ball.velocity.magnitude
        straightangle = (direction - 1) * 0.5 * math.pi
        angle = distancenorm * self.paddleMaxAngleDeflection * direction + straightangle
        ball.velocity = Vector2.from_angle_magnitude(angle, magnitude)