Files
METH_Transcendence/docker-compose/requirements/nginx/static/javascript/multiOnlineGame/Opponent.js
Kum1ta c199812a5d Site
- Add smoothing movement for opponent
Django
    - invert pos in move request
2024-09-17 00:25:36 +02:00

95 lines
2.7 KiB
JavaScript

/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* Opponent.js :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/08/21 10:34:49 by edbernar #+# #+# */
/* Updated: 2024/09/17 00:22:47 by edbernar ### ########.fr */
/* */
/* ************************************************************************** */
let opponentExist = false;
class Opponent
{
object = null;
speed = 4;
interval = null;
interval2 = null;
limits = {
up : 3,
down: 0.3,
left: -3,
right: 3,
};
last = false;
constructor (object, map)
{
if (opponentExist)
throw Error("Opponent is already init.");
opponentExist = true;
this.object = object;
this.object.position.set(0, 0.3, -map.mapLength / 2 + 0.2);
}
dispose()
{
opponentExist = false;
}
update()
{
}
movePlayer(content)
{
const lerp = (start, end, t) => start + (end - start) * t;
const thisClass = this;
const speedFactor = 0.5;
if (thisClass.animationFrame)
cancelAnimationFrame(thisClass.animationFrame);
const animate = () => {
this.object.position.x = lerp(this.object.position.x, content.pos, speedFactor);
if (Math.abs(this.object.position.x - content.pos) < 0.01)
this.object.position.x = content.pos;
else
thisClass.animationFrame = requestAnimationFrame(animate);
};
thisClass.animationFrame = requestAnimationFrame(animate);
if (content.up && thisClass.object.position.y < thisClass.limits.up)
{
if (this.interval)
clearInterval(this.interval);
thisClass.interval = setInterval(() => {
thisClass.object.position.y += thisClass.speed / 40;
if (thisClass.object.position.y >= thisClass.limits.up)
{
clearInterval(thisClass.interval);
thisClass.interval = null;
}
}, 5);
}
else if (!content.up && thisClass.object.position.y > thisClass.limits.down)
{
if (this.interval)
clearInterval(this.interval);
this.interval = setInterval(() => {
thisClass.object.position.y -= thisClass.speed / 40;
if (thisClass.object.position.y <= thisClass.limits.down)
{
clearInterval(thisClass.interval);
thisClass.interval = null;
thisClass.object.position.y = thisClass.limits.down;
}
}, 5);
}
}
}
export { Opponent };