woring on laser-bot movement
This commit is contained in:
@@ -847,7 +847,7 @@ const b = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
bullet[bIndex].torque += bullet[bIndex].inertia * 0.0001 * (0.5 - Math.random())
|
bullet[bIndex].torque += bullet[bIndex].inertia * 0.0002 * (0.5 - Math.random())
|
||||||
Matter.Body.setVelocity(bullet[bIndex], velocity);
|
Matter.Body.setVelocity(bullet[bIndex], velocity);
|
||||||
World.add(engine.world, bullet[bIndex]); //add bullet to world
|
World.add(engine.world, bullet[bIndex]); //add bullet to world
|
||||||
},
|
},
|
||||||
@@ -1030,12 +1030,12 @@ const b = {
|
|||||||
angle: dir,
|
angle: dir,
|
||||||
friction: 0,
|
friction: 0,
|
||||||
frictionStatic: 0,
|
frictionStatic: 0,
|
||||||
restitution: 0.4 + 0.5 * Math.random(),
|
restitution: 0.6 * (1 + 0.5 * Math.random()),
|
||||||
dmg: 0, // 0.14 //damage done in addition to the damage from momentum
|
dmg: 0, // 0.14 //damage done in addition to the damage from momentum
|
||||||
minDmgSpeed: 2,
|
minDmgSpeed: 2,
|
||||||
lookFrequency: 56 + Math.floor(17 * Math.random()),
|
lookFrequency: 56 + Math.floor(17 * Math.random()),
|
||||||
acceleration: 0.0025 + 0.001 * Math.random(),
|
acceleration: 0.005 * (1 + 0.5 * Math.random()),
|
||||||
range: 300 + Math.floor(70 * Math.random()),
|
range: 200 * (1 + 0.3 * Math.random()),
|
||||||
endCycle: Infinity,
|
endCycle: Infinity,
|
||||||
classType: "bullet",
|
classType: "bullet",
|
||||||
collisionFilter: {
|
collisionFilter: {
|
||||||
@@ -1063,16 +1063,14 @@ const b = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const distanceToPlayer = Vector.magnitude(Vector.sub(this.position, mech.pos))
|
const distanceToPlayer = Vector.magnitude(Vector.sub(this.position, mech.pos))
|
||||||
if (distanceToPlayer > this.range * 0.2) { //if far away move towards player
|
if (distanceToPlayer > this.range) { //if far away move towards player
|
||||||
this.force = Vector.mult(Vector.normalise(Vector.sub(mech.pos, this.position)), this.mass * this.acceleration)
|
this.force = Vector.mult(Vector.normalise(Vector.sub(mech.pos, this.position)), this.mass * this.acceleration)
|
||||||
this.frictionAir = 0.04
|
this.frictionAir = 0.06
|
||||||
} else { //close to player
|
} else { //close to player
|
||||||
this.frictionAir = 0.005
|
this.frictionAir = 0
|
||||||
//add player's velocity
|
//add player's velocity
|
||||||
Matter.Body.setVelocity(this, Vector.add(Vector.mult(this.velocity, 1), Vector.mult(player.velocity, 0.02)));
|
// Matter.Body.setVelocity(this, Vector.add(Vector.mult(this.velocity, 0.9), Vector.mult(player.velocity, 0.1)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -1090,12 +1088,18 @@ const b = {
|
|||||||
angle: dir,
|
angle: dir,
|
||||||
friction: 0,
|
friction: 0,
|
||||||
frictionStatic: 0,
|
frictionStatic: 0,
|
||||||
restitution: 0.5 + 0.5 * Math.random(),
|
frictionAir: 0.004 * (1 + 0.3 * Math.random()),
|
||||||
|
restitution: 0.5 * (1 + 0.5 * Math.random()),
|
||||||
dmg: 0, // 0.14 //damage done in addition to the damage from momentum
|
dmg: 0, // 0.14 //damage done in addition to the damage from momentum
|
||||||
minDmgSpeed: 2,
|
minDmgSpeed: 2,
|
||||||
lookFrequency: 31 + Math.floor(17 * Math.random()),
|
lookFrequency: 27 + Math.floor(17 * Math.random()),
|
||||||
acceleration: 0.0015 + 0.0013 * Math.random(),
|
acceleration: 0.0015 * (1 + 0.3 * Math.random()),
|
||||||
range: 500 + Math.floor(200 * Math.random()),
|
range: 300 * (1 + 0.2 * Math.random()),
|
||||||
|
followRange: 150 + Math.floor(30 * Math.random()),
|
||||||
|
offPlayer: {
|
||||||
|
x: 100 * (Math.random() - 0.5),
|
||||||
|
y: 90 * (Math.random() - 0.5) - 20,
|
||||||
|
},
|
||||||
endCycle: Infinity,
|
endCycle: Infinity,
|
||||||
classType: "bullet",
|
classType: "bullet",
|
||||||
collisionFilter: {
|
collisionFilter: {
|
||||||
@@ -1108,6 +1112,23 @@ const b = {
|
|||||||
},
|
},
|
||||||
onEnd() {},
|
onEnd() {},
|
||||||
do() {
|
do() {
|
||||||
|
//move in a circle
|
||||||
|
// const radius = 1.5
|
||||||
|
// this.offPlayer.x -= radius * Math.cos(game.cycle * 0.02)
|
||||||
|
// this.offPlayer.y -= radius * Math.sin(game.cycle * 0.02)
|
||||||
|
|
||||||
|
const velocityOff = Vector.mult(player.velocity, 20) //look 15 cycles ahead
|
||||||
|
let playerPos = Vector.add(Vector.add(this.offPlayer, mech.pos), velocityOff) //also include an offset unique to this bot to keep many bots spread out
|
||||||
|
const farAway = Math.max(0, (Vector.magnitude(Vector.sub(this.position, playerPos))) / this.followRange) //linear bounding well
|
||||||
|
let mag = Math.min(farAway, 4) * this.mass * this.acceleration
|
||||||
|
this.force = Vector.mult(Vector.normalise(Vector.sub(playerPos, this.position)), mag)
|
||||||
|
//manual friction to not lose rotational velocity
|
||||||
|
Matter.Body.setVelocity(this, {
|
||||||
|
x: this.velocity.x * 0.95,
|
||||||
|
y: this.velocity.y * 0.95
|
||||||
|
});
|
||||||
|
|
||||||
|
//find targets
|
||||||
if (!(game.cycle % this.lookFrequency)) {
|
if (!(game.cycle % this.lookFrequency)) {
|
||||||
this.lockedOn = null;
|
this.lockedOn = null;
|
||||||
let closeDist = this.range;
|
let closeDist = this.range;
|
||||||
@@ -1123,14 +1144,17 @@ const b = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.lockedOn && this.lockedOn.alive && mech.fieldMeter > 0.15) { //hit target with laser
|
//hit target with laser
|
||||||
mech.fieldMeter -= 0.0012
|
if (this.lockedOn && this.lockedOn.alive && mech.fieldMeter > 0.15) {
|
||||||
|
mech.fieldMeter -= 0.0014
|
||||||
//make sure you can still see vertex
|
//make sure you can still see vertex
|
||||||
const DIST = Vector.magnitude(Vector.sub(this.vertices[0], this.lockedOn.position));
|
const DIST = Vector.magnitude(Vector.sub(this.vertices[0], this.lockedOn.position));
|
||||||
if (DIST - this.lockedOn.radius < this.range + 150 &&
|
if (DIST - this.lockedOn.radius < this.range + 150 &&
|
||||||
Matter.Query.ray(map, this.vertices[0], this.lockedOn.position).length === 0 &&
|
Matter.Query.ray(map, this.vertices[0], this.lockedOn.position).length === 0 &&
|
||||||
Matter.Query.ray(body, this.vertices[0], this.lockedOn.position).length === 0) {
|
Matter.Query.ray(body, this.vertices[0], this.lockedOn.position).length === 0) {
|
||||||
|
//move towards the target
|
||||||
|
this.force = Vector.add(this.force, Vector.mult(Vector.normalise(Vector.sub(this.lockedOn.position, this.position)), 0.001))
|
||||||
|
|
||||||
//find the closest vertex
|
//find the closest vertex
|
||||||
let bestVertexDistance = Infinity
|
let bestVertexDistance = Infinity
|
||||||
let bestVertex = null
|
let bestVertex = null
|
||||||
@@ -1141,7 +1165,7 @@ const b = {
|
|||||||
bestVertexDistance = dist
|
bestVertexDistance = dist
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const dmg = b.dmgScale * 0.05;
|
const dmg = b.dmgScale * 0.1;
|
||||||
this.lockedOn.damage(dmg);
|
this.lockedOn.damage(dmg);
|
||||||
this.lockedOn.locatePlayer();
|
this.lockedOn.locatePlayer();
|
||||||
|
|
||||||
@@ -1160,15 +1184,6 @@ const b = {
|
|||||||
ctx.fill();
|
ctx.fill();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const distanceToPlayer = Vector.magnitude(Vector.sub(this.position, mech.pos))
|
|
||||||
if (distanceToPlayer > this.range * 0.2) { //if far away move towards player
|
|
||||||
this.force = Vector.mult(Vector.normalise(Vector.sub(mech.pos, this.position)), this.mass * this.acceleration)
|
|
||||||
this.frictionAir = 0.02
|
|
||||||
} else { //close to player
|
|
||||||
this.frictionAir = 0
|
|
||||||
//add player's velocity
|
|
||||||
Matter.Body.setVelocity(this, Vector.add(Vector.mult(this.velocity, 1), Vector.mult(player.velocity, 0.02)));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
World.add(engine.world, bullet[me]); //add bullet to world
|
World.add(engine.world, bullet[me]); //add bullet to world
|
||||||
|
|||||||
@@ -16,10 +16,13 @@ const level = {
|
|||||||
// game.difficulty = 6; //for testing to simulate possible mobs spawns
|
// game.difficulty = 6; //for testing to simulate possible mobs spawns
|
||||||
// b.giveGuns(10)
|
// b.giveGuns(10)
|
||||||
// mech.setField(3)
|
// mech.setField(3)
|
||||||
// b.giveMod(13);
|
// b.giveMod(11);
|
||||||
|
// b.giveMod(11);
|
||||||
|
b.giveMod(10);
|
||||||
|
// b.giveMod(11);
|
||||||
|
|
||||||
level.intro(); //starting level
|
// level.intro(); //starting level
|
||||||
// level.testingMap();
|
level.testingMap();
|
||||||
// level.bosses();
|
// level.bosses();
|
||||||
// level.skyscrapers();
|
// level.skyscrapers();
|
||||||
// level.aerie();
|
// level.aerie();
|
||||||
|
|||||||
@@ -905,7 +905,7 @@ const mech = {
|
|||||||
if (b.modBlockDmg) {
|
if (b.modBlockDmg) {
|
||||||
who.damage(b.modBlockDmg)
|
who.damage(b.modBlockDmg)
|
||||||
//draw electricity
|
//draw electricity
|
||||||
const step = mech.grabRange / 5
|
const step = 40
|
||||||
ctx.beginPath();
|
ctx.beginPath();
|
||||||
for (let i = 0, len = 2 * b.modBlockDmg / 0.7; i < len; i++) {
|
for (let i = 0, len = 2 * b.modBlockDmg / 0.7; i < len; i++) {
|
||||||
let x = mech.pos.x - 20 * unit.x;
|
let x = mech.pos.x - 20 * unit.x;
|
||||||
|
|||||||
Reference in New Issue
Block a user