WIP bonus

This commit is contained in:
Raphaël 2024-01-05 19:05:33 +01:00
parent 31d08d2458
commit 3b1edecc63

View file

@ -3,6 +3,7 @@ Le jeux principale.
""" """
from enum import Enum from enum import Enum
from telnetlib import DO
from engine import Plugin, Scene from engine import Plugin, Scene
from engine.ecs import Entity, World from engine.ecs import Entity, World
from engine.math import Vec2 from engine.math import Vec2
@ -108,6 +109,26 @@ class StartAnimation(float):
""" """
class Bonus(Enum):
MULTI = 0
BIG = 1
FAST = 2
REVERSE = 3
@staticmethod
def aleatoire():
type = random.randint(0, 3)
match type:
case 0:
return Bonus.FAST
case 1:
return Bonus.FAST
case 2:
return Bonus.FAST
case _:
return Bonus.FAST
def __spawn_ellements(world: World): def __spawn_ellements(world: World):
""" """
La fonction permet de initializer les ellements de la scene. La fonction permet de initializer les ellements de la scene.
@ -184,6 +205,7 @@ def __spawn_ellements(world: World):
) )
__spawn_ball(world) __spawn_ball(world)
__spawn_bonus(world)
# Initialisation des scores # Initialisation des scores
world.set(Player1Score(0), Player2Score(0)) world.set(Player1Score(0), Player2Score(0))
@ -200,6 +222,23 @@ def __spawn_ellements(world: World):
) )
def __spawn_bonus(world: World):
world.new_entity().set(
SpriteBundle(
"player_1.png",
3,
Vec2(
random.randint(200, render.WIDTH - 200),
random.randint(100, render.HEIGHT - 100),
),
Vec2(100),
Vec2(0.5),
),
physics.Solid(),
Bonus.aleatoire(),
)
def __spawn_ball(world: World): def __spawn_ball(world: World):
""" """
Fonction qui fait apparaitre une balle avec une velocitée aleatoire Fonction qui fait apparaitre une balle avec une velocitée aleatoire
@ -221,12 +260,45 @@ def __spawn_ball(world: World):
Vec2(0.5), Vec2(0.5),
), ),
Ball(), Ball(),
#
physics.Velocity(velocity), physics.Velocity(velocity),
physics.CollisionHandler(__bounce_on_player), physics.CollisionHandler(__collision_with_ball),
) )
def __collision_with_ball(a: Entity, b: Entity):
if Player1 in b or Player2 in b:
return __bounce_on_player(a, b)
elif Bonus in b:
return __bonus_touched(a, b)
else:
return True
def __bonus_touched(ball: Entity, bonus: Entity):
if ball[physics.Velocity].x > 0:
player = ball.world.query(Player1).pop()
else:
player = ball.world.query(Player2).pop()
match bonus[Bonus]:
case Bonus.MULTI:
__spawn_ball(bonus.world)
__spawn_ball(bonus.world)
case Bonus.BIG:
player[Scale] *= 2
case Bonus.FAST:
player[Speed] *= 2
case Bonus.REVERSE:
if ball[physics.Velocity].x < 0:
player = ball.world.query(Player1).pop()
player[UpKey], player[DownKey] = player[DownKey], player[UpKey]
else:
player = ball.world.query(Player2).pop()
player[UpKey], player[DownKey] = player[DownKey], player[UpKey]
bonus.destroy()
return False
def __bounce_on_player(a: Entity, b: Entity): def __bounce_on_player(a: Entity, b: Entity):
""" """
Fonction qui decrit se qui se passe lorque la ball entre en collision avec un joueur Fonction qui decrit se qui se passe lorque la ball entre en collision avec un joueur