diff --git a/frontend/static/js/api/game/Ball.js b/frontend/static/js/api/game/Ball.js index 8d6e1bd..6a0603e 100644 --- a/frontend/static/js/api/game/Ball.js +++ b/frontend/static/js/api/game/Ball.js @@ -1,92 +1,76 @@ import { Game } from "./Game.js"; import { Point } from "./Point.js"; -import { renderCube } from "../../3D/cube.js" + class Ball { /** * * @param {Game} game - * @param {Number} position_x - * @param {Number} position_y - * @param {Number} velocity_x - * @param {Number} velocity_y + * @param {Point} position + * @param {Number} angle + * @param {Number} speed + * @param {Number} size */ - constructor(game, position_x, position_y, velocity_x, velocity_y) + constructor(game, size, position, angle, speed) { /** * @type {Game} */ this.game = game; + + /** + * @type {Point} + */ + this.position = position === undefined ? new Point() : position; + /** * @type {Number} */ - this.position_x = position_x; + this.size = size; + /** * @type {Number} */ - this.position_y = position_y; + this.angle = angle; + /** * @type {Number} */ - this.velocity_x = velocity_x; - /** - * @type {Number} - */ - this.velocity_y = velocity_y; + this.speed = speed; } /** * - * @param {CanvasRenderingContext2D} ctx ou pas ptdr + * @param {CanvasRenderingContext2D} ctx */ draw(ctx) { - if(ctx instanceof CanvasRenderingContext2D) - { - ctx.rect(this.position_x, this.position_y, this.game.config.ball_size, this.game.config.ball_size); - } - else if(ctx instanceof WebGLRenderingContext) - { - renderCube(ctx, this.position_x / 1000, 0, this.position_y / 1000, 0, this.game.config.ball_size, this.game.config.ball_size, this.game.config.ball_size); - } - else - { - alert('Unknown rendering context type (wtf)'); - } - } - - render() - { - /** - * @type {Number} - */ - let new_pos_x = this.position_x + this.velocity_x * this.game.time.deltaTime(); - /** - * @type {Number} - */ - let new_pos_y = position_y + this.velocity_y * this.game.time.deltaTime(); - - if (this._collision(this.position_x, this.position_y, new_pos_x, new_pos_y)) - { - this.velocity_x = -this.velocity_x; - this.velocity_y = -this.velocity_y; - new_pos_x = this.position_x + this.velocity_x * this.game.time.deltaTime(); - new_pos_y = this.position_y + this.velocity_y * this.game.time.deltaTime(); - } - this.position_x = new_pos_x - this.position_y = new_pos_y - - this.velocity_x = this.velocity_x + this.game.config.ball_speed_inc; - this.velocity_y = this.velocity_y + this.game.config.ball_speed_inc; + ctx.rect(this.position.x - this.size / 2, this.position.y - this.size / 2, this.size, this.size); } - update (position_x, position_y, velocity_x, velocity_y) + /** + * + * @param {CanvasRenderingContext2D} ctx + */ + render(ctx) { - this.position_x = position_x; - this.position_y = position_y; - this.velocity_x = velocity_x; - this.velocity_y = velocity_y; + let distance = this.speed * (this.game.time.deltaTime() / 1000) + + this.position.x = this.position.x + distance * Math.cos(this.angle); + this.position.y = this.position.y - distance * Math.sin(this.angle); + + this.draw(ctx); + } + + from_json (data) + { + this.position = this.position.from_json(data.position); + this.size = data.size; + this.angle = data.angle; + this.speed = data.speed; + + return this } }