import sdl2 import ./player import ./ball import ./cons import ./scores import ./font import ./collision type Pong* = ref object isRun: bool human, robot: Player ball: Ball renderer:RendererPtr scores: Scores collision:Collision proc NewPong*(font:Font, renderer:RendererPtr): Pong = var human=NewHuman(cons.PaddleWidth, "user", renderer) robot=NewRobot(cons.WindowWidth - 2 * cons.PaddleWidth, renderer) scores= NewScores(font) ball=NewBall(renderer, scores) Pong( isRun: true, renderer:renderer, human: human, robot: robot, ball: ball, scores: scores, collision:NewCollision(human, robot, ball) ) proc keyDown*(sf:var Pong, dt:float32)= sf.human.Up(dt) proc keyUp*(sf:var Pong, dt:float32)= sf.human.Down(dt) proc stopHuman*(sf: var Pong)= sf.human.Stop() proc update*(sf:var Pong, dt: float32) = sf.collision.update() sf.human.update(dt) sf.robot.update(dt, sf.ball.y) let distRobot = (sf.ball.y + BallRadius) - (sf.robot.y + PaddleHeight / 2) req = BallUpdateReq( dTime:dt, distRobot:distRobot, isColHuman:sf.collision.isCollisionHuman, isColRobot:sf.collision.isCollisionRobot, humanX:sf.human.x, robotX:sf.robot.x ) sf.ball.update(req) proc draw*(sf:var Pong) = sf.renderer.setDrawColor 0, 0, 0, 255 # black sf.renderer.clear() sf.human.draw() sf.robot.draw() sf.ball.draw() sf.scores.draw()