cleaned up elevator physics, added ability to hold the elevator at one location
added elevator with a on/off button to level highrise (0.6 chance to show up)
This commit is contained in:
landgreen
2021-05-27 07:11:39 -07:00
parent 39e6ee5dde
commit 8ab86fea09
7 changed files with 123 additions and 141 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@@ -3625,7 +3625,7 @@ const b = {
ammoPack: 100,
have: false,
wavePacketCycle: 0,
delay: 60,
delay: 40,
do() {
if (this.wavePacketCycle && !input.fire) {
this.wavePacketCycle = 0;

View File

@@ -436,6 +436,32 @@ const level = {
y: this.velocity.y
});
},
off() {
Matter.Body.setPosition(this, {
x: x,
y: this.position.y
});
Matter.Body.setVelocity(this, {
x: 0,
y: this.velocity.y
});
},
constraint: this.null,
addConstraint() {
this.constraint = Constraint.create({
pointA: {
x: this.position.x,
y: this.position.y
},
bodyB: this,
stiffness: 0.01,
damping: 0.3
});
World.add(engine.world, this.constraint);
},
removeConstraint() {
World.remove(engine.world, this.constraint, true)
},
drawTrack() {
ctx.fillStyle = "#ccc"
ctx.fillRect(x, y, 5, yTravel)
@@ -1932,7 +1958,7 @@ const level = {
if (tech.isDuplicateBoss && Math.random() < 2 * tech.duplicationChance()) spawn.randomLevelBoss(7725, 2275);
},
satellite() {
const elevator = level.elevator(4210, -1297, 380, 85, -3450) //, 0.003, { up: 0.01, down: 0.2 }
const elevator = level.elevator(4210, -1285, 380, 70, -3450) //, 0.003, { up: 0.01, down: 0.2 }
level.custom = () => {
ctx.fillStyle = "#d4f4f4"
ctx.fillRect(-250, -750, 420, 450)
@@ -1961,20 +1987,6 @@ const level = {
ctx.fillRect(4000, -1200, 1050, 1500)
ctx.fillRect(4100, -3450, 600, 2250)
elevator.move()
// elevator.drawTrack() //looks ugly
// if (elevator.pauseUntilCycle < simulation.cycle && !m.isBodiesAsleep) { //elevator move
// if (elevator.pointA.y > -1275) { //bottom
// elevator.plat.speed = -10
// elevator.pauseUntilCycle = simulation.cycle + 90
// } else if (elevator.pointA.y < -3455) { //top
// elevator.plat.speed = 30
// elevator.pauseUntilCycle = simulation.cycle + 90
// }
// elevator.pointA = {
// x: elevator.pointA.x,
// y: elevator.pointA.y + elevator.plat.speed
// }
// }
};
level.setPosToSpawn(-100, 210); //normal spawn
@@ -2051,7 +2063,7 @@ const level = {
//steep stairs
spawn.mapRect(4100, -2250, 100, 650);
spawn.mapRect(4100, -3450, 100, 650); //left top shelf
spawn.mapRect(4100, -3450, 100, 850); //left top shelf
spawn.mapRect(4600, -3450, 100, 1850);
spawn.randomSmallMob(4400, -3500);
@@ -2093,7 +2105,7 @@ const level = {
if (tech.isDuplicateBoss && Math.random() < 2 * tech.duplicationChance()) spawn.randomLevelBoss(3950, -850);
},
rooftops() {
const elevator = level.elevator(1450, -1000, 235, 50, -2000)
const elevator = level.elevator(1450, -990, 235, 45, -2000)
level.custom = () => {
elevator.move();
elevator.drawTrack();
@@ -2543,54 +2555,6 @@ const level = {
if (tech.isDuplicateBoss && Math.random() < 2 * tech.duplicationChance()) spawn.randomLevelBoss(3075, -2050);
},
highrise() {
const isBlockMode = false
let slideBlock
if (isBlockMode) {
const x = -2750
const yMax = -1500
slideBlock = body[body.length] = Bodies.rectangle(x, -700, 200, 100, {
collisionFilter: {
category: cat.body,
mask: cat.player | cat.body | cat.bullet | cat.powerUp | cat.mob | cat.mobBullet //cat.player | cat.map | cat.body | cat.bullet | cat.powerUp | cat.mob | cat.mobBullet
},
inertia: Infinity, //prevents rotation
isNotHoldable: true,
friction: 1,
frictionStatic: 1,
frictionAir: 0.001,
// restitution: 0,
isUp: true,
move() {
if (this.isUp) {
if (this.position.y > yMax) {
this.force.y -= 0.01 * this.mass
} else {
this.isUp = false
Matter.Body.setPosition(this, {
x: x,
y: yMax
});
Matter.Body.setVelocity(this, {
x: 0,
y: 0
});
}
} else if (this.position.y > -800) {
this.isUp = true
}
},
holdHorizontal() {
Matter.Body.setPosition(this, {
x: x,
y: this.position.y
});
Matter.Body.setVelocity(this, {
x: 0,
y: this.velocity.y
});
}
});
}
level.custom = () => {
ctx.fillStyle = "#d0d0d2"
ctx.fillRect(-2475, -2450, 25, 750)
@@ -2602,7 +2566,6 @@ const level = {
level.exit.draw();
level.enter.draw();
};
if (isBlockMode) {
level.customTopLayer = () => {
ctx.fillStyle = "rgba(64,64,64,0.97)" //hidden section
ctx.fillRect(-4450, -750, 800, 200)
@@ -2610,23 +2573,7 @@ const level = {
ctx.fillRect(-1830, -1150, 2030, 1150)
ctx.fillRect(-3410, -2150, 495, 1550)
ctx.fillRect(-2585, -1675, 420, 1125)
ctx.fillRect(-1640, -1575, 540, 425)
//move sliding block
slideBlock.move()
slideBlock.holdHorizontal() //keep horizontal position constant
};
} else {
level.customTopLayer = () => {
ctx.fillStyle = "rgba(64,64,64,0.97)" //hidden section
ctx.fillRect(-4450, -750, 800, 200)
ctx.fillStyle = "rgba(0,0,0,0.12)"
ctx.fillRect(-1830, -1150, 2030, 1150)
ctx.fillRect(-3410, -2150, 495, 1550)
ctx.fillRect(-2585, -1675, 420, 1125)
ctx.fillRect(-1640, -1575, 540, 425)
ctx.fillRect(-1640, -1575, 740, 425)
ctx.fillStyle = "rgba(200,0,255,0.2)"; //boost
ctx.fillRect(-750, -25, 100, 25);
ctx.fillRect(-2800, -625, 100, 25);
@@ -2637,8 +2584,6 @@ const level = {
ctx.fillRect(-750, -120, 100, 120);
ctx.fillRect(-2800, -720, 100, 120);
};
}
level.setPosToSpawn(-300, -700); //normal spawn
spawn.mapRect(level.enter.x, level.enter.y + 20, 100, 20);
@@ -2676,14 +2621,68 @@ const level = {
spawn.mapRect(-600, -1075, 50, 475);
spawn.mapRect(-600, -650, 625, 50);
spawn.mapRect(-1300, -650, 500, 50);
spawn.mapRect(-175, -250, 425, 300);
spawn.bodyRect(-75, -300, 50, 50);
if (Math.random() < 0.6) {
const elevator = level.elevator(-790, -190, 180, 25, -1150) //, 0.007
elevator.addConstraint();
button = level.button(-500, -200)
spawn.mapRect(-600, -200, 500, 250); //ledge for boarding elevator
spawn.bodyRect(-250, -300, 100, 100); //a nice block near the elevator
level.customTopLayer = () => {
button.query();
button.draw();
if (button.isUp) {
if (elevator.isOn) {
elevator.isOn = false
elevator.frictionAir = 0.2
elevator.addConstraint();
}
} else {
if (!elevator.isOn) {
elevator.isOn = true
elevator.isUp = true
elevator.removeConstraint();
elevator.frictionAir = 0.01 //elevator.isUp ? 0.01 : 0.2
}
}
if (elevator.isOn) {
elevator.move();
ctx.fillStyle = "#000"
ctx.fillRect(-700, -1140, 1, 975)
} else {
ctx.fillStyle = "#999"
ctx.fillRect(-700, -1140, 1, 975)
}
ctx.fillStyle = "rgba(64,64,64,0.97)" //hidden section
ctx.fillRect(-4450, -750, 800, 200)
ctx.fillStyle = "rgba(0,0,0,0.12)"
ctx.fillRect(-1830, -1150, 2030, 1150)
ctx.fillRect(-3410, -2150, 495, 1550)
ctx.fillRect(-2585, -1675, 420, 1125)
ctx.fillRect(-1640, -1575, 740, 425)
ctx.fillStyle = "rgba(200,0,255,0.2)"; //boost
ctx.fillRect(-2800, -625, 100, 25);
ctx.fillStyle = "rgba(200,0,255,0.1)"; //boost
ctx.fillRect(-2800, -655, 100, 55);
ctx.fillStyle = "rgba(200,0,255,0.05)"; //boost
ctx.fillRect(-2800, -720, 100, 120);
};
} else {
spawn.boost(-750, 0, 1700);
spawn.bodyRect(-425, -1375, 400, 225);
spawn.mapRect(-1125, -1575, 50, 475);
spawn.bodyRect(-1475, -1275, 250, 125);
spawn.bodyRect(-825, -1160, 250, 10);
spawn.mapRect(-1650, -1575, 400, 50);
spawn.mapRect(-175, -250, 425, 300);
}
spawn.bodyRect(-425, -1375, 400, 225);
spawn.mapRect(-925, -1575, 50, 475);
spawn.bodyRect(-1475, -1275, 250, 125);
spawn.mapRect(-1650, -1575, 600, 50);
spawn.mapRect(-600, -1150, 850, 175);
spawn.mapRect(-1850, -1150, 1050, 175);
spawn.bodyRect(-1907, -1600, 550, 25);
@@ -2698,7 +2697,7 @@ const level = {
spawn.mapRect(-4450, -600, 2300, 750);
spawn.mapRect(-2225, -450, 175, 550);
// spawn.mapRect(-2600, -975, 450, 50);
if (!isBlockMode) spawn.boost(-2800, -600, 950);
spawn.boost(-2800, -600, 950);
spawn.mapRect(-3425, -1325, 525, 50);
spawn.mapRect(-3425, -2200, 525, 50);
spawn.mapRect(-2600, -1700, 450, 50);

View File

@@ -2856,12 +2856,6 @@ const m = {
}
m.look = () => { //disable mouse aiming
//always on mouse look
// m.angle = Math.atan2(
// simulation.mouseInGame.y - m.pos.y,
// simulation.mouseInGame.x - m.pos.x
// );
//smoothed mouse look translations
const scale = 0.8;
m.transSmoothX = canvas.width2 - m.pos.x - (simulation.mouse.x - canvas.width2) * scale;
m.transSmoothY = canvas.height2 - m.pos.y - (simulation.mouse.y - canvas.height2) * scale;

View File

@@ -517,6 +517,7 @@ const simulation = {
}
m.look = m.lookDefault
level.levels = level.playableLevels.slice(0) //copy array, not by just by assignment
if (simulation.isCommunityMaps) {
level.levels.push("stronghold");
@@ -539,6 +540,7 @@ const simulation = {
} else {
level.levels = shuffle(level.levels); //shuffles order of maps
}
level.levels.unshift("intro"); //add level to the start of the randomized levels list
level.levels.push("gauntlet"); //add level to the end of the randomized levels list
level.levels.push("final"); //add level to the end of the randomized levels list

View File

@@ -1266,7 +1266,7 @@ const spawn = {
let targets = [] //track who is in the node boss, for shields
mobs.spawn(x, y, 6, radius, "#b386e8");
let me = mob[mob.length - 1];
Matter.Body.setDensity(me, 0.0015); //extra dense //normal is 0.001 //makes effective life much larger
Matter.Body.setDensity(me, 0.004); //extra dense //normal is 0.001 //makes effective life much larger
me.isBoss = true;
targets.push(me.id) //add to shield protection
me.friction = 0;
@@ -1328,7 +1328,7 @@ const spawn = {
for (let i = 0; i < nodes; ++i) {
spawn.stabber(x + sideLength * Math.sin(i * angle), y + sideLength * Math.cos(i * angle), radius, 12);
Matter.Body.setDensity(mob[mob.length - 1], 0.002); //extra dense //normal is 0.001 //makes effective life much larger
Matter.Body.setDensity(mob[mob.length - 1], 0.004); //extra dense //normal is 0.001 //makes effective life much larger
targets.push(mob[mob.length - 1].id) //track who is in the node boss, for shields
}
@@ -3347,7 +3347,7 @@ const spawn = {
me.seeAtDistance2 = 2000000;
me.memory = Infinity;
me.frictionAir = 0.01;
me.accelMag = 0.00004 * simulation.accelScale;
me.accelMag = 0.00003 * simulation.accelScale;
me.collisionFilter.mask = cat.player | cat.bullet //| cat.body
spawn.shield(me, x, y, 1);

View File

@@ -1,17 +1,14 @@
******************************************************** NEXT PATCH ********************************************************
jump now applies the velocity of the block you jumped off of
it might feel slightly different if you play n-gon often
it could add some bugs so let me know
elevators have more realistic physics
you can jump off them when they get to the top (fun!)
blocks interact with them in a more healthy way (no bleed through)
they can have a wider range of healthy speeds
it can hurt mobs
******************************************************** BUGS ********************************************************
figure out how to undo ship mode
if you die in ship mode it respawns with m.look set to non ship methods
look is set in many tech and in startGame
Why does micro-extruder lag so much
blue triangle boss can move backwards and aim away from you if set up properly
@@ -54,25 +51,12 @@ is there a way to check if the player is stuck inside the map or block
******************************************************** TODO ********************************************************
platform: jumps a bit before moving up
you can't use set position for y, because blocks drag a bit inside the platform
get delays working right
do something if the force is overwhelmed so much the platform moves backwards, or below lower/upper range
apply a constraint when still and remove it when moving
also apply thr constraint if the block goes outside normal bounds by too much
should jump velocity add to current velocity?
maybe only add the velocity of what the player is standing on
mob: molecule shapes - 2 separate mobs joined by a bond
use constraints: just spawn 2x or 3x groupings
low friction so they can spin around
spin when attacking player?
increase constraint length when attacking
make nano-scale upgrades all cost research, and buff those tech
make most future tech for guns / fields
tech: mine - fire the mine into where you were in the past
@@ -81,9 +65,10 @@ tech: mine - fire the mine into where you were in the past
tech: increase health and harm taken
remove air control
negative tech, junk , experiment?
negative tech aspect, junk , experiment?
use name axion as a 3rd dark matter tech
add falling damage
negative tech aspect
tech: use the ability for power ups to have custom code
(note: this code is half way done, it just needs to be completed)
@@ -413,6 +398,8 @@ possible names for tech
dynamical systems
quantum zeno effect (perturbation of a system prevents some systems from evolving because it scrambles coherence) (apply to lasers, fields)
counterfactual - something false
axion - maybe a 3rd dark matter type tech
plot script: