import Engine from './engine' import Camera from './engine/camera' import loadMesh from './engine/mesh/loader' import { Environment } from './engine/environment' import { LODTerrain } from './engine/components/terrain/lod' import { SimplexHeightMap } from './engine/components/terrain/heightmap' import { Material } from './engine/mesh/material' let game = new Engine() let env = new Environment() // let t = 0 async function pipeline () { let entity = await loadMesh(game.gl, 'test') let shader = await game.shaders.createShaderFromFiles(game.gl, 'basic', false) let terrainShader = await game.shaders.createShaderFromFiles(game.gl, 'terrain', false) entity.setRotation([0.0, 0.0, -90.0]) // Create a height map based on OpenSimplex noise let hmap = new SimplexHeightMap(1, 1, 256, 50) // Create a terrain let terrain = new LODTerrain([0.0, 0.0, 0.0], 1024, 1024, 850, 4) // Terrain material let material = new Material() material.textures = ['grass-1024.jpg'] await material.loadTextures(game.gl) terrain.setGenerator(hmap) terrain.setMaterial(material) // Create and initialize the camera let cam = new Camera([-200.0, 1.0, 0.0]) cam.updateProjection(game.gl) // Update function for camera game.addUpdateFunction(function (dt) { if (game.input.isDown('w')) { cam.processKeyboard(0, dt) } else if (game.input.isDown('s')) { cam.processKeyboard(1, dt) } if (game.input.isDown('a')) { cam.processKeyboard(2, dt) } else if (game.input.isDown('d')) { cam.processKeyboard(3, dt) } if (game.input.mouseMoved && game.input.mouse.btn0) { cam.processMouseMove(game.input.mouseOffset) } // Update detail levels terrain.update(game.gl, cam) terrain.updateLODMesh(game.gl) // TESTING: Move model forward // t = t + 0.1 // entity.setPosition([t, 0.0, 0.0]) }) // Render function for the triangle game.addRenderFunction(function (gl) { shader.use(gl) cam.draw(gl, shader) entity.draw(gl, shader) // Use terrain shader terrainShader.use(gl) // Set environment variables in shader env.draw(gl, terrainShader) // Set the viewport uniforms cam.draw(gl, terrainShader) // Draw terrain terrain.draw(gl, terrainShader) }) game.startGameLoop() } // Start the game, catch any errors thrown pipeline().catch(function (e) { console.error(e) })