implement block picking and remove water collision

This commit is contained in:
LabyStudio
2022-02-01 11:21:34 +01:00
parent cc3da60a6e
commit bda4e01807
4 changed files with 31 additions and 8 deletions
+12 -1
View File
@@ -20,6 +20,7 @@ window.Minecraft = class {
// Create player
this.player = new Player(this.world);
this.pickedBlock = 1;
// Initialize
this.init();
@@ -98,6 +99,16 @@ window.Minecraft = class {
}
}
// Pick block
if (button === 1) {
if (hitResult != null) {
let typeId = this.world.getBlockAt(hitResult.x, hitResult.y, hitResult.z);
if (typeId !== 0) {
this.pickedBlock = typeId;
}
}
}
// Place block
if (button === 2) {
if (hitResult != null) {
@@ -109,7 +120,7 @@ window.Minecraft = class {
// Don't place blocks if the player is standing there
if (!placedBoundingBox.intersects(this.player.boundingBox)) {
this.world.setBlockAt(x, y, z, 1);
this.world.setBlockAt(x, y, z, this.pickedBlock);
}
}
}
+11 -6
View File
@@ -132,10 +132,12 @@ window.World = class {
let blockId = this.getBlockAt(x, y, z);
let block = Block.getById(blockId);
let hit = block == null ? null : block.collisionRayTrace(x, y, z, from, to);
if (hit != null) {
return hit;
if (block != null && block.canCollide()) {
let hit = block.collisionRayTrace(x, y, z, from, to);
if (hit != null) {
return hit;
}
}
let lastHit = null;
@@ -224,9 +226,12 @@ window.World = class {
let blockId = this.getBlockAt(x, y, z);
let block = Block.getById(blockId);
let hit = block == null ? null : block.collisionRayTrace(x, y, z, from, to);
if (hit != null) {
return hit;
if (block != null && block.canCollide()) {
let hit = block.collisionRayTrace(x, y, z, from, to);
if (hit != null) {
return hit;
}
}
}
@@ -47,6 +47,10 @@ window.Block = class {
return 1.0;
}
canCollide() {
return true;
}
getBoundingBox(world, x, y, z) {
return this.boundingBox;
}
@@ -12,6 +12,10 @@ window.BlockWater = class extends Block {
return false;
}
canCollide() {
return false;
}
shouldRenderFace(world, x, y, z, face) {
let typeId = world.getBlockAtFace(x, y, z, face);
return typeId === 0 || typeId !== this.id && Block.getById(typeId).isTransparent();
@@ -24,5 +28,4 @@ window.BlockWater = class extends Block {
}
return box;
}
}