Finished platforms, refactoring

This commit is contained in:
Mottributo 2023-03-26 20:40:53 +03:00
parent 3f733eea06
commit 927e3a2c84

View File

@ -270,7 +270,6 @@ function GameCharacter() {
this.x += this.speed;
}
if (this.isJumping) {
this.memorizedPlatform = undefined;
this.y -= this.curJumpingStrength;
this.curJumpingStrength -= gravity;
// If the jump peak is reached, the character is considered to be falling instead.
@ -283,12 +282,12 @@ function GameCharacter() {
this.curJumpingStrength -= gravity;
for (i = 0; i < platforms[this.curGroundIndex].length; i++) {
// If a character is falling above some platform, memorize it
if (platforms[this.curGroundIndex][i].isBelow(this)) {
if (platforms[this.curGroundIndex][i].isAbove(this)) {
this.memorizedPlatform = platforms[this.curGroundIndex][i];
}
// If a character is below a memorized platform, make them stand on that platform
else if (typeof memorizedPlatform !== 'undefined' &&
this.memorizedPlatform.isAbove(this)) {
if (typeof this.memorizedPlatform !== 'undefined' &&
this.memorizedPlatform.isBelow(this)) {
this.y = this.memorizedPlatform.y;
this.isFalling = false;
this.curJumpingStrength = 0;
@ -306,13 +305,12 @@ function GameCharacter() {
// Not plummeting, standing or falling means being on a platform.
// Perform checks whether the player is still on the same platform,
// and fall them in case they aren't.
if (this.x < this.memorizedPlatform.x - this.memorizedPlatform.width
||
this.x > this.memorizedPlatform.x + this.memorizedPlatform.width
if (!this.memorizedPlatform._isWithinX(this)
||
this.curGroundIndex != this.memorizedPlatform.curGroundIndex) {
this.isFalling = true;
this.isOnPlatform = false;
this.memorizedPlatform = undefined;
}
}
}
@ -349,6 +347,10 @@ function GameCharacter() {
}
};
}
// NB: All the platforms mechanics were done
// before the task was seen on Week 20.
// Therefore, the implementation may
// differ from one in the lecture.
function Platform(curGroundIndex, x, width, y) {
this.curGroundIndex = curGroundIndex;
this.x = x;
@ -390,21 +392,24 @@ function Platform(curGroundIndex, x, width, y) {
};
this._isWithinX = function (who) {
if (who.x > this.x - this.width && who.x < this.x + this.width) {
if (who.x >= this.x - this.width && who.x <= this.x + this.width) {
return true;
}
return false;
};
this.isBelow = function (who) {
if (this._isWithinX(who) && who.y > this.y) {
if (this._isWithinX(who) && who.y >= this.y) {
return true;
}
return false;
};
this.isAbove = function (who) {
if (this._isWithinX(who) && who.y < this.y) {
return true;
}
return false;
};
}
@ -989,7 +994,6 @@ function drawTrees() {
}
}
}
function drawPlatforms(rowIndex) {
push();
for (k = 0; k < platforms[rowIndex].length; k++) {
@ -1004,7 +1008,6 @@ function drawPlatformsShadows(rowIndex) {
}
pop();
}
function renderFlagpole() {
// NB - This function is implemented a bit differently than how it was requested in Part 6.
// It has no states to switch between - instead, the flag gradually goes into the opposite direction