UNPKG

@vrspace/babylonjs

Version:

vrspace.org babylonjs client

90 lines (83 loc) 2.24 kB
import { World } from '../../world/world.js'; /** * Helper component that displays the grid on y=0 plane. * GridMaterial: https://doc.babylonjs.com/toolsAndResources/assetLibraries/materialsLibrary/gridMat/ */ export class GroundGrid { /** * @param {World} world */ constructor(world) { /** @type {World} */ this.world = world; this.scene = world.scene; this.active = false; this.ground = null; this.originalGround = null; } /** * Show the grid * @returns ground mesh */ show() { if ( this.active ) { return; } this.active = true; this.ground = BABYLON.MeshBuilder.CreateDisc("groundGrid", {radius:1000}, this.scene); this.ground.rotation = new BABYLON.Vector3( Math.PI/2, 0, 0 ); this.ground.position = new BABYLON.Vector3( 0, -0.05, 0 ); //this.ground.isVisible = false; this.ground.checkCollisions = false; // handy material this.ground.material = new BABYLON.GridMaterial("groundMaterial", this.scene); this.ground.material.opacity = 0.999; this.ground.material.backFaceCulling = false; this.ground.material.alphaMode = BABYLON.Constants.ALPHA_PREMULTIPLIED; //this.ground.material.alphaMode = BABYLON.Constants.ALPHA_ONEONE; // also fine return this.ground; } /** * Hide the grid, disposes of the mesh */ hide() { if ( !this.active ) { return; } this.active = false; this.ground.dispose(); this.ground = null; this.originalGround = null; } /** * Replace world ground with the created grid. Shows the grid if not shown already. */ replace() { if ( this.originalGround ) { return; } this.originalGround = this.world.ground; if ( !this.active ) { this.show(); } this.world.ground = this.ground; } /** * Restores the original world ground, and closes the grid. */ restore() { if ( !this.active ) { return; } if ( this.originalGround ) { this.world.ground = this.originalGround; } this.hide(); } /** * Clean up used resources */ dispose() { this.restore(); } }