2018-11-25 17:44:32 +00:00
|
|
|
import Engine from './engine'
|
|
|
|
import Camera from './engine/camera'
|
2018-11-26 20:39:45 +00:00
|
|
|
import { MeshInstance } from './engine/components'
|
2018-11-25 17:44:32 +00:00
|
|
|
|
|
|
|
import { Environment } from './engine/environment'
|
|
|
|
import { Terrain } from './engine/components/terrain'
|
|
|
|
import { SimplexHeightMap } from './engine/components/terrain/heightmap'
|
|
|
|
import { Material } from './engine/mesh/material'
|
|
|
|
|
|
|
|
let game = new Engine()
|
|
|
|
let env = new Environment()
|
|
|
|
|
|
|
|
async function pipeline () {
|
2018-11-26 20:39:45 +00:00
|
|
|
let entity = await MeshInstance.loadFile(game.gl, 'test', [0.0, 0.0, 0.0])
|
2018-11-26 15:37:25 +00:00
|
|
|
let shader = await game.shaders.createShaderFromFiles(game.gl, 'basic', false)
|
2018-11-25 17:44:32 +00:00
|
|
|
let terrainShader = await game.shaders.createShaderFromFiles(game.gl, 'terrain', false)
|
|
|
|
|
|
|
|
// Create a height map based on OpenSimplex noise
|
|
|
|
let hmap = new SimplexHeightMap(1, 1, 256, 50)
|
|
|
|
|
|
|
|
// Create a terrain
|
|
|
|
let terrain = new Terrain([0.0, 0.0, 0.0], 256, 256)
|
|
|
|
terrain.createMesh(game.gl, hmap)
|
|
|
|
|
|
|
|
// Terrain material
|
|
|
|
let material = new Material()
|
|
|
|
material.textures = ['grass-1024.jpg']
|
|
|
|
await material.loadTextures(game.gl)
|
|
|
|
terrain.setMaterial(material)
|
|
|
|
|
|
|
|
// Create and initialize the camera
|
|
|
|
let cam = new Camera([0.0, 1.0, 2.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)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
// Render function for the triangle
|
|
|
|
game.addRenderFunction(function (gl) {
|
2018-11-26 15:37:25 +00:00
|
|
|
shader.use(gl)
|
|
|
|
cam.draw(gl, shader)
|
|
|
|
entity.draw(gl, shader)
|
|
|
|
|
2018-11-25 17:44:32 +00:00
|
|
|
// 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()
|
|
|
|
}
|
|
|
|
|
|
|
|
pipeline().catch(function (e) {
|
|
|
|
console.error(e)
|
|
|
|
})
|