implement block picking and remove water collision
This commit is contained in:
@@ -20,6 +20,7 @@ window.Minecraft = class {
|
|||||||
|
|
||||||
// Create player
|
// Create player
|
||||||
this.player = new Player(this.world);
|
this.player = new Player(this.world);
|
||||||
|
this.pickedBlock = 1;
|
||||||
|
|
||||||
// Initialize
|
// Initialize
|
||||||
this.init();
|
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
|
// Place block
|
||||||
if (button === 2) {
|
if (button === 2) {
|
||||||
if (hitResult != null) {
|
if (hitResult != null) {
|
||||||
@@ -109,7 +120,7 @@ window.Minecraft = class {
|
|||||||
|
|
||||||
// Don't place blocks if the player is standing there
|
// Don't place blocks if the player is standing there
|
||||||
if (!placedBoundingBox.intersects(this.player.boundingBox)) {
|
if (!placedBoundingBox.intersects(this.player.boundingBox)) {
|
||||||
this.world.setBlockAt(x, y, z, 1);
|
this.world.setBlockAt(x, y, z, this.pickedBlock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -132,10 +132,12 @@ window.World = class {
|
|||||||
|
|
||||||
let blockId = this.getBlockAt(x, y, z);
|
let blockId = this.getBlockAt(x, y, z);
|
||||||
let block = Block.getById(blockId);
|
let block = Block.getById(blockId);
|
||||||
let hit = block == null ? null : block.collisionRayTrace(x, y, z, from, to);
|
|
||||||
|
|
||||||
if (hit != null) {
|
if (block != null && block.canCollide()) {
|
||||||
return hit;
|
let hit = block.collisionRayTrace(x, y, z, from, to);
|
||||||
|
if (hit != null) {
|
||||||
|
return hit;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let lastHit = null;
|
let lastHit = null;
|
||||||
@@ -224,9 +226,12 @@ window.World = class {
|
|||||||
|
|
||||||
let blockId = this.getBlockAt(x, y, z);
|
let blockId = this.getBlockAt(x, y, z);
|
||||||
let block = Block.getById(blockId);
|
let block = Block.getById(blockId);
|
||||||
let hit = block == null ? null : block.collisionRayTrace(x, y, z, from, to);
|
|
||||||
if (hit != null) {
|
if (block != null && block.canCollide()) {
|
||||||
return hit;
|
let hit = block.collisionRayTrace(x, y, z, from, to);
|
||||||
|
if (hit != null) {
|
||||||
|
return hit;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -47,6 +47,10 @@ window.Block = class {
|
|||||||
return 1.0;
|
return 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
canCollide() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
getBoundingBox(world, x, y, z) {
|
getBoundingBox(world, x, y, z) {
|
||||||
return this.boundingBox;
|
return this.boundingBox;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,10 @@ window.BlockWater = class extends Block {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
canCollide() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
shouldRenderFace(world, x, y, z, face) {
|
shouldRenderFace(world, x, y, z, face) {
|
||||||
let typeId = world.getBlockAtFace(x, y, z, face);
|
let typeId = world.getBlockAtFace(x, y, z, face);
|
||||||
return typeId === 0 || typeId !== this.id && Block.getById(typeId).isTransparent();
|
return typeId === 0 || typeId !== this.id && Block.getById(typeId).isTransparent();
|
||||||
@@ -24,5 +28,4 @@ window.BlockWater = class extends Block {
|
|||||||
}
|
}
|
||||||
return box;
|
return box;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user