diff --git a/docker-compose/requirements/djangoserver/file/server/server/Ball.py b/docker-compose/requirements/djangoserver/file/server/server/Ball.py index 97f05f4..5bff779 100644 --- a/docker-compose/requirements/djangoserver/file/server/server/Ball.py +++ b/docker-compose/requirements/djangoserver/file/server/server/Ball.py @@ -6,7 +6,7 @@ # By: tomoron +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2024/10/06 03:24:10 by tomoron #+# #+# # -# Updated: 2024/10/10 03:31:32 by tomoron ### ########.fr # +# Updated: 2024/10/22 14:53:55 by tomoron ### ########.fr # # # # **************************************************************************** # @@ -111,7 +111,7 @@ class Ball: def getTimeUntilWallColision(self, limitNeg, limitPos, position, velocity): if(not velocity): return(-1) - limit = GameSettings.limits[limitNeg] if velocity < 0 else GameSettings.limits[limitPos] + limit = GameSettings.mapLimits[limitNeg] + GameSettings.ballRadius if velocity < 0 else GameSettings.mapLimits[limitPos] - GameSettings.ballRadius wallDistance = max(limit, position) - min(limit, position) colision_time = wallDistance / abs(velocity) return(colision_time) @@ -215,13 +215,13 @@ class Ball: async def update(self, delta, p1, p2, p1Hit = False): self.pos[0] += (delta * self.vel[0]) self.pos[1] += (delta * self.vel[1]) - if(self.pos[1] <= GameSettings.limits["back"] + 0.001 or self.pos[1] >= GameSettings.limits["front"] - 0.001): + if(self.pos[1] <= GameSettings.mapLimits["back"] + GameSettings.ballRadius + 0.001 or self.pos[1] >= (GameSettings.mapLimits["front"] - GameSettings.ballRadius) - 0.001): player = p2.pos if self.pos[1] < 0 else p1.pos if(self.pos[1] > 0 and p1Hit): return(1) playerDistance = self.getPlayerDistance(player, self.pos) - if(playerDistance >= -(GameSettings.playerLength / 2) and playerDistance <= GameSettings.playerLength / 2 and player["up"] == self.up): - self.vel[0] = -((self.speed * 0.80) * (playerDistance / (GameSettings.playerLength / 2))) + if(playerDistance >= -(GameSettings.ballPlayerLength / 2) and playerDistance <= GameSettings.ballPlayerLength / 2 and player["up"] == self.up): + self.vel[0] = -((self.speed * 0.80) * (playerDistance / (GameSettings.ballPlayerLength / 2))) self.vel[1] = self.speed - abs(self.vel[0]) if(self.pos[1] > 0): self.vel[1] = -self.vel[1] @@ -233,7 +233,7 @@ class Ball: return(1 if self.pos[1] < 0 else 2) else: return(0) - elif(self.pos[0] <= GameSettings.limits["left"] + 0.001 or self.pos[0] >= GameSettings.limits["right"] - 0.001): + elif(self.pos[0] <= GameSettings.mapLimits["left"] + GameSettings.ballRadius + 0.001 or self.pos[0] >= (GameSettings.mapLimits["right"] - GameSettings.ballRadius) - 0.001): self.vel[0] = -self.vel[0] elif(self.checkWallsColision(self.pos)): self.vel[1] = -self.vel[1] diff --git a/docker-compose/requirements/djangoserver/file/server/server/Bot.py b/docker-compose/requirements/djangoserver/file/server/server/Bot.py index 542c348..97f9d9e 100644 --- a/docker-compose/requirements/djangoserver/file/server/server/Bot.py +++ b/docker-compose/requirements/djangoserver/file/server/server/Bot.py @@ -6,7 +6,7 @@ # By: tomoron +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2024/10/19 18:29:36 by tomoron #+# #+# # -# Updated: 2024/10/22 01:19:12 by tomoron ### ########.fr # +# Updated: 2024/10/22 14:39:52 by tomoron ### ########.fr # # # # **************************************************************************** # @@ -38,6 +38,9 @@ class Bot(Player): def isTournamentReady(self): return(True); + def checkMovement(self, newPos): + return(newPos) + def createTempBall(self): res = Ball() res.setObstacles(self.game.obstacles) @@ -58,7 +61,6 @@ class Bot(Player): pos += offset * (GameSettings.playerLength / 2) return({"pos":pos, "up":up}) - async def getExpectedPos(self): tempBall = self.createTempBall() hit = 0 diff --git a/docker-compose/requirements/djangoserver/file/server/server/Game.py b/docker-compose/requirements/djangoserver/file/server/server/Game.py index c82bac4..98da775 100644 --- a/docker-compose/requirements/djangoserver/file/server/server/Game.py +++ b/docker-compose/requirements/djangoserver/file/server/server/Game.py @@ -6,7 +6,7 @@ # By: edbernar +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2024/10/05 03:22:32 by tomoron #+# #+# # -# Updated: 2024/10/20 15:37:20 by tomoron ### ########.fr # +# Updated: 2024/10/22 15:35:59 by tomoron ### ########.fr # # # # **************************************************************************** # +import time +from .GameSettings import GameSettings + class Player(): def __init__(self, socket): self.socket = socket self.ready = False self.tournamentReady = False; + self.lastMovement = time.time() self.pos = {"pos":0, "up": False} self.skin = 0 self.goal = 0 @@ -24,6 +28,29 @@ class Player(): def isTournamentReady(self): return(self.tournamentReady) + + def checkMovement(self, newPos): + deltaTime = (time.time() - self.lastMovement) + self.lastMovement = time.time() + + leftLimit = GameSettings.mapLimits["left"] + (GameSettings.playerLength / 2) + rightLimit = GameSettings.mapLimits["right"] - (GameSettings.playerLength / 2) + if(newPos < leftLimit - GameSettings.OOBTolerance or newPos > rightLimit + GameSettings.OOBTolerance): + print("\033[31mplayer out of the map") + newPos = leftLimit if newPos < 0 else rightLimit + return(newPos) + + print("speed :", abs(newPos - self.pos["pos"]) * (1 / deltaTime)) + if(abs(newPos - self.pos["pos"]) * (1 / deltaTime) > GameSettings.maxPlayerSpeed + GameSettings.playerSpeedTolerance): + newMove = GameSettings.maxPlayerSpeed * deltaTime + if(newPos - self.pos["pos"] < 0): + newMove = -newMove + print("\033[31mplayer is too fast") + newPos = self.pos["pos"] + newMove + return(newPos) + print("no problem") + return(newPos) + def setGame(self, game): self.ready = False;