Merge branch 'main' into strange-delay

This commit is contained in:
Tipragot 2024-01-07 10:46:59 +01:00
commit e3c24ee9d6
9 changed files with 86 additions and 19 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

6
launch.py Normal file
View file

@ -0,0 +1,6 @@
import subprocess as sp
import os
folder_path = __file__.replace("\\", "/")[:-10]
os.chdir(folder_path)
sp.call(f'python "{folder_path}/src/main.py"')

View file

@ -60,6 +60,14 @@ class AABB:
self.min += movement self.min += movement
self.max += movement self.max += movement
def collide(self, other: "AABB"):
return (
self.min.x < other.max.x
and self.max.x > other.min.x
and self.min.y < other.max.y
and self.max.y > other.min.y
)
def line_to_line(sa: Vec2, ea: Vec2, sb: Vec2, eb: Vec2): def line_to_line(sa: Vec2, ea: Vec2, sb: Vec2, eb: Vec2):
""" """
@ -117,6 +125,8 @@ def aabb_to_aabb(moving: AABB, static: AABB, movement: Vec2):
""" """
Renvoie la collision entre deux AABB. Renvoie la collision entre deux AABB.
""" """
if moving.collide(static):
return 1.0, Vec2(0, 0)
size = (moving.max - moving.min) / 2 size = (moving.max - moving.min) / 2
static = AABB(static.min - size, static.max + size, static.entity) static = AABB(static.min - size, static.max + size, static.entity)
start_pos = moving.min + size start_pos = moving.min + size

View file

@ -18,6 +18,7 @@ from plugins.render import (
Text, Text,
TextSize, TextSize,
) )
from plugins.sound import Sound
from plugins.timing import Delta, Time from plugins.timing import Delta, Time
import random import random
from plugins.physics import CollisionHandler, Solid, Velocity from plugins.physics import CollisionHandler, Solid, Velocity
@ -25,6 +26,12 @@ from plugins.physics import CollisionHandler, Solid, Velocity
from scenes import game_over from scenes import game_over
class RestrictToScene:
"""
Composant marquant une entitée comme ne pouvant pas sortir de la scène.
"""
class GameMode(Enum): class GameMode(Enum):
""" """
Ressource qui definit le game mode choisi par l'utilisateur. Ressource qui definit le game mode choisi par l'utilisateur.
@ -213,7 +220,7 @@ def __spawn_ellements(world: World):
world.new_entity().set( world.new_entity().set(
Origin(Vec2(1, 0)), Origin(Vec2(1, 0)),
Scale(Vec2(10, render.HEIGHT)), Scale(Vec2(10, render.HEIGHT)),
Position(Vec2(70, 0)), Position(Vec2(0, 0)),
Solid(), Solid(),
LeftWall(), LeftWall(),
CollisionHandler(__bounce_on_left_wall), CollisionHandler(__bounce_on_left_wall),
@ -223,7 +230,7 @@ def __spawn_ellements(world: World):
world.new_entity().set( world.new_entity().set(
Origin(Vec2(0, 0)), Origin(Vec2(0, 0)),
Scale(Vec2(10, render.HEIGHT)), Scale(Vec2(10, render.HEIGHT)),
Position(Vec2(render.WIDTH - 70, 0)), Position(Vec2(render.WIDTH, 0)),
Solid(), Solid(),
RightWall(), RightWall(),
CollisionHandler(__bounce_on_right_wall), CollisionHandler(__bounce_on_right_wall),
@ -266,6 +273,7 @@ def __spawn_ellements(world: World):
DownKey("s"), DownKey("s"),
Speed(1000), Speed(1000),
LastPlayerTurn(), LastPlayerTurn(),
RestrictToScene(),
) )
# Joueur 2 # Joueur 2
@ -282,6 +290,7 @@ def __spawn_ellements(world: World):
(UpKey("up"), DownKey("down"), Speed(1000)) (UpKey("up"), DownKey("down"), Speed(1000))
if world[GameMode] == GameMode.TWO if world[GameMode] == GameMode.TWO
else Speed(300), else Speed(300),
RestrictToScene(),
) )
__spawn_ball(world) __spawn_ball(world)
@ -358,6 +367,8 @@ def __spawn_ball(world: World):
def __collision_with_ball(a: Entity, b: Entity): def __collision_with_ball(a: Entity, b: Entity):
if Ball in a:
a.world.new_entity().set(Sound("bound.mp3"))
if Player1 in b or Player2 in b: if Player1 in b or Player2 in b:
for player in a.world.query(LastPlayerTurn): for player in a.world.query(LastPlayerTurn):
del player[LastPlayerTurn] del player[LastPlayerTurn]
@ -541,6 +552,7 @@ def _update_bot(world: World):
better_distance = None better_distance = None
for offset in [-100, -50, 0, 50, 100]: for offset in [-100, -50, 0, 50, 100]:
bot[Position].y = right_touch_height + offset bot[Position].y = right_touch_height + offset
__restrict_to_scene(world)
player.remove(Solid) player.remove(Solid)
left_wall_ball = __simulate_wall_position(ball, LeftWall) left_wall_ball = __simulate_wall_position(ball, LeftWall)
player.set(Solid()) player.set(Solid())
@ -558,8 +570,27 @@ def _update_bot(world: World):
# On se déplace vers la meilleure option # On se déplace vers la meilleure option
diff = target - bot[Position].y diff = target - bot[Position].y
if abs(diff) > 10: if abs(diff) > bot[Speed] * world[Delta]:
bot[Position].y += (diff / abs(diff)) * bot[Speed] * world[Delta] bot[Position].y += (diff / abs(diff)) * bot[Speed] * world[Delta]
else:
bot[Position].y = target
# On restrict l'entité a la scène
__restrict_to_scene(world)
def __restrict_to_scene(world: World):
"""
Restrinct dans la scène toutes les entitées ayant le composant RestrictToScene.
"""
for entity in world.query(RestrictToScene):
y = entity[Position].y - (entity[Origin].y * entity[Scale].y)
if y < 0:
entity[Position].y = entity[Origin].y * entity[Scale].y
if y + entity[Scale].y > render.HEIGHT:
entity[Position].y = (
render.HEIGHT - entity[Scale].y + (entity[Origin].y * entity[Scale].y)
)
def __check_bonus_collision(world: World): def __check_bonus_collision(world: World):
@ -663,7 +694,13 @@ def __update_bonus_time(world: World):
__SCENE = Scene( __SCENE = Scene(
[__spawn_ellements], [__spawn_ellements],
[__update_move, __check_bonus_collision, __update_animation, __update_bonus_time], [
__update_move,
__check_bonus_collision,
__update_animation,
__update_bonus_time,
__restrict_to_scene,
],
[], [],
) )

View file

@ -45,10 +45,12 @@ def __create_button(world: World, i: int, name: str):
""" """
Ajoute un bouton au monde. Ajoute un bouton au monde.
""" """
if i == 0:
i = -1
world.new_entity().set( world.new_entity().set(
SpriteBundle( SpriteBundle(
f"button_{name}.png", f"button_{name}.png",
position=Vec2(450 + 540 * i, render.HEIGHT / 2 + render.HEIGHT / 8), position=Vec2(render.WIDTH / 2 + 300 * i, 800),
order=1, order=1,
origin=Vec2(0.5), origin=Vec2(0.5),
), ),

View file

@ -30,10 +30,12 @@ def __create_button(world: World, i: int, name: str):
""" """
Ajoute un bouton au monde. Ajoute un bouton au monde.
""" """
if i == 0:
i = -1
world.new_entity().set( world.new_entity().set(
SpriteBundle( SpriteBundle(
f"button_{name}.png", f"button_{name}.png",
position=Vec2(450 + 540 * i, 11 * render.HEIGHT / 16), position=Vec2(render.WIDTH / 2 + 300 * i, 800),
order=1, order=1,
origin=Vec2(0.5), origin=Vec2(0.5),
), ),

View file

@ -5,6 +5,7 @@ from engine.math import Vec2
from plugins import render from plugins import render
from plugins.click import Clickable from plugins.click import Clickable
from plugins.hover import HoveredTexture from plugins.hover import HoveredTexture
from plugins.inputs import Held, Pressed
from plugins.render import SpriteBundle, Text, TextBundle from plugins.render import SpriteBundle, Text, TextBundle
from plugins.writing import Writing from plugins.writing import Writing
import requests as rq import requests as rq
@ -19,18 +20,17 @@ def new_score(world: World, e: Entity):
try: try:
post = {"name": name[Text], "score": world[game.Player1Score]} post = {"name": name[Text], "score": world[game.Player1Score]}
print(post)
rq.post(f"https://{IP}/new_score", post) rq.post(f"https://{IP}/new_score", post)
world.set(CurrentScene(thanks.THANKS)) world.set(CurrentScene(thanks.THANKS))
except: except Exception as error:
print("Error with the serveur") print("Error with the serveur:", error)
def get_scores(): def get_scores():
try: try:
return rq.get(f"https://{IP}/data").json() return rq.get(f"https://{IP}/data").json()
except: except Exception as error:
print("Error with the serveur") print("Error with the serveur:", error)
def __spawn_elements(world: World): def __spawn_elements(world: World):
@ -38,7 +38,7 @@ def __spawn_elements(world: World):
Ajoute les éléments du menu dans le monde. Ajoute les éléments du menu dans le monde.
""" """
world.new_entity().set(SpriteBundle("background.jpg", -5)) world.new_entity().set(SpriteBundle("background.png", -5))
world.new_entity().set( world.new_entity().set(
TextBundle( TextBundle(
"Quel est votre pseudo ?", "Quel est votre pseudo ?",
@ -65,7 +65,7 @@ def __spawn_elements(world: World):
world.new_entity().set( world.new_entity().set(
SpriteBundle( SpriteBundle(
f"button_one_player.png", f"button_one_player.png",
position=Vec2(render.WIDTH / 2, 600), position=Vec2(render.WIDTH / 2, 800),
order=1, order=1,
origin=Vec2(0.5), origin=Vec2(0.5),
), ),
@ -77,10 +77,18 @@ def __spawn_elements(world: World):
) )
def __enter_to_submit(world: World):
"""
Envoit le score losre que l'utilisateur appuie sur entrée.
"""
if "return" in world[Pressed] and len(world.query(Clickable)) > 0:
new_score(world, world.query(Clickable).pop())
SEND = ( SEND = (
Plugin( Plugin(
[__spawn_elements], [__spawn_elements],
[], [__enter_to_submit],
[], [],
) )
+ writing.PLUGIN + writing.PLUGIN

View file

@ -8,7 +8,7 @@ from scenes import menu
def __spawn_elements(world: World): def __spawn_elements(world: World):
world.new_entity().set(SpriteBundle("background.jpg", -5)) world.new_entity().set(SpriteBundle("background.png", -5))
world.new_entity().set( world.new_entity().set(
TextBundle( TextBundle(
"Merci,", "Merci,",
@ -23,7 +23,7 @@ def __spawn_elements(world: World):
TextBundle( TextBundle(
"Votre score a bien été envoyé !", "Votre score a bien été envoyé !",
0, 0,
100, 80,
position=Vec2(render.WIDTH / 2, render.HEIGHT / 2 + 75), position=Vec2(render.WIDTH / 2, render.HEIGHT / 2 + 75),
origin=Vec2(0.5), origin=Vec2(0.5),
), ),

View file

@ -18,10 +18,12 @@ def __create_button(world: World, i: int, name: str):
""" """
Ajoute un bouton au monde. Ajoute un bouton au monde.
""" """
if i == 0:
i = -1
world.new_entity().set( world.new_entity().set(
SpriteBundle( SpriteBundle(
f"button_{name}.png", f"button_{name}.png",
position=Vec2(450 + 540 * i, render.HEIGHT / 2), position=Vec2(render.WIDTH / 2 + 300 * i, 800),
order=1, order=1,
origin=Vec2(0.5), origin=Vec2(0.5),
), ),
@ -52,10 +54,10 @@ def __spawn_elements(world: World):
Ajoute les éléments du menu dans le monde. Ajoute les éléments du menu dans le monde.
""" """
world.new_entity().set(SpriteBundle("background.jpg", -5)) world.new_entity().set(SpriteBundle("background.png", -5))
world.new_entity().set( world.new_entity().set(
TextBundle( TextBundle(
"Voulez vous changer\nde mode de jeu ?", "Voulez vous changer de mode de jeu ?",
0, 0,
position=Vec2(render.WIDTH / 2, 350), position=Vec2(render.WIDTH / 2, 350),
origin=Vec2(0.5), origin=Vec2(0.5),