UNPKG

@vrspace/babylonjs

Version:

vrspace.org babylonjs client

68 lines (62 loc) 2.39 kB
import {VRSPACEUI} from '../vrspace-ui.js'; /** Room with vrspace.org logo as floor and invisible cylinder walls, as used on vrspace.org demo site. */ export class LogoRoom { /** @param scene babylonjs scene */ constructor( scene ) { this.scene = scene; this.diameter = 20; this.shadows = true; } /** Creates VRSpaceUI, and displays the logo as floor mesh and creates walls. */ async load() { this.floorGroup = new BABYLON.TransformNode("Floor"); // ground, used for teleportation/pointer this.ground = BABYLON.MeshBuilder.CreateDisc("ground", {}, this.scene); this.ground.rotation = new BABYLON.Vector3( Math.PI/2, 0, 0 ); this.ground.position = new BABYLON.Vector3( 0, 0.1, 0 ); this.ground.parent = this.floorGroup; this.ground.isVisible = false; this.ground.checkCollisions = true; // mesh that we display as floor await VRSPACEUI.init(this.scene); // wait for logo to load VRSPACEUI.receiveShadows( VRSPACEUI.logo, this.shadows ); // CHECKME: true - why and why not? Shadows! VRSPACEUI.copyMesh(VRSPACEUI.logo, this.floorGroup, true); // walls, used for collisions, to limit the movement var walls = BABYLON.MeshBuilder.CreateCylinder("FloorWalls", {height:4,diameter:1,sideOrientation:BABYLON.Mesh.BACKSIDE}, this.scene); walls.checkCollisions = true; walls.isVisible = false; walls.position = new BABYLON.Vector3(0,2,0); walls.parent = this.floorGroup; this.setDiameter(this.diameter); this.floorGroup.position = new BABYLON.Vector3( 0, -0.05, 0 ); this.scene.addTransformNode(this.floorGroup); this.floorGroup.getChildMeshes().forEach(child=>{ if (child.name && child.name.indexOf("-instance") > 0 && child.material.getClassName() == "PBRMaterial") { child.material.clearCoat.isEnabled = true; child.material.metalic = 0.4; child.material.roughness = 0.6; } }); return this; } /** disposes of instantiated geometry */ dispose() { this.floorGroup.dispose(); } /** set room diameter and rescale */ setDiameter( diameter ) { this.diameter = diameter; this.floorGroup.scaling = new BABYLON.Vector3(this.diameter,2,this.diameter); } /** get current diameter */ getDiameter() { return this.diameter; } }