improved map side segregation moves
This commit is contained in:
parent
72d79f8d84
commit
0c2a594fb9
@ -159,7 +159,7 @@ export default {
|
|||||||
frictionAir: 0,
|
frictionAir: 0,
|
||||||
// mass: Math.pow(3, this.entites.length),
|
// mass: Math.pow(3, this.entites.length),
|
||||||
mass: 10,
|
mass: 10,
|
||||||
restitution: 0.1,
|
restitution: 0.15,
|
||||||
collisionFilter: {
|
collisionFilter: {
|
||||||
group: -1
|
group: -1
|
||||||
},
|
},
|
||||||
@ -336,6 +336,41 @@ export default {
|
|||||||
if (this.tween) {
|
if (this.tween) {
|
||||||
this.tween.update();
|
this.tween.update();
|
||||||
}
|
}
|
||||||
|
if (this.map_mode === 'action'){
|
||||||
|
this.applyActionForces();
|
||||||
|
}
|
||||||
|
Matter.Body.setAngle(this.body, 0);
|
||||||
|
Matter.Body.setAngularSpeed(this.body, 0);
|
||||||
|
},
|
||||||
|
applyActionForces(){
|
||||||
|
// map_mode action
|
||||||
|
var dist, dir, x_force, ori_pos;
|
||||||
|
var x_force = 0;
|
||||||
|
if(!this.concernement.has_agissantes) {
|
||||||
|
// does not has actions -> take a side
|
||||||
|
// apply a force in direction of one side or an other depending of the start position
|
||||||
|
// the force is exponentialy proportional to the distance from the side
|
||||||
|
dir = this.pos.x > this.canvas.width/2 ? 1 : -1; // get the direction to the closest side
|
||||||
|
dist = (dir < 0 ? this.pos.x : this.canvas.width - this.pos.x); // get the distance from the side
|
||||||
|
ori_pos = {x:this.canvas.width/2, y:this.body.position.y};
|
||||||
|
x_force = Math.pow(dist/700,10) * dir;
|
||||||
|
}else{
|
||||||
|
// has action, get to the centre
|
||||||
|
dir = this.pos.x > this.canvas.width/2 ? -1 : 1; // get the direction to the centre
|
||||||
|
dist = (dir < 0 ? this.pos.x - this.canvas.width/2 : this.canvas.width/2 - this.pos.x); // get the distance from the side
|
||||||
|
ori_pos = dir < 0 ? {x:this.canvas.width, y:this.body.position.y} : {x:0, y:this.body.position.y}
|
||||||
|
x_force = Math.pow(dist/800,10) * dir;
|
||||||
|
this.body.frictionAir = 0.05;
|
||||||
|
}
|
||||||
|
// x_force = (dist > 200 ? Math.pow(dist/700,10) : 0) * dir
|
||||||
|
Matter.Body.applyForce(
|
||||||
|
this.body,
|
||||||
|
ori_pos,
|
||||||
|
{
|
||||||
|
x: x_force,
|
||||||
|
y: 0
|
||||||
|
}
|
||||||
|
);
|
||||||
},
|
},
|
||||||
onAfterEngineUpdate (event) {
|
onAfterEngineUpdate (event) {
|
||||||
// respawn element if outside screen
|
// respawn element if outside screen
|
||||||
@ -346,37 +381,7 @@ export default {
|
|||||||
this.pos = this.getRandomPos()
|
this.pos = this.getRandomPos()
|
||||||
Matter.Body.setPosition(this.body, {x:this.pos.x, y:this.pos.y});
|
Matter.Body.setPosition(this.body, {x:this.pos.x, y:this.pos.y});
|
||||||
}
|
}
|
||||||
// map_mode action
|
|
||||||
if (this.map_mode === 'action'){
|
|
||||||
var dist, dir, x_force, ori_pos;
|
|
||||||
var x_force = 0;
|
|
||||||
if(!this.concernement.has_agissantes) {
|
|
||||||
// does not has actions -> take a side
|
|
||||||
// apply a force in direction of one side or an other depending of the start position
|
|
||||||
// the force is exponentialy proportional to the distance from the side
|
|
||||||
dir = this.pos.x > this.canvas.width/2 ? 1 : -1; // get the direction to the closest side
|
|
||||||
dist = (dir < 0 ? this.pos.x : this.canvas.width - this.pos.x); // get the distance from the side
|
|
||||||
ori_pos = {x:this.canvas.width/2, y:this.canvas.height/2};
|
|
||||||
x_force = Math.pow(dist/700,10) * dir;
|
|
||||||
}else{
|
|
||||||
// has action, get to the centre
|
|
||||||
dir = this.pos.x > this.canvas.width/2 ? -1 : 1; // get the direction to the centre
|
|
||||||
dist = (dir < 0 ? this.pos.x - this.canvas.width/2 : this.canvas.width/2 - this.pos.x); // get the distance from the side
|
|
||||||
ori_pos = dir < 0 ? {x:this.canvas.width, y:this.canvas.height/2} : {x:0, y:this.canvas.height/2}
|
|
||||||
x_force = Math.pow(dist/800,10) * dir;
|
|
||||||
}
|
|
||||||
// x_force = (dist > 200 ? Math.pow(dist/700,10) : 0) * dir
|
|
||||||
Matter.Body.applyForce(
|
|
||||||
this.body,
|
|
||||||
ori_pos,
|
|
||||||
{
|
|
||||||
x: x_force,
|
|
||||||
y: 0
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
Matter.Body.setAngle(this.body, 0);
|
|
||||||
Matter.Body.setAngularSpeed(this.body, 0);
|
|
||||||
this.draw()
|
this.draw()
|
||||||
},
|
},
|
||||||
draw() {
|
draw() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user