summaryrefslogtreecommitdiffstats
path: root/fruit.py
blob: 37a9df3711f494d2bc80a88cb741e4545ece7264 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
from setup import *


class Fruit:
    RADIUS_RANGE = [60 * SCALE.x, 100 * SCALE.x]

    HORIZONTAL_SPAWN_RANGE = [max(RADIUS_RANGE), WIDTH - max(RADIUS_RANGE)]
    VERTICAL_SPAWN_RANGE = [HEIGHT + max(RADIUS_RANGE), HEIGHT * 2 + max(RADIUS_RANGE)]

    VERTICAL_TARGET_RANGE = [max(RADIUS_RANGE), HEIGHT * 3.5 / 5]
    HORIZONTAL_TARGET_RANGE = [WIDTH / 5.5, WIDTH * 4.5 / 5.5]

    GRAVITY = 275 * SCALE.y
    FRUITS = [
        pygame.image.load(f"assets/fruits/{file}").convert_alpha() for file in os.listdir('assets/fruits/')
    ]

    def __init__(self):
        self.radius = lerp(self.RADIUS_RANGE[0], self.RADIUS_RANGE[1], random.random())

        self.target = pygame.Vector2(
            lerp(self.HORIZONTAL_TARGET_RANGE[0], self.HORIZONTAL_TARGET_RANGE[1], random.random()),
            lerp(self.VERTICAL_TARGET_RANGE[0], self.VERTICAL_TARGET_RANGE[1], random.random()))
        self.position = pygame.Vector2(
            lerp(self.HORIZONTAL_SPAWN_RANGE[0], self.HORIZONTAL_SPAWN_RANGE[1], random.random()),
            lerp(self.VERTICAL_SPAWN_RANGE[0], self.VERTICAL_SPAWN_RANGE[1], random.random()))

        self.acceleration = pygame.Vector2(0, self.GRAVITY)

        dy = self.target.y - self.position.y
        dx = self.target.x - self.position.x
        t = (-2 / self.GRAVITY * dy) ** 0.5
        self.velocity = pygame.Vector2(dx / t, -(-2 * self.GRAVITY * dy) ** 0.5)

        self.angle = lerp(0, 360, random.random())
        self.direction = random.choice([-1, 1])

        self.width, self.height = (self.radius * 2, self.radius * 2)

        self.image = random.choice(self.FRUITS)
        self.fruit_txt = Texture.from_surface(renderer, self.image)

    def update(self, delta):
        self.velocity += self.acceleration * delta / 1000
        self.position += self.velocity * delta / 1000

        self.angle += 360 * delta / 1000 / 10 * self.direction

    def draw(self):
        if self.position.y - self.radius <= HEIGHT:
            self.fruit_txt.draw(None, pygame.Rect(self.position - pygame.Vector2(self.radius, self.radius),
                                                  (self.radius * 2, self.radius * 2)),
                                angle=self.angle, origin=(self.radius, self.radius))