implement stats.min.js, improve fps
This commit is contained in:
@@ -8,9 +8,16 @@ window.GameWindow = class {
|
||||
this.mouseMotionY = 0;
|
||||
this.mouseLocked = false;
|
||||
|
||||
let wrapper = document.getElementById(this.canvasWrapperId);
|
||||
|
||||
// Stats
|
||||
this.stats = new Stats()
|
||||
this.stats.showPanel(1);
|
||||
wrapper.appendChild(this.stats.dom);
|
||||
|
||||
// Add web renderer canvas to wrapper
|
||||
let canvas = renderer.canvasElement;
|
||||
document.getElementById(this.canvasWrapperId).appendChild(canvas);
|
||||
wrapper.appendChild(canvas);
|
||||
|
||||
// Init
|
||||
this.onResize();
|
||||
|
||||
@@ -42,6 +42,8 @@ window.Minecraft = class {
|
||||
}
|
||||
|
||||
onLoop() {
|
||||
this.window.stats.begin();
|
||||
|
||||
// Update the timer
|
||||
this.timer.advanceTime();
|
||||
|
||||
@@ -63,6 +65,8 @@ window.Minecraft = class {
|
||||
this.lastTime += 1000;
|
||||
this.frames = 0;
|
||||
}
|
||||
|
||||
this.window.stats.end();
|
||||
}
|
||||
|
||||
onRender(partialTicks) {
|
||||
@@ -84,27 +88,29 @@ window.Minecraft = class {
|
||||
}
|
||||
|
||||
onMouseClicked(button) {
|
||||
let hitResult = this.player.rayTrace(5, this.timer.partialTicks);
|
||||
if (this.window.mouseLocked) {
|
||||
let hitResult = this.player.rayTrace(5, this.timer.partialTicks);
|
||||
|
||||
// Destroy block
|
||||
if (button === 0) {
|
||||
if (hitResult != null) {
|
||||
this.world.setBlockAt(hitResult.x, hitResult.y, hitResult.z, 0);
|
||||
// Destroy block
|
||||
if (button === 0) {
|
||||
if (hitResult != null) {
|
||||
this.world.setBlockAt(hitResult.x, hitResult.y, hitResult.z, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Place block
|
||||
if (button === 2) {
|
||||
if (hitResult != null) {
|
||||
let x = hitResult.x + hitResult.face.x;
|
||||
let y = hitResult.y + hitResult.face.y;
|
||||
let z = hitResult.z + hitResult.face.z;
|
||||
// Place block
|
||||
if (button === 2) {
|
||||
if (hitResult != null) {
|
||||
let x = hitResult.x + hitResult.face.x;
|
||||
let y = hitResult.y + hitResult.face.y;
|
||||
let z = hitResult.z + hitResult.face.z;
|
||||
|
||||
let placedBoundingBox = new BoundingBox(x, y, z, x + 1, y + 1, z + 1);
|
||||
let placedBoundingBox = new BoundingBox(x, y, z, x + 1, y + 1, z + 1);
|
||||
|
||||
// Don't place blocks if the player is standing there
|
||||
if (!placedBoundingBox.intersects(this.player.boundingBox)) {
|
||||
this.world.setBlockAt(x, y, z, 1);
|
||||
// Don't place blocks if the player is standing there
|
||||
if (!placedBoundingBox.intersects(this.player.boundingBox)) {
|
||||
this.world.setBlockAt(x, y, z, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,14 +16,9 @@ window.BlockRenderer = class {
|
||||
|
||||
// Check if face is hidden by other block
|
||||
if (block.shouldRenderFace(world, x, y, z, face)) {
|
||||
// Start drawing
|
||||
this.tessellator.startDrawing();
|
||||
|
||||
// Render face
|
||||
this.renderFace(world, block, boundingBox, face, x, y, z);
|
||||
|
||||
// Draw
|
||||
this.tessellator.draw(group);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,8 +6,6 @@ window.Tessellator = class {
|
||||
side: THREE.BackSide,
|
||||
transparent: true
|
||||
});
|
||||
|
||||
this.index = new THREE.BufferAttribute(new Uint32Array([0, 2, 1, 0, 3, 2]), 1);
|
||||
}
|
||||
|
||||
bindTexture(texture) {
|
||||
@@ -50,7 +48,19 @@ window.Tessellator = class {
|
||||
geometry.setAttribute('position', new THREE.BufferAttribute(new Float32Array(this.vertices), 3));
|
||||
geometry.setAttribute('color', new THREE.BufferAttribute(new Float32Array(this.colors), 3));
|
||||
geometry.setAttribute('uv', new THREE.BufferAttribute(new Float32Array(this.uv), 2));
|
||||
geometry.setIndex(this.index);
|
||||
|
||||
// Create index array
|
||||
let index = [];
|
||||
let verticesPerFace = 4;
|
||||
for (let i = 0; i < this.addedVertices / verticesPerFace; i++) {
|
||||
index.push(i * verticesPerFace + 0);
|
||||
index.push(i * verticesPerFace + 2);
|
||||
index.push(i * verticesPerFace + 1);
|
||||
index.push(i * verticesPerFace + 0);
|
||||
index.push(i * verticesPerFace + 3);
|
||||
index.push(i * verticesPerFace + 2);
|
||||
}
|
||||
geometry.setIndex(new THREE.BufferAttribute(new Uint32Array(index), 1));
|
||||
|
||||
let mesh = new THREE.Mesh(geometry, this.material);
|
||||
group.matrixAutoUpdate = false;
|
||||
|
||||
@@ -26,6 +26,10 @@ window.ChunkSection = class {
|
||||
this.dirty = false;
|
||||
this.group.clear();
|
||||
|
||||
// Start drawing chunk section
|
||||
let tessellator = renderer.blockRenderer.tessellator;
|
||||
tessellator.startDrawing();
|
||||
|
||||
for (let x = 0; x < ChunkSection.SIZE; x++) {
|
||||
for (let y = 0; y < ChunkSection.SIZE; y++) {
|
||||
for (let z = 0; z < ChunkSection.SIZE; z++) {
|
||||
@@ -42,6 +46,9 @@ window.ChunkSection = class {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Draw chunk section
|
||||
tessellator.draw(this.group);
|
||||
}
|
||||
|
||||
getBlockAt(x, y, z) {
|
||||
|
||||
@@ -45,6 +45,7 @@ function updatePreStatus(message) {
|
||||
loadScripts([
|
||||
// Dependencies
|
||||
"libraries/three.min.js",
|
||||
"libraries/stats.min.js",
|
||||
|
||||
// Minecraft Source
|
||||
"src/js/net/minecraft/util/EnumBlockFace.js",
|
||||
|
||||
Reference in New Issue
Block a user