implement block break particles, version 1.0.2

This commit is contained in:
LabyStudio
2022-05-15 21:05:11 +02:00
parent 789ecdd2b4
commit 1e10dda0e2
11 changed files with 386 additions and 114 deletions
@@ -1,6 +1,5 @@
import Inventory from "../inventory/Inventory.js";
import EntityLiving from "./EntityLiving.js";
import BoundingBox from "../../util/BoundingBox.js";
import Block from "../world/block/Block.js";
import MathHelper from "../../util/MathHelper.js";
import Keyboard from "../../util/Keyboard.js";
@@ -44,6 +43,9 @@ export default class PlayerEntity extends EntityLiving {
this.cameraPitch = 0;
this.prevCameraYaw = 0;
this.prevCameraPitch = 0;
this.width = 0.6;
this.height = 1.8;
}
respawn() {
@@ -51,28 +53,6 @@ export default class PlayerEntity extends EntityLiving {
this.setPosition(spawn.x, spawn.y, spawn.z);
}
setPosition(x, y, z) {
let width = 0.3;
let height = 0.9;
this.boundingBox = new BoundingBox(
x - width,
y - height,
z - width,
x + width,
y + height,
z + width
);
this.motionX = 0;
this.motionY = 0;
this.motionZ = 0;
// Update position
this.x = (this.boundingBox.minX + this.boundingBox.maxX) / 2.0;
this.y = this.boundingBox.minY;
this.z = (this.boundingBox.minZ + this.boundingBox.maxZ) / 2.0;
}
turn(motionX, motionY) {
let sensitivity = this.minecraft.settings.sensitivity / 500;
this.rotationYaw = this.rotationYaw + motionX * sensitivity;
@@ -366,95 +346,6 @@ export default class PlayerEntity extends EntityLiving {
this.sneaking = sneaking;
}
moveCollide(targetX, targetY, targetZ) {
// Target position
let originalTargetX = targetX;
let originalTargetY = targetY;
let originalTargetZ = targetZ;
if (this.onGround && this.sneaking) {
for (; targetX !== 0.0 && this.world.getCollisionBoxes(this.boundingBox.offset(targetX, -this.stepHeight, 0.0)).length === 0; originalTargetX = targetX) {
if (targetX < 0.05 && targetX >= -0.05) {
targetX = 0.0;
} else if (targetX > 0.0) {
targetX -= 0.05;
} else {
targetX += 0.05;
}
}
for (; targetZ !== 0.0 && this.world.getCollisionBoxes(this.boundingBox.offset(0.0, -this.stepHeight, targetZ)).length === 0; originalTargetZ = targetZ) {
if (targetZ < 0.05 && targetZ >= -0.05) {
targetZ = 0.0;
} else if (targetZ > 0.0) {
targetZ -= 0.05;
} else {
targetZ += 0.05;
}
}
for (; targetX !== 0.0 && targetZ !== 0.0 && this.world.getCollisionBoxes(this.boundingBox.offset(targetX, -this.stepHeight, targetZ)).length === 0; originalTargetZ = targetZ) {
if (targetX < 0.05 && targetX >= -0.05) {
targetX = 0.0;
} else if (targetX > 0.0) {
targetX -= 0.05;
} else {
targetX += 0.05;
}
originalTargetX = targetX;
if (targetZ < 0.05 && targetZ >= -0.05) {
targetZ = 0.0;
} else if (targetZ > 0.0) {
targetZ -= 0.05;
} else {
targetZ += 0.05;
}
}
}
// Get level tiles as bounding boxes
let boundingBoxList = this.world.getCollisionBoxes(this.boundingBox.expand(targetX, targetY, targetZ));
// Move bounding box
for (let aABB in boundingBoxList) {
targetY = boundingBoxList[aABB].clipYCollide(this.boundingBox, targetY);
}
this.boundingBox.move(0.0, targetY, 0.0);
for (let aABB in boundingBoxList) {
targetX = boundingBoxList[aABB].clipXCollide(this.boundingBox, targetX);
}
this.boundingBox.move(targetX, 0.0, 0.0);
for (let aABB in boundingBoxList) {
targetZ = boundingBoxList[aABB].clipZCollide(this.boundingBox, targetZ);
}
this.boundingBox.move(0.0, 0.0, targetZ);
this.onGround = originalTargetY !== targetY && originalTargetY < 0.0;
// Stop motion on collision
if (originalTargetX !== targetX) {
this.motionX = 0.0;
}
if (originalTargetY !== targetY) {
this.motionY = 0.0;
}
if (originalTargetZ !== targetZ) {
this.motionZ = 0.0;
}
// Update position
this.x = (this.boundingBox.minX + this.boundingBox.maxX) / 2.0;
this.y = this.boundingBox.minY;
this.z = (this.boundingBox.minZ + this.boundingBox.maxZ) / 2.0;
// Horizontal collision?
return originalTargetX !== targetX || originalTargetZ !== targetZ;
}
getEyeHeight() {
return this.sneaking ? 1.50 : 1.62;
}